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
@@ -53,8 +53,8 @@ extern int grpc_tcp_trace;
|
|
53
53
|
|
54
54
|
/* Create a tcp endpoint given a file desciptor and a read slice size.
|
55
55
|
Takes ownership of fd. */
|
56
|
-
grpc_endpoint *grpc_tcp_create(grpc_fd *fd,
|
57
|
-
const char *peer_string);
|
56
|
+
grpc_endpoint *grpc_tcp_create(grpc_fd *fd, grpc_resource_quota *resource_quota,
|
57
|
+
size_t read_slice_size, const char *peer_string);
|
58
58
|
|
59
59
|
/* Return the tcp endpoint's fd, or -1 if this is not available. Does not
|
60
60
|
release the fd.
|
@@ -38,6 +38,7 @@
|
|
38
38
|
|
39
39
|
#include "src/core/lib/iomgr/closure.h"
|
40
40
|
#include "src/core/lib/iomgr/endpoint.h"
|
41
|
+
#include "src/core/lib/iomgr/resolve_address.h"
|
41
42
|
|
42
43
|
/* Forward decl of grpc_tcp_server */
|
43
44
|
typedef struct grpc_tcp_server grpc_tcp_server;
|
@@ -51,7 +52,8 @@ typedef struct grpc_tcp_server_acceptor {
|
|
51
52
|
unsigned fd_index;
|
52
53
|
} grpc_tcp_server_acceptor;
|
53
54
|
|
54
|
-
/* Called for newly connected TCP connections.
|
55
|
+
/* Called for newly connected TCP connections.
|
56
|
+
Takes ownership of acceptor. */
|
55
57
|
typedef void (*grpc_tcp_server_cb)(grpc_exec_ctx *exec_ctx, void *arg,
|
56
58
|
grpc_endpoint *ep,
|
57
59
|
grpc_pollset *accepting_pollset,
|
@@ -60,7 +62,8 @@ typedef void (*grpc_tcp_server_cb)(grpc_exec_ctx *exec_ctx, void *arg,
|
|
60
62
|
/* Create a server, initially not bound to any ports. The caller owns one ref.
|
61
63
|
If shutdown_complete is not NULL, it will be used by
|
62
64
|
grpc_tcp_server_unref() when the ref count reaches zero. */
|
63
|
-
grpc_error *grpc_tcp_server_create(
|
65
|
+
grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx,
|
66
|
+
grpc_closure *shutdown_complete,
|
64
67
|
const grpc_channel_args *args,
|
65
68
|
grpc_tcp_server **server);
|
66
69
|
|
@@ -78,8 +81,9 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server,
|
|
78
81
|
but not dualstack sockets. */
|
79
82
|
/* TODO(ctiller): deprecate this, and make grpc_tcp_server_add_ports to handle
|
80
83
|
all of the multiple socket port matching logic in one place */
|
81
|
-
grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
|
82
|
-
|
84
|
+
grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
|
85
|
+
const grpc_resolved_address *addr,
|
86
|
+
int *out_port);
|
83
87
|
|
84
88
|
/* Number of fds at the given port_index, or 0 if port_index is out of
|
85
89
|
bounds. */
|
@@ -101,8 +105,12 @@ grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s);
|
|
101
105
|
void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s,
|
102
106
|
grpc_closure *shutdown_starting);
|
103
107
|
|
104
|
-
/* If the refcount drops to zero,
|
105
|
-
|
108
|
+
/* If the refcount drops to zero, enqueue calls on exec_ctx to
|
109
|
+
shutdown_listeners and delete s. */
|
106
110
|
void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s);
|
107
111
|
|
112
|
+
/* Shutdown the fds of listeners. */
|
113
|
+
void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx,
|
114
|
+
grpc_tcp_server *s);
|
115
|
+
|
108
116
|
#endif /* GRPC_CORE_LIB_IOMGR_TCP_SERVER_H */
|
@@ -36,9 +36,9 @@
|
|
36
36
|
#define _GNU_SOURCE
|
37
37
|
#endif
|
38
38
|
|
39
|
-
#include
|
39
|
+
#include "src/core/lib/iomgr/port.h"
|
40
40
|
|
41
|
-
#ifdef
|
41
|
+
#ifdef GRPC_POSIX_SOCKET
|
42
42
|
|
43
43
|
#include "src/core/lib/iomgr/tcp_server.h"
|
44
44
|
|
@@ -62,6 +62,7 @@
|
|
62
62
|
#include <grpc/support/useful.h>
|
63
63
|
|
64
64
|
#include "src/core/lib/iomgr/resolve_address.h"
|
65
|
+
#include "src/core/lib/iomgr/sockaddr.h"
|
65
66
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
66
67
|
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
67
68
|
#include "src/core/lib/iomgr/tcp_posix.h"
|
@@ -79,21 +80,19 @@ struct grpc_tcp_listener {
|
|
79
80
|
int fd;
|
80
81
|
grpc_fd *emfd;
|
81
82
|
grpc_tcp_server *server;
|
82
|
-
|
83
|
-
uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE];
|
84
|
-
struct sockaddr sockaddr;
|
85
|
-
} addr;
|
86
|
-
size_t addr_len;
|
83
|
+
grpc_resolved_address addr;
|
87
84
|
int port;
|
88
85
|
unsigned port_index;
|
89
86
|
unsigned fd_index;
|
90
87
|
grpc_closure read_closure;
|
91
88
|
grpc_closure destroyed_closure;
|
92
89
|
struct grpc_tcp_listener *next;
|
93
|
-
/*
|
94
|
-
|
95
|
-
|
96
|
-
|
90
|
+
/* sibling is a linked list of all listeners for a given port. add_port and
|
91
|
+
clone_port place all new listeners in the same sibling list. A member of
|
92
|
+
the 'sibling' list is also a member of the 'next' list. The head of each
|
93
|
+
sibling list has is_sibling==0, and subsequent members of sibling lists
|
94
|
+
have is_sibling==1. is_sibling allows separate sibling lists to be
|
95
|
+
identified while iterating through 'next'. */
|
97
96
|
struct grpc_tcp_listener *sibling;
|
98
97
|
int is_sibling;
|
99
98
|
};
|
@@ -135,6 +134,8 @@ struct grpc_tcp_server {
|
|
135
134
|
|
136
135
|
/* next pollset to assign a channel to */
|
137
136
|
gpr_atm next_pollset_to_assign;
|
137
|
+
|
138
|
+
grpc_resource_quota *resource_quota;
|
138
139
|
};
|
139
140
|
|
140
141
|
static gpr_once check_init = GPR_ONCE_INIT;
|
@@ -151,23 +152,37 @@ static void init(void) {
|
|
151
152
|
#endif
|
152
153
|
}
|
153
154
|
|
154
|
-
grpc_error *grpc_tcp_server_create(
|
155
|
+
grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx,
|
156
|
+
grpc_closure *shutdown_complete,
|
155
157
|
const grpc_channel_args *args,
|
156
158
|
grpc_tcp_server **server) {
|
157
159
|
gpr_once_init(&check_init, init);
|
158
160
|
|
159
161
|
grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server));
|
160
162
|
s->so_reuseport = has_so_reuseport;
|
163
|
+
s->resource_quota = grpc_resource_quota_create(NULL);
|
161
164
|
for (size_t i = 0; i < (args == NULL ? 0 : args->num_args); i++) {
|
162
165
|
if (0 == strcmp(GRPC_ARG_ALLOW_REUSEPORT, args->args[i].key)) {
|
163
166
|
if (args->args[i].type == GRPC_ARG_INTEGER) {
|
164
167
|
s->so_reuseport =
|
165
168
|
has_so_reuseport && (args->args[i].value.integer != 0);
|
166
169
|
} else {
|
170
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
167
171
|
gpr_free(s);
|
168
172
|
return GRPC_ERROR_CREATE(GRPC_ARG_ALLOW_REUSEPORT
|
169
173
|
" must be an integer");
|
170
174
|
}
|
175
|
+
} else if (0 == strcmp(GRPC_ARG_RESOURCE_QUOTA, args->args[i].key)) {
|
176
|
+
if (args->args[i].type == GRPC_ARG_POINTER) {
|
177
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
178
|
+
s->resource_quota =
|
179
|
+
grpc_resource_quota_ref_internal(args->args[i].value.pointer.p);
|
180
|
+
} else {
|
181
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
182
|
+
gpr_free(s);
|
183
|
+
return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA
|
184
|
+
" must be a pointer to a buffer pool");
|
185
|
+
}
|
171
186
|
}
|
172
187
|
}
|
173
188
|
gpr_ref_init(&s->refs, 1);
|
@@ -189,8 +204,11 @@ grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete,
|
|
189
204
|
}
|
190
205
|
|
191
206
|
static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
207
|
+
gpr_mu_lock(&s->mu);
|
208
|
+
GPR_ASSERT(s->shutdown);
|
209
|
+
gpr_mu_unlock(&s->mu);
|
192
210
|
if (s->shutdown_complete != NULL) {
|
193
|
-
|
211
|
+
grpc_closure_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE);
|
194
212
|
}
|
195
213
|
|
196
214
|
gpr_mu_destroy(&s->mu);
|
@@ -201,6 +219,8 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
|
201
219
|
gpr_free(sp);
|
202
220
|
}
|
203
221
|
|
222
|
+
grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota);
|
223
|
+
|
204
224
|
gpr_free(s);
|
205
225
|
}
|
206
226
|
|
@@ -233,9 +253,9 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
|
233
253
|
if (s->head) {
|
234
254
|
grpc_tcp_listener *sp;
|
235
255
|
for (sp = s->head; sp; sp = sp->next) {
|
236
|
-
grpc_unlink_if_unix_domain_socket(&sp->addr
|
237
|
-
sp->destroyed_closure
|
238
|
-
|
256
|
+
grpc_unlink_if_unix_domain_socket(&sp->addr);
|
257
|
+
grpc_closure_init(&sp->destroyed_closure, destroyed_port, s,
|
258
|
+
grpc_schedule_on_exec_ctx);
|
239
259
|
grpc_fd_orphan(exec_ctx, sp->emfd, &sp->destroyed_closure, NULL,
|
240
260
|
"tcp_listener_shutdown");
|
241
261
|
}
|
@@ -299,16 +319,14 @@ static int get_max_accept_queue_size(void) {
|
|
299
319
|
}
|
300
320
|
|
301
321
|
/* Prepare a recently-created socket for listening. */
|
302
|
-
static grpc_error *prepare_socket(int fd, const
|
303
|
-
|
304
|
-
|
305
|
-
struct sockaddr_storage sockname_temp;
|
306
|
-
socklen_t sockname_len;
|
322
|
+
static grpc_error *prepare_socket(int fd, const grpc_resolved_address *addr,
|
323
|
+
bool so_reuseport, int *port) {
|
324
|
+
grpc_resolved_address sockname_temp;
|
307
325
|
grpc_error *err = GRPC_ERROR_NONE;
|
308
326
|
|
309
327
|
GPR_ASSERT(fd >= 0);
|
310
328
|
|
311
|
-
if (so_reuseport) {
|
329
|
+
if (so_reuseport && !grpc_is_unix_socket(addr)) {
|
312
330
|
err = grpc_set_socket_reuse_port(fd, 1);
|
313
331
|
if (err != GRPC_ERROR_NONE) goto error;
|
314
332
|
}
|
@@ -326,8 +344,8 @@ static grpc_error *prepare_socket(int fd, const struct sockaddr *addr,
|
|
326
344
|
err = grpc_set_socket_no_sigpipe_if_possible(fd);
|
327
345
|
if (err != GRPC_ERROR_NONE) goto error;
|
328
346
|
|
329
|
-
GPR_ASSERT(
|
330
|
-
if (bind(fd, addr, (socklen_t)
|
347
|
+
GPR_ASSERT(addr->len < ~(socklen_t)0);
|
348
|
+
if (bind(fd, (struct sockaddr *)addr->addr, (socklen_t)addr->len) < 0) {
|
331
349
|
err = GRPC_OS_ERROR(errno, "bind");
|
332
350
|
goto error;
|
333
351
|
}
|
@@ -337,13 +355,15 @@ static grpc_error *prepare_socket(int fd, const struct sockaddr *addr,
|
|
337
355
|
goto error;
|
338
356
|
}
|
339
357
|
|
340
|
-
|
341
|
-
|
358
|
+
sockname_temp.len = sizeof(struct sockaddr_storage);
|
359
|
+
|
360
|
+
if (getsockname(fd, (struct sockaddr *)sockname_temp.addr,
|
361
|
+
(socklen_t *)&sockname_temp.len) < 0) {
|
342
362
|
err = GRPC_OS_ERROR(errno, "getsockname");
|
343
363
|
goto error;
|
344
364
|
}
|
345
365
|
|
346
|
-
*port = grpc_sockaddr_get_port(
|
366
|
+
*port = grpc_sockaddr_get_port(&sockname_temp);
|
347
367
|
return GRPC_ERROR_NONE;
|
348
368
|
|
349
369
|
error:
|
@@ -361,29 +381,25 @@ error:
|
|
361
381
|
/* event manager callback when reads are ready */
|
362
382
|
static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) {
|
363
383
|
grpc_tcp_listener *sp = arg;
|
364
|
-
grpc_tcp_server_acceptor acceptor = {sp->server, sp->port_index,
|
365
|
-
sp->fd_index};
|
366
|
-
grpc_pollset *read_notifier_pollset = NULL;
|
367
|
-
grpc_fd *fdobj;
|
368
384
|
|
369
385
|
if (err != GRPC_ERROR_NONE) {
|
370
386
|
goto error;
|
371
387
|
}
|
372
388
|
|
373
|
-
read_notifier_pollset =
|
389
|
+
grpc_pollset *read_notifier_pollset =
|
374
390
|
sp->server->pollsets[(size_t)gpr_atm_no_barrier_fetch_add(
|
375
391
|
&sp->server->next_pollset_to_assign, 1) %
|
376
392
|
sp->server->pollset_count];
|
377
393
|
|
378
394
|
/* loop until accept4 returns EAGAIN, and then re-arm notification */
|
379
395
|
for (;;) {
|
380
|
-
|
381
|
-
socklen_t addrlen = sizeof(addr);
|
396
|
+
grpc_resolved_address addr;
|
382
397
|
char *addr_str;
|
383
398
|
char *name;
|
399
|
+
addr.len = sizeof(struct sockaddr_storage);
|
384
400
|
/* Note: If we ever decide to return this address to the user, remember to
|
385
401
|
strip off the ::ffff:0.0.0.0/96 prefix first. */
|
386
|
-
int fd = grpc_accept4(sp->fd,
|
402
|
+
int fd = grpc_accept4(sp->fd, &addr, 1, 1);
|
387
403
|
if (fd < 0) {
|
388
404
|
switch (errno) {
|
389
405
|
case EINTR:
|
@@ -399,14 +415,14 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) {
|
|
399
415
|
|
400
416
|
grpc_set_socket_no_sigpipe_if_possible(fd);
|
401
417
|
|
402
|
-
addr_str = grpc_sockaddr_to_uri(
|
418
|
+
addr_str = grpc_sockaddr_to_uri(&addr);
|
403
419
|
gpr_asprintf(&name, "tcp-server-connection:%s", addr_str);
|
404
420
|
|
405
421
|
if (grpc_tcp_trace) {
|
406
422
|
gpr_log(GPR_DEBUG, "SERVER_CONNECT: incoming connection: %s", addr_str);
|
407
423
|
}
|
408
424
|
|
409
|
-
fdobj = grpc_fd_create(fd, name);
|
425
|
+
grpc_fd *fdobj = grpc_fd_create(fd, name);
|
410
426
|
|
411
427
|
if (read_notifier_pollset == NULL) {
|
412
428
|
gpr_log(GPR_ERROR, "Read notifier pollset is not set on the fd");
|
@@ -415,10 +431,17 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) {
|
|
415
431
|
|
416
432
|
grpc_pollset_add_fd(exec_ctx, read_notifier_pollset, fdobj);
|
417
433
|
|
434
|
+
// Create acceptor.
|
435
|
+
grpc_tcp_server_acceptor *acceptor = gpr_malloc(sizeof(*acceptor));
|
436
|
+
acceptor->from_server = sp->server;
|
437
|
+
acceptor->port_index = sp->port_index;
|
438
|
+
acceptor->fd_index = sp->fd_index;
|
439
|
+
|
418
440
|
sp->server->on_accept_cb(
|
419
441
|
exec_ctx, sp->server->on_accept_cb_arg,
|
420
|
-
grpc_tcp_create(fdobj,
|
421
|
-
|
442
|
+
grpc_tcp_create(fdobj, sp->server->resource_quota,
|
443
|
+
GRPC_TCP_DEFAULT_READ_SLICE_SIZE, addr_str),
|
444
|
+
read_notifier_pollset, acceptor);
|
422
445
|
|
423
446
|
gpr_free(name);
|
424
447
|
gpr_free(addr_str);
|
@@ -437,19 +460,18 @@ error:
|
|
437
460
|
}
|
438
461
|
|
439
462
|
static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd,
|
440
|
-
const
|
441
|
-
|
442
|
-
unsigned fd_index,
|
463
|
+
const grpc_resolved_address *addr,
|
464
|
+
unsigned port_index, unsigned fd_index,
|
443
465
|
grpc_tcp_listener **listener) {
|
444
466
|
grpc_tcp_listener *sp = NULL;
|
445
467
|
int port = -1;
|
446
468
|
char *addr_str;
|
447
469
|
char *name;
|
448
470
|
|
449
|
-
grpc_error *err = prepare_socket(fd, addr,
|
471
|
+
grpc_error *err = prepare_socket(fd, addr, s->so_reuseport, &port);
|
450
472
|
if (err == GRPC_ERROR_NONE) {
|
451
473
|
GPR_ASSERT(port > 0);
|
452
|
-
grpc_sockaddr_to_string(&addr_str,
|
474
|
+
grpc_sockaddr_to_string(&addr_str, addr, 1);
|
453
475
|
gpr_asprintf(&name, "tcp-server-listener:%s", addr_str);
|
454
476
|
gpr_mu_lock(&s->mu);
|
455
477
|
s->nports++;
|
@@ -465,8 +487,7 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd,
|
|
465
487
|
sp->server = s;
|
466
488
|
sp->fd = fd;
|
467
489
|
sp->emfd = grpc_fd_create(fd, name);
|
468
|
-
memcpy(sp->addr
|
469
|
-
sp->addr_len = addr_len;
|
490
|
+
memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
|
470
491
|
sp->port = port;
|
471
492
|
sp->port_index = port_index;
|
472
493
|
sp->fd_index = fd_index;
|
@@ -482,6 +503,9 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd,
|
|
482
503
|
return err;
|
483
504
|
}
|
484
505
|
|
506
|
+
/* Insert count new listeners after listener. Every new listener will have the
|
507
|
+
same listen address as listener (SO_REUSEPORT must be enabled). Every new
|
508
|
+
listener is a sibling of listener. */
|
485
509
|
static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) {
|
486
510
|
grpc_tcp_listener *sp = NULL;
|
487
511
|
char *addr_str;
|
@@ -496,28 +520,29 @@ static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) {
|
|
496
520
|
int fd = -1;
|
497
521
|
int port = -1;
|
498
522
|
grpc_dualstack_mode dsmode;
|
499
|
-
err = grpc_create_dualstack_socket(&listener->addr
|
500
|
-
&
|
523
|
+
err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, &dsmode,
|
524
|
+
&fd);
|
501
525
|
if (err != GRPC_ERROR_NONE) return err;
|
502
|
-
err = prepare_socket(fd, &listener->addr
|
503
|
-
&port);
|
526
|
+
err = prepare_socket(fd, &listener->addr, true, &port);
|
504
527
|
if (err != GRPC_ERROR_NONE) return err;
|
505
528
|
listener->server->nports++;
|
506
|
-
grpc_sockaddr_to_string(&addr_str, &listener->addr
|
529
|
+
grpc_sockaddr_to_string(&addr_str, &listener->addr, 1);
|
507
530
|
gpr_asprintf(&name, "tcp-server-listener:%s/clone-%d", addr_str, i);
|
508
531
|
sp = gpr_malloc(sizeof(grpc_tcp_listener));
|
509
532
|
sp->next = listener->next;
|
510
533
|
listener->next = sp;
|
534
|
+
/* sp (the new listener) is a sibling of 'listener' (the original
|
535
|
+
listener). */
|
536
|
+
sp->is_sibling = 1;
|
537
|
+
sp->sibling = listener->sibling;
|
538
|
+
listener->sibling = sp;
|
511
539
|
sp->server = listener->server;
|
512
540
|
sp->fd = fd;
|
513
541
|
sp->emfd = grpc_fd_create(fd, name);
|
514
|
-
memcpy(sp->addr
|
515
|
-
sp->addr_len = listener->addr_len;
|
542
|
+
memcpy(&sp->addr, &listener->addr, sizeof(grpc_resolved_address));
|
516
543
|
sp->port = port;
|
517
544
|
sp->port_index = listener->port_index;
|
518
545
|
sp->fd_index = listener->fd_index + count - i;
|
519
|
-
sp->is_sibling = 1;
|
520
|
-
sp->sibling = listener->is_sibling ? listener->sibling : listener;
|
521
546
|
GPR_ASSERT(sp->emfd);
|
522
547
|
while (listener->server->tail->next != NULL) {
|
523
548
|
listener->server->tail = listener->server->tail->next;
|
@@ -529,19 +554,19 @@ static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) {
|
|
529
554
|
return GRPC_ERROR_NONE;
|
530
555
|
}
|
531
556
|
|
532
|
-
grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
|
533
|
-
|
557
|
+
grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
|
558
|
+
const grpc_resolved_address *addr,
|
559
|
+
int *out_port) {
|
534
560
|
grpc_tcp_listener *sp;
|
535
561
|
grpc_tcp_listener *sp2 = NULL;
|
536
562
|
int fd;
|
537
563
|
grpc_dualstack_mode dsmode;
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
socklen_t sockname_len;
|
564
|
+
grpc_resolved_address addr6_v4mapped;
|
565
|
+
grpc_resolved_address wild4;
|
566
|
+
grpc_resolved_address wild6;
|
567
|
+
grpc_resolved_address addr4_copy;
|
568
|
+
grpc_resolved_address *allocated_addr = NULL;
|
569
|
+
grpc_resolved_address sockname_temp;
|
545
570
|
int port;
|
546
571
|
unsigned port_index = 0;
|
547
572
|
unsigned fd_index = 0;
|
@@ -549,19 +574,19 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
|
|
549
574
|
if (s->tail != NULL) {
|
550
575
|
port_index = s->tail->port_index + 1;
|
551
576
|
}
|
552
|
-
grpc_unlink_if_unix_domain_socket(
|
577
|
+
grpc_unlink_if_unix_domain_socket(addr);
|
553
578
|
|
554
579
|
/* Check if this is a wildcard port, and if so, try to keep the port the same
|
555
580
|
as some previously created listener. */
|
556
581
|
if (grpc_sockaddr_get_port(addr) == 0) {
|
557
582
|
for (sp = s->head; sp; sp = sp->next) {
|
558
|
-
|
559
|
-
if (0 == getsockname(sp->fd, (struct sockaddr *)
|
560
|
-
&
|
561
|
-
port = grpc_sockaddr_get_port(
|
583
|
+
sockname_temp.len = sizeof(struct sockaddr_storage);
|
584
|
+
if (0 == getsockname(sp->fd, (struct sockaddr *)sockname_temp.addr,
|
585
|
+
(socklen_t *)&sockname_temp.len)) {
|
586
|
+
port = grpc_sockaddr_get_port(&sockname_temp);
|
562
587
|
if (port > 0) {
|
563
|
-
allocated_addr = gpr_malloc(
|
564
|
-
memcpy(allocated_addr, addr,
|
588
|
+
allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
|
589
|
+
memcpy(allocated_addr, addr, addr->len);
|
565
590
|
grpc_sockaddr_set_port(allocated_addr, port);
|
566
591
|
addr = allocated_addr;
|
567
592
|
break;
|
@@ -573,8 +598,7 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
|
|
573
598
|
sp = NULL;
|
574
599
|
|
575
600
|
if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
|
576
|
-
addr =
|
577
|
-
addr_len = sizeof(addr6_v4mapped);
|
601
|
+
addr = &addr6_v4mapped;
|
578
602
|
}
|
579
603
|
|
580
604
|
/* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
|
@@ -582,12 +606,10 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
|
|
582
606
|
grpc_sockaddr_make_wildcards(port, &wild4, &wild6);
|
583
607
|
|
584
608
|
/* Try listening on IPv6 first. */
|
585
|
-
addr =
|
586
|
-
addr_len = sizeof(wild6);
|
609
|
+
addr = &wild6;
|
587
610
|
errs[0] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd);
|
588
611
|
if (errs[0] == GRPC_ERROR_NONE) {
|
589
|
-
errs[0] = add_socket_to_server(s, fd, addr,
|
590
|
-
fd_index, &sp);
|
612
|
+
errs[0] = add_socket_to_server(s, fd, addr, port_index, fd_index, &sp);
|
591
613
|
if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) {
|
592
614
|
goto done;
|
593
615
|
}
|
@@ -596,23 +618,20 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
|
|
596
618
|
}
|
597
619
|
/* If we didn't get a dualstack socket, also listen on 0.0.0.0. */
|
598
620
|
if (port == 0 && sp != NULL) {
|
599
|
-
grpc_sockaddr_set_port(
|
621
|
+
grpc_sockaddr_set_port(&wild4, sp->port);
|
600
622
|
}
|
601
623
|
}
|
602
|
-
addr =
|
603
|
-
addr_len = sizeof(wild4);
|
624
|
+
addr = &wild4;
|
604
625
|
}
|
605
626
|
|
606
627
|
errs[1] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd);
|
607
628
|
if (errs[1] == GRPC_ERROR_NONE) {
|
608
629
|
if (dsmode == GRPC_DSMODE_IPV4 &&
|
609
630
|
grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) {
|
610
|
-
addr =
|
611
|
-
addr_len = sizeof(addr4_copy);
|
631
|
+
addr = &addr4_copy;
|
612
632
|
}
|
613
633
|
sp2 = sp;
|
614
|
-
errs[1] =
|
615
|
-
add_socket_to_server(s, fd, addr, addr_len, port_index, fd_index, &sp);
|
634
|
+
errs[1] = add_socket_to_server(s, fd, addr, port_index, fd_index, &sp);
|
616
635
|
if (sp2 != NULL && sp != NULL) {
|
617
636
|
sp2->sibling = sp;
|
618
637
|
sp->is_sibling = 1;
|
@@ -640,35 +659,46 @@ done:
|
|
640
659
|
}
|
641
660
|
}
|
642
661
|
|
643
|
-
|
644
|
-
|
645
|
-
|
662
|
+
/* Return listener at port_index or NULL. Should only be called with s->mu
|
663
|
+
locked. */
|
664
|
+
static grpc_tcp_listener *get_port_index(grpc_tcp_server *s,
|
665
|
+
unsigned port_index) {
|
666
|
+
unsigned num_ports = 0;
|
646
667
|
grpc_tcp_listener *sp;
|
647
|
-
for (sp = s->head; sp
|
668
|
+
for (sp = s->head; sp; sp = sp->next) {
|
648
669
|
if (!sp->is_sibling) {
|
649
|
-
|
670
|
+
if (++num_ports > port_index) {
|
671
|
+
return sp;
|
672
|
+
}
|
650
673
|
}
|
651
674
|
}
|
652
|
-
|
653
|
-
|
675
|
+
return NULL;
|
676
|
+
}
|
677
|
+
|
678
|
+
unsigned grpc_tcp_server_port_fd_count(grpc_tcp_server *s,
|
679
|
+
unsigned port_index) {
|
680
|
+
unsigned num_fds = 0;
|
681
|
+
gpr_mu_lock(&s->mu);
|
682
|
+
grpc_tcp_listener *sp = get_port_index(s, port_index);
|
683
|
+
for (; sp; sp = sp->sibling) {
|
684
|
+
++num_fds;
|
685
|
+
}
|
686
|
+
gpr_mu_unlock(&s->mu);
|
654
687
|
return num_fds;
|
655
688
|
}
|
656
689
|
|
657
690
|
int grpc_tcp_server_port_fd(grpc_tcp_server *s, unsigned port_index,
|
658
691
|
unsigned fd_index) {
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
692
|
+
gpr_mu_lock(&s->mu);
|
693
|
+
grpc_tcp_listener *sp = get_port_index(s, port_index);
|
694
|
+
for (; sp; sp = sp->sibling, --fd_index) {
|
695
|
+
if (fd_index == 0) {
|
696
|
+
gpr_mu_unlock(&s->mu);
|
697
|
+
return sp->fd;
|
663
698
|
}
|
664
699
|
}
|
665
|
-
|
666
|
-
|
667
|
-
if (sp) {
|
668
|
-
return sp->fd;
|
669
|
-
} else {
|
670
|
-
return -1;
|
671
|
-
}
|
700
|
+
gpr_mu_unlock(&s->mu);
|
701
|
+
return -1;
|
672
702
|
}
|
673
703
|
|
674
704
|
void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s,
|
@@ -687,13 +717,14 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s,
|
|
687
717
|
s->pollset_count = pollset_count;
|
688
718
|
sp = s->head;
|
689
719
|
while (sp != NULL) {
|
690
|
-
if (s->so_reuseport &&
|
720
|
+
if (s->so_reuseport && !grpc_is_unix_socket(&sp->addr) &&
|
721
|
+
pollset_count > 1) {
|
691
722
|
GPR_ASSERT(GRPC_LOG_IF_ERROR(
|
692
723
|
"clone_port", clone_port(sp, (unsigned)(pollset_count - 1))));
|
693
724
|
for (i = 0; i < pollset_count; i++) {
|
694
725
|
grpc_pollset_add_fd(exec_ctx, pollsets[i], sp->emfd);
|
695
|
-
sp->read_closure
|
696
|
-
|
726
|
+
grpc_closure_init(&sp->read_closure, on_read, sp,
|
727
|
+
grpc_schedule_on_exec_ctx);
|
697
728
|
grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
|
698
729
|
s->active_ports++;
|
699
730
|
sp = sp->next;
|
@@ -702,8 +733,8 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s,
|
|
702
733
|
for (i = 0; i < pollset_count; i++) {
|
703
734
|
grpc_pollset_add_fd(exec_ctx, pollsets[i], sp->emfd);
|
704
735
|
}
|
705
|
-
sp->read_closure
|
706
|
-
|
736
|
+
grpc_closure_init(&sp->read_closure, on_read, sp,
|
737
|
+
grpc_schedule_on_exec_ctx);
|
707
738
|
grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
|
708
739
|
s->active_ports++;
|
709
740
|
sp = sp->next;
|
@@ -713,7 +744,7 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s,
|
|
713
744
|
}
|
714
745
|
|
715
746
|
grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s) {
|
716
|
-
|
747
|
+
gpr_ref_non_zero(&s->refs);
|
717
748
|
return s;
|
718
749
|
}
|
719
750
|
|
@@ -727,20 +758,25 @@ void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s,
|
|
727
758
|
|
728
759
|
void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
|
729
760
|
if (gpr_unref(&s->refs)) {
|
730
|
-
|
731
|
-
grpc_exec_ctx local_exec_ctx = GRPC_EXEC_CTX_INIT;
|
761
|
+
grpc_tcp_server_shutdown_listeners(exec_ctx, s);
|
732
762
|
gpr_mu_lock(&s->mu);
|
733
|
-
|
763
|
+
grpc_closure_list_sched(exec_ctx, &s->shutdown_starting);
|
734
764
|
gpr_mu_unlock(&s->mu);
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
765
|
+
tcp_server_destroy(exec_ctx, s);
|
766
|
+
}
|
767
|
+
}
|
768
|
+
|
769
|
+
void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx,
|
770
|
+
grpc_tcp_server *s) {
|
771
|
+
gpr_mu_lock(&s->mu);
|
772
|
+
/* shutdown all fd's */
|
773
|
+
if (s->active_ports) {
|
774
|
+
grpc_tcp_listener *sp;
|
775
|
+
for (sp = s->head; sp; sp = sp->next) {
|
776
|
+
grpc_fd_shutdown(exec_ctx, sp->emfd);
|
742
777
|
}
|
743
778
|
}
|
779
|
+
gpr_mu_unlock(&s->mu);
|
744
780
|
}
|
745
781
|
|
746
782
|
#endif
|