grpc 1.0.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -0,0 +1,388 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include "src/core/lib/iomgr/port.h"
|
35
|
+
|
36
|
+
#ifdef GRPC_UV
|
37
|
+
|
38
|
+
#include <string.h>
|
39
|
+
|
40
|
+
#include <grpc/support/alloc.h>
|
41
|
+
#include <grpc/support/log.h>
|
42
|
+
|
43
|
+
#include "src/core/lib/iomgr/error.h"
|
44
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
45
|
+
#include "src/core/lib/iomgr/sockaddr.h"
|
46
|
+
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
47
|
+
#include "src/core/lib/iomgr/tcp_server.h"
|
48
|
+
#include "src/core/lib/iomgr/tcp_uv.h"
|
49
|
+
|
50
|
+
/* one listening port */
|
51
|
+
typedef struct grpc_tcp_listener grpc_tcp_listener;
|
52
|
+
struct grpc_tcp_listener {
|
53
|
+
uv_tcp_t *handle;
|
54
|
+
grpc_tcp_server *server;
|
55
|
+
unsigned port_index;
|
56
|
+
int port;
|
57
|
+
/* linked list */
|
58
|
+
struct grpc_tcp_listener *next;
|
59
|
+
};
|
60
|
+
|
61
|
+
struct grpc_tcp_server {
|
62
|
+
gpr_refcount refs;
|
63
|
+
|
64
|
+
/* Called whenever accept() succeeds on a server port. */
|
65
|
+
grpc_tcp_server_cb on_accept_cb;
|
66
|
+
void *on_accept_cb_arg;
|
67
|
+
|
68
|
+
int open_ports;
|
69
|
+
|
70
|
+
/* linked list of server ports */
|
71
|
+
grpc_tcp_listener *head;
|
72
|
+
grpc_tcp_listener *tail;
|
73
|
+
|
74
|
+
/* List of closures passed to shutdown_starting_add(). */
|
75
|
+
grpc_closure_list shutdown_starting;
|
76
|
+
|
77
|
+
/* shutdown callback */
|
78
|
+
grpc_closure *shutdown_complete;
|
79
|
+
|
80
|
+
grpc_resource_quota *resource_quota;
|
81
|
+
};
|
82
|
+
|
83
|
+
grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx,
|
84
|
+
grpc_closure *shutdown_complete,
|
85
|
+
const grpc_channel_args *args,
|
86
|
+
grpc_tcp_server **server) {
|
87
|
+
grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server));
|
88
|
+
s->resource_quota = grpc_resource_quota_create(NULL);
|
89
|
+
for (size_t i = 0; i < (args == NULL ? 0 : args->num_args); i++) {
|
90
|
+
if (0 == strcmp(GRPC_ARG_RESOURCE_QUOTA, args->args[i].key)) {
|
91
|
+
if (args->args[i].type == GRPC_ARG_POINTER) {
|
92
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
93
|
+
s->resource_quota =
|
94
|
+
grpc_resource_quota_ref_internal(args->args[i].value.pointer.p);
|
95
|
+
} else {
|
96
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
97
|
+
gpr_free(s);
|
98
|
+
return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA
|
99
|
+
" must be a pointer to a buffer pool");
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
gpr_ref_init(&s->refs, 1);
|
104
|
+
s->on_accept_cb = NULL;
|
105
|
+
s->on_accept_cb_arg = NULL;
|
106
|
+
s->open_ports = 0;
|
107
|
+
s->head = NULL;
|
108
|
+
s->tail = NULL;
|
109
|
+
s->shutdown_starting.head = NULL;
|
110
|
+
s->shutdown_starting.tail = NULL;
|
111
|
+
s->shutdown_complete = shutdown_complete;
|
112
|
+
*server = s;
|
113
|
+
return GRPC_ERROR_NONE;
|
114
|
+
}
|
115
|
+
|
116
|
+
grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s) {
|
117
|
+
gpr_ref(&s->refs);
|
118
|
+
return s;
|
119
|
+
}
|
120
|
+
|
121
|
+
void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s,
|
122
|
+
grpc_closure *shutdown_starting) {
|
123
|
+
grpc_closure_list_append(&s->shutdown_starting, shutdown_starting,
|
124
|
+
GRPC_ERROR_NONE);
|
125
|
+
}
|
126
|
+
|
127
|
+
static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
128
|
+
if (s->shutdown_complete != NULL) {
|
129
|
+
grpc_closure_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE);
|
130
|
+
}
|
131
|
+
|
132
|
+
while (s->head) {
|
133
|
+
grpc_tcp_listener *sp = s->head;
|
134
|
+
s->head = sp->next;
|
135
|
+
sp->next = NULL;
|
136
|
+
gpr_free(sp->handle);
|
137
|
+
gpr_free(sp);
|
138
|
+
}
|
139
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
140
|
+
gpr_free(s);
|
141
|
+
}
|
142
|
+
|
143
|
+
static void handle_close_callback(uv_handle_t *handle) {
|
144
|
+
grpc_tcp_listener *sp = (grpc_tcp_listener *)handle->data;
|
145
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
146
|
+
sp->server->open_ports--;
|
147
|
+
if (sp->server->open_ports == 0) {
|
148
|
+
finish_shutdown(&exec_ctx, sp->server);
|
149
|
+
}
|
150
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
151
|
+
}
|
152
|
+
|
153
|
+
static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
154
|
+
int immediately_done = 0;
|
155
|
+
grpc_tcp_listener *sp;
|
156
|
+
|
157
|
+
if (s->open_ports == 0) {
|
158
|
+
immediately_done = 1;
|
159
|
+
}
|
160
|
+
for (sp = s->head; sp; sp = sp->next) {
|
161
|
+
uv_close((uv_handle_t *)sp->handle, handle_close_callback);
|
162
|
+
}
|
163
|
+
|
164
|
+
if (immediately_done) {
|
165
|
+
finish_shutdown(exec_ctx, s);
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
170
|
+
if (gpr_unref(&s->refs)) {
|
171
|
+
/* Complete shutdown_starting work before destroying. */
|
172
|
+
grpc_exec_ctx local_exec_ctx = GRPC_EXEC_CTX_INIT;
|
173
|
+
grpc_closure_list_sched(&local_exec_ctx, &s->shutdown_starting);
|
174
|
+
if (exec_ctx == NULL) {
|
175
|
+
grpc_exec_ctx_flush(&local_exec_ctx);
|
176
|
+
tcp_server_destroy(&local_exec_ctx, s);
|
177
|
+
grpc_exec_ctx_finish(&local_exec_ctx);
|
178
|
+
} else {
|
179
|
+
grpc_exec_ctx_finish(&local_exec_ctx);
|
180
|
+
tcp_server_destroy(exec_ctx, s);
|
181
|
+
}
|
182
|
+
}
|
183
|
+
}
|
184
|
+
|
185
|
+
static void accepted_connection_close_cb(uv_handle_t *handle) {
|
186
|
+
gpr_free(handle);
|
187
|
+
}
|
188
|
+
|
189
|
+
static void on_connect(uv_stream_t *server, int status) {
|
190
|
+
grpc_tcp_listener *sp = (grpc_tcp_listener *)server->data;
|
191
|
+
uv_tcp_t *client;
|
192
|
+
grpc_endpoint *ep = NULL;
|
193
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
194
|
+
grpc_resolved_address peer_name;
|
195
|
+
char *peer_name_string;
|
196
|
+
int err;
|
197
|
+
|
198
|
+
if (status < 0) {
|
199
|
+
gpr_log(GPR_INFO, "Skipping on_accept due to error: %s",
|
200
|
+
uv_strerror(status));
|
201
|
+
return;
|
202
|
+
}
|
203
|
+
|
204
|
+
client = gpr_malloc(sizeof(uv_tcp_t));
|
205
|
+
uv_tcp_init(uv_default_loop(), client);
|
206
|
+
// UV documentation says this is guaranteed to succeed
|
207
|
+
uv_accept((uv_stream_t *)server, (uv_stream_t *)client);
|
208
|
+
// If the server has not been started, we discard incoming connections
|
209
|
+
if (sp->server->on_accept_cb == NULL) {
|
210
|
+
uv_close((uv_handle_t *)client, accepted_connection_close_cb);
|
211
|
+
} else {
|
212
|
+
peer_name_string = NULL;
|
213
|
+
memset(&peer_name, 0, sizeof(grpc_resolved_address));
|
214
|
+
peer_name.len = sizeof(struct sockaddr_storage);
|
215
|
+
err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name.addr,
|
216
|
+
(int *)&peer_name.len);
|
217
|
+
if (err == 0) {
|
218
|
+
peer_name_string = grpc_sockaddr_to_uri(&peer_name);
|
219
|
+
} else {
|
220
|
+
gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", uv_strerror(status));
|
221
|
+
}
|
222
|
+
ep = grpc_tcp_create(client, sp->server->resource_quota, peer_name_string);
|
223
|
+
// Create acceptor.
|
224
|
+
grpc_tcp_server_acceptor *acceptor = gpr_malloc(sizeof(*acceptor));
|
225
|
+
acceptor->from_server = sp->server;
|
226
|
+
acceptor->port_index = sp->port_index;
|
227
|
+
acceptor->fd_index = 0;
|
228
|
+
sp->server->on_accept_cb(&exec_ctx, sp->server->on_accept_cb_arg, ep, NULL,
|
229
|
+
acceptor);
|
230
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle,
|
235
|
+
const grpc_resolved_address *addr,
|
236
|
+
unsigned port_index,
|
237
|
+
grpc_tcp_listener **listener) {
|
238
|
+
grpc_tcp_listener *sp = NULL;
|
239
|
+
int port = -1;
|
240
|
+
int status;
|
241
|
+
grpc_error *error;
|
242
|
+
grpc_resolved_address sockname_temp;
|
243
|
+
|
244
|
+
// The last argument to uv_tcp_bind is flags
|
245
|
+
status = uv_tcp_bind(handle, (struct sockaddr *)addr->addr, 0);
|
246
|
+
if (status != 0) {
|
247
|
+
error = GRPC_ERROR_CREATE("Failed to bind to port");
|
248
|
+
error =
|
249
|
+
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
|
250
|
+
return error;
|
251
|
+
}
|
252
|
+
|
253
|
+
status = uv_listen((uv_stream_t *)handle, SOMAXCONN, on_connect);
|
254
|
+
if (status != 0) {
|
255
|
+
error = GRPC_ERROR_CREATE("Failed to listen to port");
|
256
|
+
error =
|
257
|
+
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
|
258
|
+
return error;
|
259
|
+
}
|
260
|
+
|
261
|
+
sockname_temp.len = (int)sizeof(struct sockaddr_storage);
|
262
|
+
status = uv_tcp_getsockname(handle, (struct sockaddr *)&sockname_temp.addr,
|
263
|
+
(int *)&sockname_temp.len);
|
264
|
+
if (status != 0) {
|
265
|
+
error = GRPC_ERROR_CREATE("getsockname failed");
|
266
|
+
error =
|
267
|
+
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
|
268
|
+
return error;
|
269
|
+
}
|
270
|
+
|
271
|
+
port = grpc_sockaddr_get_port(&sockname_temp);
|
272
|
+
|
273
|
+
GPR_ASSERT(port >= 0);
|
274
|
+
GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server");
|
275
|
+
sp = gpr_malloc(sizeof(grpc_tcp_listener));
|
276
|
+
sp->next = NULL;
|
277
|
+
if (s->head == NULL) {
|
278
|
+
s->head = sp;
|
279
|
+
} else {
|
280
|
+
s->tail->next = sp;
|
281
|
+
}
|
282
|
+
s->tail = sp;
|
283
|
+
sp->server = s;
|
284
|
+
sp->handle = handle;
|
285
|
+
sp->port = port;
|
286
|
+
sp->port_index = port_index;
|
287
|
+
handle->data = sp;
|
288
|
+
s->open_ports++;
|
289
|
+
GPR_ASSERT(sp->handle);
|
290
|
+
*listener = sp;
|
291
|
+
|
292
|
+
return GRPC_ERROR_NONE;
|
293
|
+
}
|
294
|
+
|
295
|
+
grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
|
296
|
+
const grpc_resolved_address *addr,
|
297
|
+
int *port) {
|
298
|
+
// This function is mostly copied from tcp_server_windows.c
|
299
|
+
grpc_tcp_listener *sp = NULL;
|
300
|
+
uv_tcp_t *handle;
|
301
|
+
grpc_resolved_address addr6_v4mapped;
|
302
|
+
grpc_resolved_address wildcard;
|
303
|
+
grpc_resolved_address *allocated_addr = NULL;
|
304
|
+
grpc_resolved_address sockname_temp;
|
305
|
+
unsigned port_index = 0;
|
306
|
+
int status;
|
307
|
+
grpc_error *error = GRPC_ERROR_NONE;
|
308
|
+
|
309
|
+
if (s->tail != NULL) {
|
310
|
+
port_index = s->tail->port_index + 1;
|
311
|
+
}
|
312
|
+
|
313
|
+
/* Check if this is a wildcard port, and if so, try to keep the port the same
|
314
|
+
as some previously created listener. */
|
315
|
+
if (grpc_sockaddr_get_port(addr) == 0) {
|
316
|
+
for (sp = s->head; sp; sp = sp->next) {
|
317
|
+
sockname_temp.len = sizeof(struct sockaddr_storage);
|
318
|
+
if (0 == uv_tcp_getsockname(sp->handle,
|
319
|
+
(struct sockaddr *)&sockname_temp.addr,
|
320
|
+
(int *)&sockname_temp.len)) {
|
321
|
+
*port = grpc_sockaddr_get_port(&sockname_temp);
|
322
|
+
if (*port > 0) {
|
323
|
+
allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
|
324
|
+
memcpy(allocated_addr, addr, sizeof(grpc_resolved_address));
|
325
|
+
grpc_sockaddr_set_port(allocated_addr, *port);
|
326
|
+
addr = allocated_addr;
|
327
|
+
break;
|
328
|
+
}
|
329
|
+
}
|
330
|
+
}
|
331
|
+
}
|
332
|
+
|
333
|
+
if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
|
334
|
+
addr = &addr6_v4mapped;
|
335
|
+
}
|
336
|
+
|
337
|
+
/* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
|
338
|
+
if (grpc_sockaddr_is_wildcard(addr, port)) {
|
339
|
+
grpc_sockaddr_make_wildcard6(*port, &wildcard);
|
340
|
+
|
341
|
+
addr = &wildcard;
|
342
|
+
}
|
343
|
+
|
344
|
+
handle = gpr_malloc(sizeof(uv_tcp_t));
|
345
|
+
status = uv_tcp_init(uv_default_loop(), handle);
|
346
|
+
if (status == 0) {
|
347
|
+
error = add_socket_to_server(s, handle, addr, port_index, &sp);
|
348
|
+
} else {
|
349
|
+
error = GRPC_ERROR_CREATE("Failed to initialize UV tcp handle");
|
350
|
+
error =
|
351
|
+
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
|
352
|
+
}
|
353
|
+
|
354
|
+
gpr_free(allocated_addr);
|
355
|
+
|
356
|
+
if (error != GRPC_ERROR_NONE) {
|
357
|
+
grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING(
|
358
|
+
"Failed to add port to server", &error, 1);
|
359
|
+
GRPC_ERROR_UNREF(error);
|
360
|
+
error = error_out;
|
361
|
+
*port = -1;
|
362
|
+
} else {
|
363
|
+
GPR_ASSERT(sp != NULL);
|
364
|
+
*port = sp->port;
|
365
|
+
}
|
366
|
+
return error;
|
367
|
+
}
|
368
|
+
|
369
|
+
void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server,
|
370
|
+
grpc_pollset **pollsets, size_t pollset_count,
|
371
|
+
grpc_tcp_server_cb on_accept_cb, void *cb_arg) {
|
372
|
+
grpc_tcp_listener *sp;
|
373
|
+
(void)pollsets;
|
374
|
+
(void)pollset_count;
|
375
|
+
GPR_ASSERT(on_accept_cb);
|
376
|
+
GPR_ASSERT(!server->on_accept_cb);
|
377
|
+
server->on_accept_cb = on_accept_cb;
|
378
|
+
server->on_accept_cb_arg = cb_arg;
|
379
|
+
for (sp = server->head; sp; sp = sp->next) {
|
380
|
+
GPR_ASSERT(uv_listen((uv_stream_t *)sp->handle, SOMAXCONN, on_connect) ==
|
381
|
+
0);
|
382
|
+
}
|
383
|
+
}
|
384
|
+
|
385
|
+
void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx,
|
386
|
+
grpc_tcp_server *s) {}
|
387
|
+
|
388
|
+
#endif /* GRPC_UV */
|
@@ -31,13 +31,13 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#include
|
34
|
+
#include "src/core/lib/iomgr/port.h"
|
35
35
|
|
36
|
-
#ifdef
|
36
|
+
#ifdef GRPC_WINSOCK_SOCKET
|
37
37
|
|
38
|
-
#include
|
38
|
+
#include "src/core/lib/iomgr/sockaddr.h"
|
39
39
|
|
40
|
-
#include
|
40
|
+
#include <io.h>
|
41
41
|
|
42
42
|
#include <grpc/support/alloc.h>
|
43
43
|
#include <grpc/support/log.h>
|
@@ -48,6 +48,8 @@
|
|
48
48
|
|
49
49
|
#include "src/core/lib/iomgr/iocp_windows.h"
|
50
50
|
#include "src/core/lib/iomgr/pollset_windows.h"
|
51
|
+
#include "src/core/lib/iomgr/resolve_address.h"
|
52
|
+
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
51
53
|
#include "src/core/lib/iomgr/socket_windows.h"
|
52
54
|
#include "src/core/lib/iomgr/tcp_server.h"
|
53
55
|
#include "src/core/lib/iomgr/tcp_windows.h"
|
@@ -71,6 +73,7 @@ struct grpc_tcp_listener {
|
|
71
73
|
/* The cached AcceptEx for that port. */
|
72
74
|
LPFN_ACCEPTEX AcceptEx;
|
73
75
|
int shutting_down;
|
76
|
+
int outstanding_calls;
|
74
77
|
/* closure for socket notification of accept being ready */
|
75
78
|
grpc_closure on_accept;
|
76
79
|
/* linked list */
|
@@ -98,14 +101,32 @@ struct grpc_tcp_server {
|
|
98
101
|
|
99
102
|
/* shutdown callback */
|
100
103
|
grpc_closure *shutdown_complete;
|
104
|
+
|
105
|
+
grpc_resource_quota *resource_quota;
|
101
106
|
};
|
102
107
|
|
103
108
|
/* Public function. Allocates the proper data structures to hold a
|
104
109
|
grpc_tcp_server. */
|
105
|
-
grpc_error *grpc_tcp_server_create(
|
110
|
+
grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx,
|
111
|
+
grpc_closure *shutdown_complete,
|
106
112
|
const grpc_channel_args *args,
|
107
113
|
grpc_tcp_server **server) {
|
108
114
|
grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server));
|
115
|
+
s->resource_quota = grpc_resource_quota_create(NULL);
|
116
|
+
for (size_t i = 0; i < (args == NULL ? 0 : args->num_args); i++) {
|
117
|
+
if (0 == strcmp(GRPC_ARG_RESOURCE_QUOTA, args->args[i].key)) {
|
118
|
+
if (args->args[i].type == GRPC_ARG_POINTER) {
|
119
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
120
|
+
s->resource_quota =
|
121
|
+
grpc_resource_quota_ref_internal(args->args[i].value.pointer.p);
|
122
|
+
} else {
|
123
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
124
|
+
gpr_free(s);
|
125
|
+
return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA
|
126
|
+
" must be a pointer to a buffer pool");
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
109
130
|
gpr_ref_init(&s->refs, 1);
|
110
131
|
gpr_mu_init(&s->mu);
|
111
132
|
s->active_ports = 0;
|
@@ -120,10 +141,9 @@ grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete,
|
|
120
141
|
return GRPC_ERROR_NONE;
|
121
142
|
}
|
122
143
|
|
123
|
-
static void
|
124
|
-
|
125
|
-
|
126
|
-
}
|
144
|
+
static void destroy_server(grpc_exec_ctx *exec_ctx, void *arg,
|
145
|
+
grpc_error *error) {
|
146
|
+
grpc_tcp_server *s = arg;
|
127
147
|
|
128
148
|
/* Now that the accepts have been aborted, we can destroy the sockets.
|
129
149
|
The IOCP won't get notified on these, so we can flag them as already
|
@@ -135,11 +155,23 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
|
135
155
|
grpc_winsocket_destroy(sp->socket);
|
136
156
|
gpr_free(sp);
|
137
157
|
}
|
158
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
138
159
|
gpr_free(s);
|
139
160
|
}
|
140
161
|
|
162
|
+
static void finish_shutdown_locked(grpc_exec_ctx *exec_ctx,
|
163
|
+
grpc_tcp_server *s) {
|
164
|
+
if (s->shutdown_complete != NULL) {
|
165
|
+
grpc_closure_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE);
|
166
|
+
}
|
167
|
+
|
168
|
+
grpc_closure_sched(exec_ctx, grpc_closure_create(destroy_server, s,
|
169
|
+
grpc_schedule_on_exec_ctx),
|
170
|
+
GRPC_ERROR_NONE);
|
171
|
+
}
|
172
|
+
|
141
173
|
grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s) {
|
142
|
-
|
174
|
+
gpr_ref_non_zero(&s->refs);
|
143
175
|
return s;
|
144
176
|
}
|
145
177
|
|
@@ -152,49 +184,37 @@ void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s,
|
|
152
184
|
}
|
153
185
|
|
154
186
|
static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
155
|
-
int immediately_done = 0;
|
156
187
|
grpc_tcp_listener *sp;
|
157
188
|
gpr_mu_lock(&s->mu);
|
158
189
|
|
159
190
|
/* First, shutdown all fd's. This will queue abortion calls for all
|
160
191
|
of the pending accepts due to the normal operation mechanism. */
|
161
192
|
if (s->active_ports == 0) {
|
162
|
-
|
163
|
-
}
|
164
|
-
|
165
|
-
|
166
|
-
|
193
|
+
finish_shutdown_locked(exec_ctx, s);
|
194
|
+
} else {
|
195
|
+
for (sp = s->head; sp; sp = sp->next) {
|
196
|
+
sp->shutting_down = 1;
|
197
|
+
grpc_winsocket_shutdown(sp->socket);
|
198
|
+
}
|
167
199
|
}
|
168
200
|
gpr_mu_unlock(&s->mu);
|
169
|
-
|
170
|
-
if (immediately_done) {
|
171
|
-
finish_shutdown(exec_ctx, s);
|
172
|
-
}
|
173
201
|
}
|
174
202
|
|
175
203
|
void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
176
204
|
if (gpr_unref(&s->refs)) {
|
177
|
-
|
178
|
-
grpc_exec_ctx local_exec_ctx = GRPC_EXEC_CTX_INIT;
|
205
|
+
grpc_tcp_server_shutdown_listeners(exec_ctx, s);
|
179
206
|
gpr_mu_lock(&s->mu);
|
180
|
-
|
207
|
+
grpc_closure_list_sched(exec_ctx, &s->shutdown_starting);
|
181
208
|
gpr_mu_unlock(&s->mu);
|
182
|
-
|
183
|
-
grpc_exec_ctx_flush(&local_exec_ctx);
|
184
|
-
tcp_server_destroy(&local_exec_ctx, s);
|
185
|
-
grpc_exec_ctx_finish(&local_exec_ctx);
|
186
|
-
} else {
|
187
|
-
grpc_exec_ctx_finish(&local_exec_ctx);
|
188
|
-
tcp_server_destroy(exec_ctx, s);
|
189
|
-
}
|
209
|
+
tcp_server_destroy(exec_ctx, s);
|
190
210
|
}
|
191
211
|
}
|
192
212
|
|
193
213
|
/* Prepare (bind) a recently-created socket for listening. */
|
194
|
-
static grpc_error *prepare_socket(SOCKET sock,
|
195
|
-
|
196
|
-
|
197
|
-
|
214
|
+
static grpc_error *prepare_socket(SOCKET sock,
|
215
|
+
const grpc_resolved_address *addr,
|
216
|
+
int *port) {
|
217
|
+
grpc_resolved_address sockname_temp;
|
198
218
|
grpc_error *error = GRPC_ERROR_NONE;
|
199
219
|
|
200
220
|
error = grpc_tcp_prepare_socket(sock);
|
@@ -202,7 +222,8 @@ static grpc_error *prepare_socket(SOCKET sock, const struct sockaddr *addr,
|
|
202
222
|
goto failure;
|
203
223
|
}
|
204
224
|
|
205
|
-
if (bind(sock, addr, (int)
|
225
|
+
if (bind(sock, (const struct sockaddr *)addr->addr, (int)addr->len) ==
|
226
|
+
SOCKET_ERROR) {
|
206
227
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "bind");
|
207
228
|
goto failure;
|
208
229
|
}
|
@@ -212,20 +233,21 @@ static grpc_error *prepare_socket(SOCKET sock, const struct sockaddr *addr,
|
|
212
233
|
goto failure;
|
213
234
|
}
|
214
235
|
|
215
|
-
|
216
|
-
if (getsockname(sock, (struct sockaddr *)
|
217
|
-
|
236
|
+
int sockname_temp_len = sizeof(struct sockaddr_storage);
|
237
|
+
if (getsockname(sock, (struct sockaddr *)sockname_temp.addr,
|
238
|
+
&sockname_temp_len) == SOCKET_ERROR) {
|
218
239
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname");
|
219
240
|
goto failure;
|
220
241
|
}
|
242
|
+
sockname_temp.len = (size_t)sockname_temp_len;
|
221
243
|
|
222
|
-
*port = grpc_sockaddr_get_port(
|
244
|
+
*port = grpc_sockaddr_get_port(&sockname_temp);
|
223
245
|
return GRPC_ERROR_NONE;
|
224
246
|
|
225
247
|
failure:
|
226
248
|
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
227
249
|
char *tgtaddr = grpc_sockaddr_to_uri(addr);
|
228
|
-
|
250
|
+
grpc_error_set_int(
|
229
251
|
grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING(
|
230
252
|
"Failed to prepare server socket", &error, 1),
|
231
253
|
GRPC_ERROR_STR_TARGET_ADDRESS, tgtaddr),
|
@@ -236,31 +258,29 @@ failure:
|
|
236
258
|
return error;
|
237
259
|
}
|
238
260
|
|
239
|
-
static void
|
240
|
-
|
241
|
-
int notify = 0;
|
261
|
+
static void decrement_active_ports_and_notify_locked(grpc_exec_ctx *exec_ctx,
|
262
|
+
grpc_tcp_listener *sp) {
|
242
263
|
sp->shutting_down = 0;
|
243
|
-
gpr_mu_lock(&sp->server->mu);
|
244
264
|
GPR_ASSERT(sp->server->active_ports > 0);
|
245
265
|
if (0 == --sp->server->active_ports) {
|
246
|
-
|
247
|
-
}
|
248
|
-
gpr_mu_unlock(&sp->server->mu);
|
249
|
-
if (notify) {
|
250
|
-
finish_shutdown(exec_ctx, sp->server);
|
266
|
+
finish_shutdown_locked(exec_ctx, sp->server);
|
251
267
|
}
|
252
268
|
}
|
253
269
|
|
254
270
|
/* In order to do an async accept, we need to create a socket first which
|
255
271
|
will be the one assigned to the new incoming connection. */
|
256
|
-
static grpc_error *
|
257
|
-
|
272
|
+
static grpc_error *start_accept_locked(grpc_exec_ctx *exec_ctx,
|
273
|
+
grpc_tcp_listener *port) {
|
258
274
|
SOCKET sock = INVALID_SOCKET;
|
259
275
|
BOOL success;
|
260
276
|
DWORD addrlen = sizeof(struct sockaddr_in6) + 16;
|
261
277
|
DWORD bytes_received = 0;
|
262
278
|
grpc_error *error = GRPC_ERROR_NONE;
|
263
279
|
|
280
|
+
if (port->shutting_down) {
|
281
|
+
return GRPC_ERROR_NONE;
|
282
|
+
}
|
283
|
+
|
264
284
|
sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
|
265
285
|
WSA_FLAG_OVERLAPPED);
|
266
286
|
if (sock == INVALID_SOCKET) {
|
@@ -290,20 +310,11 @@ static grpc_error *start_accept(grpc_exec_ctx *exec_ctx,
|
|
290
310
|
immediately process an accept that happened in the meantime. */
|
291
311
|
port->new_socket = sock;
|
292
312
|
grpc_socket_notify_on_read(exec_ctx, port->socket, &port->on_accept);
|
313
|
+
port->outstanding_calls++;
|
293
314
|
return error;
|
294
315
|
|
295
316
|
failure:
|
296
317
|
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
297
|
-
if (port->shutting_down) {
|
298
|
-
/* We are abandoning the listener port, take that into account to prevent
|
299
|
-
occasional hangs on shutdown. The hang happens when sp->shutting_down
|
300
|
-
change is not seen by on_accept and we proceed to trying new accept,
|
301
|
-
but we fail there because the listening port has been closed in the
|
302
|
-
meantime. */
|
303
|
-
decrement_active_ports_and_notify(exec_ctx, port);
|
304
|
-
GRPC_ERROR_UNREF(error);
|
305
|
-
return GRPC_ERROR_NONE;
|
306
|
-
}
|
307
318
|
if (sock != INVALID_SOCKET) closesocket(sock);
|
308
319
|
return error;
|
309
320
|
}
|
@@ -311,19 +322,21 @@ failure:
|
|
311
322
|
/* Event manager callback when reads are ready. */
|
312
323
|
static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
313
324
|
grpc_tcp_listener *sp = arg;
|
314
|
-
grpc_tcp_server_acceptor acceptor = {sp->server, sp->port_index, 0};
|
315
325
|
SOCKET sock = sp->new_socket;
|
316
326
|
grpc_winsocket_callback_info *info = &sp->socket->read_info;
|
317
327
|
grpc_endpoint *ep = NULL;
|
318
|
-
|
328
|
+
grpc_resolved_address peer_name;
|
319
329
|
char *peer_name_string;
|
320
330
|
char *fd_name;
|
321
|
-
int peer_name_len = sizeof(peer_name);
|
322
331
|
DWORD transfered_bytes;
|
323
332
|
DWORD flags;
|
324
333
|
BOOL wsa_success;
|
325
334
|
int err;
|
326
335
|
|
336
|
+
gpr_mu_lock(&sp->server->mu);
|
337
|
+
|
338
|
+
peer_name.len = sizeof(struct sockaddr_storage);
|
339
|
+
|
327
340
|
/* The general mechanism for shutting down is to queue abortion calls. While
|
328
341
|
this is necessary in the read/write case, it's useless for the accept
|
329
342
|
case. We only need to adjust the pending callback count */
|
@@ -331,6 +344,7 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
|
331
344
|
const char *msg = grpc_error_string(error);
|
332
345
|
gpr_log(GPR_INFO, "Skipping on_accept due to error: %s", msg);
|
333
346
|
grpc_error_free_string(msg);
|
347
|
+
gpr_mu_unlock(&sp->server->mu);
|
334
348
|
return;
|
335
349
|
}
|
336
350
|
|
@@ -340,17 +354,12 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
|
340
354
|
wsa_success = WSAGetOverlappedResult(sock, &info->overlapped,
|
341
355
|
&transfered_bytes, FALSE, &flags);
|
342
356
|
if (!wsa_success) {
|
343
|
-
if (sp->shutting_down) {
|
344
|
-
/* During the shutdown case, we ARE expecting an error. So that's well,
|
345
|
-
and we can wake up the shutdown thread. */
|
346
|
-
decrement_active_ports_and_notify(exec_ctx, sp);
|
347
|
-
return;
|
348
|
-
} else {
|
357
|
+
if (!sp->shutting_down) {
|
349
358
|
char *utf8_message = gpr_format_message(WSAGetLastError());
|
350
359
|
gpr_log(GPR_ERROR, "on_accept error: %s", utf8_message);
|
351
360
|
gpr_free(utf8_message);
|
352
|
-
closesocket(sock);
|
353
361
|
}
|
362
|
+
closesocket(sock);
|
354
363
|
} else {
|
355
364
|
if (!sp->shutting_down) {
|
356
365
|
peer_name_string = NULL;
|
@@ -361,9 +370,12 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
|
361
370
|
gpr_log(GPR_ERROR, "setsockopt error: %s", utf8_message);
|
362
371
|
gpr_free(utf8_message);
|
363
372
|
}
|
364
|
-
|
373
|
+
int peer_name_len = (int)peer_name.len;
|
374
|
+
err =
|
375
|
+
getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name_len);
|
376
|
+
peer_name.len = (size_t)peer_name_len;
|
365
377
|
if (!err) {
|
366
|
-
peer_name_string = grpc_sockaddr_to_uri(
|
378
|
+
peer_name_string = grpc_sockaddr_to_uri(&peer_name);
|
367
379
|
} else {
|
368
380
|
char *utf8_message = gpr_format_message(WSAGetLastError());
|
369
381
|
gpr_log(GPR_ERROR, "getpeername error: %s", utf8_message);
|
@@ -371,7 +383,7 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
|
371
383
|
}
|
372
384
|
gpr_asprintf(&fd_name, "tcp_server:%s", peer_name_string);
|
373
385
|
ep = grpc_tcp_create(grpc_winsocket_create(sock, fd_name),
|
374
|
-
peer_name_string);
|
386
|
+
sp->server->resource_quota, peer_name_string);
|
375
387
|
gpr_free(fd_name);
|
376
388
|
gpr_free(peer_name_string);
|
377
389
|
} else {
|
@@ -382,19 +394,29 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
|
382
394
|
/* The only time we should call our callback, is where we successfully
|
383
395
|
managed to accept a connection, and created an endpoint. */
|
384
396
|
if (ep) {
|
397
|
+
// Create acceptor.
|
398
|
+
grpc_tcp_server_acceptor *acceptor = gpr_malloc(sizeof(*acceptor));
|
399
|
+
acceptor->from_server = sp->server;
|
400
|
+
acceptor->port_index = sp->port_index;
|
401
|
+
acceptor->fd_index = 0;
|
385
402
|
sp->server->on_accept_cb(exec_ctx, sp->server->on_accept_cb_arg, ep, NULL,
|
386
|
-
|
403
|
+
acceptor);
|
387
404
|
}
|
388
405
|
/* As we were notified from the IOCP of one and exactly one accept,
|
389
406
|
the former socked we created has now either been destroy or assigned
|
390
407
|
to the new connection. We need to create a new one for the next
|
391
408
|
connection. */
|
392
|
-
GPR_ASSERT(
|
409
|
+
GPR_ASSERT(
|
410
|
+
GRPC_LOG_IF_ERROR("start_accept", start_accept_locked(exec_ctx, sp)));
|
411
|
+
if (0 == --sp->outstanding_calls) {
|
412
|
+
decrement_active_ports_and_notify_locked(exec_ctx, sp);
|
413
|
+
}
|
414
|
+
gpr_mu_unlock(&sp->server->mu);
|
393
415
|
}
|
394
416
|
|
395
417
|
static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
|
396
|
-
const
|
397
|
-
|
418
|
+
const grpc_resolved_address *addr,
|
419
|
+
unsigned port_index,
|
398
420
|
grpc_tcp_listener **listener) {
|
399
421
|
grpc_tcp_listener *sp = NULL;
|
400
422
|
int port = -1;
|
@@ -418,7 +440,7 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
|
|
418
440
|
return NULL;
|
419
441
|
}
|
420
442
|
|
421
|
-
error = prepare_socket(sock, addr,
|
443
|
+
error = prepare_socket(sock, addr, &port);
|
422
444
|
if (error != GRPC_ERROR_NONE) {
|
423
445
|
return error;
|
424
446
|
}
|
@@ -437,11 +459,12 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
|
|
437
459
|
sp->server = s;
|
438
460
|
sp->socket = grpc_winsocket_create(sock, "listener");
|
439
461
|
sp->shutting_down = 0;
|
462
|
+
sp->outstanding_calls = 0;
|
440
463
|
sp->AcceptEx = AcceptEx;
|
441
464
|
sp->new_socket = INVALID_SOCKET;
|
442
465
|
sp->port = port;
|
443
466
|
sp->port_index = port_index;
|
444
|
-
grpc_closure_init(&sp->on_accept, on_accept, sp);
|
467
|
+
grpc_closure_init(&sp->on_accept, on_accept, sp, grpc_schedule_on_exec_ctx);
|
445
468
|
GPR_ASSERT(sp->socket);
|
446
469
|
gpr_mu_unlock(&s->mu);
|
447
470
|
*listener = sp;
|
@@ -449,15 +472,15 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
|
|
449
472
|
return GRPC_ERROR_NONE;
|
450
473
|
}
|
451
474
|
|
452
|
-
grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
|
453
|
-
|
475
|
+
grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
|
476
|
+
const grpc_resolved_address *addr,
|
477
|
+
int *port) {
|
454
478
|
grpc_tcp_listener *sp = NULL;
|
455
479
|
SOCKET sock;
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
socklen_t sockname_len;
|
480
|
+
grpc_resolved_address addr6_v4mapped;
|
481
|
+
grpc_resolved_address wildcard;
|
482
|
+
grpc_resolved_address *allocated_addr = NULL;
|
483
|
+
grpc_resolved_address sockname_temp;
|
461
484
|
unsigned port_index = 0;
|
462
485
|
grpc_error *error = GRPC_ERROR_NONE;
|
463
486
|
|
@@ -469,13 +492,15 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
|
|
469
492
|
as some previously created listener. */
|
470
493
|
if (grpc_sockaddr_get_port(addr) == 0) {
|
471
494
|
for (sp = s->head; sp; sp = sp->next) {
|
472
|
-
|
495
|
+
int sockname_temp_len = sizeof(struct sockaddr_storage);
|
473
496
|
if (0 == getsockname(sp->socket->socket,
|
474
|
-
(struct sockaddr *)
|
475
|
-
|
497
|
+
(struct sockaddr *)sockname_temp.addr,
|
498
|
+
&sockname_temp_len)) {
|
499
|
+
sockname_temp.len = (size_t)sockname_temp_len;
|
500
|
+
*port = grpc_sockaddr_get_port(&sockname_temp);
|
476
501
|
if (*port > 0) {
|
477
|
-
allocated_addr = gpr_malloc(
|
478
|
-
memcpy(allocated_addr, addr,
|
502
|
+
allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
|
503
|
+
memcpy(allocated_addr, addr, sizeof(grpc_resolved_address));
|
479
504
|
grpc_sockaddr_set_port(allocated_addr, *port);
|
480
505
|
addr = allocated_addr;
|
481
506
|
break;
|
@@ -485,16 +510,14 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
|
|
485
510
|
}
|
486
511
|
|
487
512
|
if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
|
488
|
-
addr =
|
489
|
-
addr_len = sizeof(addr6_v4mapped);
|
513
|
+
addr = &addr6_v4mapped;
|
490
514
|
}
|
491
515
|
|
492
516
|
/* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
|
493
517
|
if (grpc_sockaddr_is_wildcard(addr, port)) {
|
494
518
|
grpc_sockaddr_make_wildcard6(*port, &wildcard);
|
495
519
|
|
496
|
-
addr =
|
497
|
-
addr_len = sizeof(wildcard);
|
520
|
+
addr = &wildcard;
|
498
521
|
}
|
499
522
|
|
500
523
|
sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
|
@@ -504,7 +527,7 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
|
|
504
527
|
goto done;
|
505
528
|
}
|
506
529
|
|
507
|
-
error = add_socket_to_server(s, sock, addr,
|
530
|
+
error = add_socket_to_server(s, sock, addr, port_index, &sp);
|
508
531
|
|
509
532
|
done:
|
510
533
|
gpr_free(allocated_addr);
|
@@ -534,10 +557,14 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s,
|
|
534
557
|
s->on_accept_cb = on_accept_cb;
|
535
558
|
s->on_accept_cb_arg = on_accept_cb_arg;
|
536
559
|
for (sp = s->head; sp; sp = sp->next) {
|
537
|
-
GPR_ASSERT(
|
560
|
+
GPR_ASSERT(
|
561
|
+
GRPC_LOG_IF_ERROR("start_accept", start_accept_locked(exec_ctx, sp)));
|
538
562
|
s->active_ports++;
|
539
563
|
}
|
540
564
|
gpr_mu_unlock(&s->mu);
|
541
565
|
}
|
542
566
|
|
543
|
-
|
567
|
+
void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx,
|
568
|
+
grpc_tcp_server *s) {}
|
569
|
+
|
570
|
+
#endif /* GRPC_WINSOCK_SOCKET */
|