grpc 1.18.0 → 1.22.0
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 +4731 -7404
- data/etc/roots.pem +146 -0
- data/include/grpc/grpc.h +11 -6
- data/include/grpc/grpc_security.h +297 -4
- data/include/grpc/grpc_security_constants.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +13 -0
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +30 -7
- data/include/grpc/impl/codegen/port_platform.h +88 -7
- data/include/grpc/impl/codegen/slice.h +2 -22
- data/include/grpc/impl/codegen/status.h +2 -1
- data/include/grpc/impl/codegen/sync_posix.h +18 -0
- data/include/grpc/slice.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
- data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
- data/src/core/ext/filters/client_channel/client_channel.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
- data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
- data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
- data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
- data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
- data/src/core/ext/filters/client_channel/resolver.cc +54 -1
- data/src/core/ext/filters/client_channel/resolver.h +52 -23
- data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -54
- data/src/core/ext/filters/client_channel/server_address.h +1 -13
- data/src/core/ext/filters/client_channel/service_config.cc +329 -0
- data/src/core/ext/filters/client_channel/service_config.h +205 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
- data/src/core/ext/filters/client_channel/subchannel.h +295 -128
- data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
- data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
- data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
- data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
- data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
- data/src/core/lib/channel/channel_args.cc +2 -101
- data/src/core/lib/channel/channel_args.h +3 -37
- data/src/core/lib/channel/channel_stack.h +10 -6
- data/src/core/lib/channel/channel_trace.cc +4 -4
- data/src/core/lib/channel/channel_trace.h +4 -4
- data/src/core/lib/channel/channelz.cc +168 -38
- data/src/core/lib/channel/channelz.h +40 -44
- data/src/core/lib/channel/channelz_registry.cc +75 -107
- data/src/core/lib/channel/channelz_registry.h +10 -28
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/handshaker.cc +151 -218
- data/src/core/lib/channel/handshaker.h +110 -101
- data/src/core/lib/channel/handshaker_factory.h +11 -19
- data/src/core/lib/channel/handshaker_registry.cc +67 -51
- data/src/core/lib/channel/handshaker_registry.h +21 -16
- data/src/core/lib/compression/algorithm_metadata.h +3 -3
- data/src/core/lib/compression/compression.cc +14 -9
- data/src/core/lib/compression/compression_args.cc +127 -0
- data/src/core/lib/compression/compression_args.h +55 -0
- data/src/core/lib/compression/compression_internal.cc +16 -12
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/debug/trace.cc +13 -7
- data/src/core/lib/debug/trace.h +14 -1
- data/src/core/lib/gpr/arena.h +13 -9
- data/src/core/lib/gpr/cpu_posix.cc +5 -3
- data/src/core/lib/gpr/env.h +3 -6
- data/src/core/lib/gpr/env_linux.cc +6 -1
- data/src/core/lib/gpr/env_posix.cc +5 -0
- data/src/core/lib/gpr/env_windows.cc +7 -5
- data/src/core/lib/gpr/log.cc +9 -13
- data/src/core/lib/gpr/log_posix.cc +2 -1
- data/src/core/lib/gpr/string.cc +20 -7
- data/src/core/lib/gpr/string.h +10 -3
- data/src/core/lib/gpr/sync_posix.cc +65 -4
- data/src/core/lib/gpr/time.cc +8 -0
- data/src/core/lib/gpr/time_posix.cc +21 -2
- data/src/core/lib/gprpp/arena.cc +103 -0
- data/src/core/lib/gprpp/arena.h +121 -0
- data/src/core/lib/gprpp/atomic.h +75 -5
- data/src/core/lib/gprpp/fork.cc +13 -32
- data/src/core/lib/gprpp/fork.h +5 -1
- data/src/core/lib/gprpp/global_config.h +96 -0
- data/src/core/lib/gprpp/global_config_custom.h +29 -0
- data/src/core/lib/gprpp/global_config_env.cc +135 -0
- data/src/core/lib/gprpp/global_config_env.h +131 -0
- data/src/core/lib/gprpp/global_config_generic.h +44 -0
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/map.h +436 -0
- data/src/core/lib/gprpp/memory.h +2 -2
- data/src/core/lib/gprpp/optional.h +48 -0
- data/src/core/lib/gprpp/orphanable.h +6 -5
- data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
- data/src/core/lib/gprpp/ref_counted.h +36 -17
- data/src/core/lib/gprpp/sync.h +126 -0
- data/src/core/lib/gprpp/thd.h +42 -7
- data/src/core/lib/gprpp/thd_posix.cc +31 -13
- data/src/core/lib/gprpp/thd_windows.cc +47 -34
- data/src/core/lib/http/httpcli.cc +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +13 -15
- data/src/core/lib/http/parser.cc +3 -2
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/buffer_list.cc +182 -24
- data/src/core/lib/iomgr/buffer_list.h +72 -10
- data/src/core/lib/iomgr/call_combiner.cc +84 -90
- data/src/core/lib/iomgr/call_combiner.h +75 -82
- data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
- data/src/core/lib/iomgr/cfstream_handle.h +86 -0
- data/src/core/lib/iomgr/combiner.cc +11 -3
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +3 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
- data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +21 -17
- data/src/core/lib/iomgr/error.h +36 -6
- data/src/core/lib/iomgr/error_cfstream.cc +52 -0
- data/src/core/lib/iomgr/error_cfstream.h +31 -0
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
- data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
- data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
- data/src/core/lib/iomgr/ev_posix.cc +29 -19
- data/src/core/lib/iomgr/ev_posix.h +19 -3
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -0
- data/src/core/lib/iomgr/exec_ctx.h +137 -8
- data/src/core/lib/iomgr/executor.cc +147 -95
- data/src/core/lib/iomgr/executor.h +55 -49
- data/src/core/lib/iomgr/fork_posix.cc +6 -5
- data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
- data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.h +105 -3
- data/src/core/lib/iomgr/iomgr.cc +20 -13
- data/src/core/lib/iomgr/iomgr.h +15 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
- data/src/core/lib/iomgr/iomgr_internal.h +12 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
- data/src/core/lib/iomgr/lockfree_event.cc +4 -4
- data/src/core/lib/iomgr/port.h +35 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
- data/src/core/lib/iomgr/resource_quota.cc +40 -37
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
- data/src/core/lib/iomgr/socket_windows.cc +19 -0
- data/src/core/lib/iomgr/socket_windows.h +8 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +10 -14
- data/src/core/lib/iomgr/tcp_posix.cc +256 -140
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
- data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
- data/src/core/lib/iomgr/tcp_uv.cc +5 -7
- data/src/core/lib/iomgr/tcp_windows.cc +8 -14
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -16
- data/src/core/lib/iomgr/timer_manager.cc +20 -11
- data/src/core/lib/iomgr/udp_server.cc +8 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
- data/src/core/lib/json/json.cc +1 -4
- data/src/core/lib/profiling/basic_timers.cc +10 -4
- data/src/core/lib/security/context/security_context.cc +6 -7
- data/src/core/lib/security/context/security_context.h +3 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
- data/src/core/lib/security/credentials/credentials.h +9 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/security_connector.cc +0 -1
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
- data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
- data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
- data/src/core/lib/security/transport/auth_filters.h +5 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
- data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
- data/src/core/lib/security/transport/security_handshaker.cc +271 -303
- data/src/core/lib/security/transport/security_handshaker.h +11 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
- data/src/core/lib/slice/b64.h +2 -2
- data/src/core/lib/slice/percent_encoding.cc +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +174 -122
- data/src/core/lib/slice/slice_buffer.cc +54 -21
- data/src/core/lib/slice/slice_hash_table.h +4 -4
- data/src/core/lib/slice/slice_intern.cc +49 -107
- data/src/core/lib/slice/slice_internal.h +264 -3
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +50 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
- data/src/core/lib/surface/api_trace.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +7 -2
- data/src/core/lib/surface/call_details.cc +0 -1
- data/src/core/lib/surface/channel.cc +89 -97
- data/src/core/lib/surface/channel.h +60 -6
- data/src/core/lib/surface/channel_init.h +5 -0
- data/src/core/lib/surface/completion_queue.cc +221 -216
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +82 -33
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +5 -7
- data/src/core/lib/surface/server.cc +42 -47
- data/src/core/lib/surface/validate_metadata.cc +14 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/connectivity_state.cc +10 -40
- data/src/core/lib/transport/connectivity_state.h +0 -8
- data/src/core/lib/transport/error_utils.cc +12 -0
- data/src/core/lib/transport/metadata.cc +258 -267
- data/src/core/lib/transport/metadata.h +227 -16
- data/src/core/lib/transport/metadata_batch.cc +1 -1
- data/src/core/lib/transport/metadata_batch.h +1 -1
- data/src/core/lib/transport/static_metadata.cc +477 -399
- data/src/core/lib/transport/static_metadata.h +273 -182
- data/src/core/lib/transport/status_metadata.cc +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -1
- data/src/core/lib/transport/transport.cc +39 -72
- data/src/core/lib/transport/transport.h +59 -24
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +12 -10
- data/src/core/tsi/ssl_transport_security.h +24 -4
- data/src/ruby/bin/math_pb.rb +18 -16
- data/src/ruby/ext/grpc/extconf.rb +12 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_channel.c +14 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +23 -24
- data/src/ruby/ext/grpc/rb_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
- data/src/ruby/ext/grpc/rb_server.c +8 -4
- data/src/ruby/lib/grpc/errors.rb +22 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
- data/src/ruby/spec/errors_spec.rb +141 -0
- data/third_party/cares/cares/ares.h +12 -0
- data/third_party/cares/cares/ares_create_query.c +5 -1
- data/third_party/cares/cares/ares_data.c +74 -73
- data/third_party/cares/cares/ares_destroy.c +6 -1
- data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
- data/third_party/cares/cares/ares_gethostbyname.c +15 -4
- data/third_party/cares/cares/ares_getnameinfo.c +11 -0
- data/third_party/cares/cares/ares_init.c +274 -173
- data/third_party/cares/cares/ares_library_init.c +21 -3
- data/third_party/cares/cares/ares_options.c +6 -2
- data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
- data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
- data/third_party/cares/cares/ares_platform.c +7 -0
- data/third_party/cares/cares/ares_private.h +19 -11
- data/third_party/cares/cares/ares_process.c +27 -2
- data/third_party/cares/cares/ares_rules.h +1 -1
- data/third_party/cares/cares/ares_search.c +7 -0
- data/third_party/cares/cares/ares_send.c +6 -0
- data/third_party/cares/cares/ares_strsplit.c +174 -0
- data/third_party/cares/cares/ares_strsplit.h +43 -0
- data/third_party/cares/cares/ares_version.h +4 -4
- data/third_party/cares/cares/config-win32.h +1 -1
- data/third_party/cares/cares/inet_ntop.c +2 -3
- data/third_party/cares/config_darwin/ares_config.h +3 -0
- data/third_party/cares/config_freebsd/ares_config.h +3 -0
- data/third_party/cares/config_linux/ares_config.h +3 -0
- data/third_party/cares/config_openbsd/ares_config.h +3 -0
- metadata +83 -48
- data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
- data/src/core/ext/filters/client_channel/request_routing.h +0 -177
- data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
- data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
- data/src/core/lib/channel/handshaker_factory.cc +0 -42
- data/src/core/lib/gpr/arena.cc +0 -192
- data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
- data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
- data/src/core/lib/transport/service_config.cc +0 -106
- data/src/core/lib/transport/service_config.h +0 -249
@@ -40,157 +40,148 @@
|
|
40
40
|
#include "src/core/lib/surface/channel.h"
|
41
41
|
#include "src/core/lib/uri/uri_parser.h"
|
42
42
|
|
43
|
-
|
44
|
-
grpc_client_channel_factory* cc_factory) {}
|
43
|
+
namespace grpc_core {
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
gpr_log(GPR_ERROR,
|
55
|
-
"Can't create subchannel: channel credentials missing for secure "
|
56
|
-
"channel.");
|
57
|
-
return nullptr;
|
58
|
-
}
|
59
|
-
// Make sure security connector does not already exist in args.
|
60
|
-
if (grpc_security_connector_find_in_args(args->args) != nullptr) {
|
61
|
-
gpr_log(GPR_ERROR,
|
62
|
-
"Can't create subchannel: security connector already present in "
|
63
|
-
"channel args.");
|
64
|
-
return nullptr;
|
65
|
-
}
|
66
|
-
// To which address are we connecting? By default, use the server URI.
|
67
|
-
const grpc_arg* server_uri_arg =
|
68
|
-
grpc_channel_args_find(args->args, GRPC_ARG_SERVER_URI);
|
69
|
-
const char* server_uri_str = grpc_channel_arg_get_string(server_uri_arg);
|
70
|
-
GPR_ASSERT(server_uri_str != nullptr);
|
71
|
-
grpc_uri* server_uri =
|
72
|
-
grpc_uri_parse(server_uri_str, true /* supress errors */);
|
73
|
-
GPR_ASSERT(server_uri != nullptr);
|
74
|
-
const grpc_core::TargetAuthorityTable* target_authority_table =
|
75
|
-
grpc_core::FindTargetAuthorityTableInArgs(args->args);
|
76
|
-
grpc_core::UniquePtr<char> authority;
|
77
|
-
if (target_authority_table != nullptr) {
|
78
|
-
// Find the authority for the target.
|
79
|
-
const char* target_uri_str =
|
80
|
-
grpc_get_subchannel_address_uri_arg(args->args);
|
81
|
-
grpc_uri* target_uri =
|
82
|
-
grpc_uri_parse(target_uri_str, false /* suppress errors */);
|
83
|
-
GPR_ASSERT(target_uri != nullptr);
|
84
|
-
if (target_uri->path[0] != '\0') { // "path" may be empty
|
85
|
-
const grpc_slice key = grpc_slice_from_static_string(
|
86
|
-
target_uri->path[0] == '/' ? target_uri->path + 1 : target_uri->path);
|
87
|
-
const grpc_core::UniquePtr<char>* value =
|
88
|
-
target_authority_table->Get(key);
|
89
|
-
if (value != nullptr) authority.reset(gpr_strdup(value->get()));
|
90
|
-
grpc_slice_unref_internal(key);
|
45
|
+
class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
|
46
|
+
public:
|
47
|
+
Subchannel* CreateSubchannel(const grpc_channel_args* args) override {
|
48
|
+
grpc_channel_args* new_args = GetSecureNamingChannelArgs(args);
|
49
|
+
if (new_args == nullptr) {
|
50
|
+
gpr_log(GPR_ERROR,
|
51
|
+
"Failed to create channel args during subchannel creation.");
|
52
|
+
return nullptr;
|
91
53
|
}
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
if (authority == nullptr) {
|
98
|
-
authority =
|
99
|
-
grpc_core::ResolverRegistry::GetDefaultAuthority(server_uri_str);
|
54
|
+
grpc_connector* connector = grpc_chttp2_connector_create();
|
55
|
+
Subchannel* s = Subchannel::Create(connector, new_args);
|
56
|
+
grpc_connector_unref(connector);
|
57
|
+
grpc_channel_args_destroy(new_args);
|
58
|
+
return s;
|
100
59
|
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
60
|
+
|
61
|
+
grpc_channel* CreateChannel(const char* target,
|
62
|
+
const grpc_channel_args* args) override {
|
63
|
+
if (target == nullptr) {
|
64
|
+
gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
|
65
|
+
return nullptr;
|
66
|
+
}
|
67
|
+
// Add channel arg containing the server URI.
|
68
|
+
UniquePtr<char> canonical_target =
|
69
|
+
ResolverRegistry::AddDefaultPrefixIfNeeded(target);
|
70
|
+
grpc_arg arg = grpc_channel_arg_string_create(
|
71
|
+
const_cast<char*>(GRPC_ARG_SERVER_URI), canonical_target.get());
|
72
|
+
const char* to_remove[] = {GRPC_ARG_SERVER_URI};
|
73
|
+
grpc_channel_args* new_args =
|
74
|
+
grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
|
75
|
+
grpc_channel* channel =
|
76
|
+
grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
|
77
|
+
grpc_channel_args_destroy(new_args);
|
78
|
+
return channel;
|
109
79
|
}
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
80
|
+
|
81
|
+
private:
|
82
|
+
static grpc_channel_args* GetSecureNamingChannelArgs(
|
83
|
+
const grpc_channel_args* args) {
|
84
|
+
grpc_channel_credentials* channel_credentials =
|
85
|
+
grpc_channel_credentials_find_in_args(args);
|
86
|
+
if (channel_credentials == nullptr) {
|
87
|
+
gpr_log(GPR_ERROR,
|
88
|
+
"Can't create subchannel: channel credentials missing for secure "
|
89
|
+
"channel.");
|
90
|
+
return nullptr;
|
91
|
+
}
|
92
|
+
// Make sure security connector does not already exist in args.
|
93
|
+
if (grpc_security_connector_find_in_args(args) != nullptr) {
|
94
|
+
gpr_log(GPR_ERROR,
|
95
|
+
"Can't create subchannel: security connector already present in "
|
96
|
+
"channel args.");
|
97
|
+
return nullptr;
|
98
|
+
}
|
99
|
+
// To which address are we connecting? By default, use the server URI.
|
100
|
+
const grpc_arg* server_uri_arg =
|
101
|
+
grpc_channel_args_find(args, GRPC_ARG_SERVER_URI);
|
102
|
+
const char* server_uri_str = grpc_channel_arg_get_string(server_uri_arg);
|
103
|
+
GPR_ASSERT(server_uri_str != nullptr);
|
104
|
+
grpc_uri* server_uri =
|
105
|
+
grpc_uri_parse(server_uri_str, true /* suppress errors */);
|
106
|
+
GPR_ASSERT(server_uri != nullptr);
|
107
|
+
const TargetAuthorityTable* target_authority_table =
|
108
|
+
FindTargetAuthorityTableInArgs(args);
|
109
|
+
UniquePtr<char> authority;
|
110
|
+
if (target_authority_table != nullptr) {
|
111
|
+
// Find the authority for the target.
|
112
|
+
const char* target_uri_str =
|
113
|
+
Subchannel::GetUriFromSubchannelAddressArg(args);
|
114
|
+
grpc_uri* target_uri =
|
115
|
+
grpc_uri_parse(target_uri_str, false /* suppress errors */);
|
116
|
+
GPR_ASSERT(target_uri != nullptr);
|
117
|
+
if (target_uri->path[0] != '\0') { // "path" may be empty
|
118
|
+
const grpc_slice key = grpc_slice_from_static_string(
|
119
|
+
target_uri->path[0] == '/' ? target_uri->path + 1
|
120
|
+
: target_uri->path);
|
121
|
+
const UniquePtr<char>* value = target_authority_table->Get(key);
|
122
|
+
if (value != nullptr) authority.reset(gpr_strdup(value->get()));
|
123
|
+
grpc_slice_unref_internal(key);
|
124
|
+
}
|
125
|
+
grpc_uri_destroy(target_uri);
|
126
|
+
}
|
127
|
+
// If the authority hasn't already been set (either because no target
|
128
|
+
// authority table was present or because the target was not present
|
129
|
+
// in the table), fall back to using the original server URI.
|
130
|
+
if (authority == nullptr) {
|
131
|
+
authority = ResolverRegistry::GetDefaultAuthority(server_uri_str);
|
132
|
+
}
|
133
|
+
grpc_arg args_to_add[2];
|
134
|
+
size_t num_args_to_add = 0;
|
135
|
+
if (grpc_channel_args_find(args, GRPC_ARG_DEFAULT_AUTHORITY) == nullptr) {
|
136
|
+
// If the channel args don't already contain GRPC_ARG_DEFAULT_AUTHORITY,
|
137
|
+
// add the arg, setting it to the value just obtained.
|
138
|
+
args_to_add[num_args_to_add++] = grpc_channel_arg_string_create(
|
139
|
+
const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), authority.get());
|
140
|
+
}
|
141
|
+
grpc_channel_args* args_with_authority =
|
142
|
+
grpc_channel_args_copy_and_add(args, args_to_add, num_args_to_add);
|
143
|
+
grpc_uri_destroy(server_uri);
|
144
|
+
// Create the security connector using the credentials and target name.
|
145
|
+
grpc_channel_args* new_args_from_connector = nullptr;
|
146
|
+
RefCountedPtr<grpc_channel_security_connector>
|
147
|
+
subchannel_security_connector =
|
148
|
+
channel_credentials->create_security_connector(
|
149
|
+
/*call_creds=*/nullptr, authority.get(), args_with_authority,
|
150
|
+
&new_args_from_connector);
|
151
|
+
if (subchannel_security_connector == nullptr) {
|
152
|
+
gpr_log(GPR_ERROR,
|
153
|
+
"Failed to create secure subchannel for secure name '%s'",
|
154
|
+
authority.get());
|
155
|
+
grpc_channel_args_destroy(args_with_authority);
|
156
|
+
return nullptr;
|
157
|
+
}
|
158
|
+
grpc_arg new_security_connector_arg =
|
159
|
+
grpc_security_connector_to_arg(subchannel_security_connector.get());
|
160
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
161
|
+
new_args_from_connector != nullptr ? new_args_from_connector
|
162
|
+
: args_with_authority,
|
163
|
+
&new_security_connector_arg, 1);
|
164
|
+
subchannel_security_connector.reset(DEBUG_LOCATION, "lb_channel_create");
|
165
|
+
if (new_args_from_connector != nullptr) {
|
166
|
+
grpc_channel_args_destroy(new_args_from_connector);
|
167
|
+
}
|
124
168
|
grpc_channel_args_destroy(args_with_authority);
|
125
|
-
return
|
169
|
+
return new_args;
|
126
170
|
}
|
127
|
-
|
128
|
-
grpc_security_connector_to_arg(subchannel_security_connector.get());
|
171
|
+
};
|
129
172
|
|
130
|
-
|
131
|
-
new_args_from_connector != nullptr ? new_args_from_connector
|
132
|
-
: args_with_authority,
|
133
|
-
&new_security_connector_arg, 1);
|
173
|
+
} // namespace grpc_core
|
134
174
|
|
135
|
-
|
136
|
-
if (new_args_from_connector != nullptr) {
|
137
|
-
grpc_channel_args_destroy(new_args_from_connector);
|
138
|
-
}
|
139
|
-
grpc_channel_args_destroy(args_with_authority);
|
140
|
-
grpc_subchannel_args* final_sc_args =
|
141
|
-
static_cast<grpc_subchannel_args*>(gpr_malloc(sizeof(*final_sc_args)));
|
142
|
-
memcpy(final_sc_args, args, sizeof(*args));
|
143
|
-
final_sc_args->args = new_args;
|
144
|
-
return final_sc_args;
|
145
|
-
}
|
175
|
+
namespace {
|
146
176
|
|
147
|
-
|
148
|
-
|
149
|
-
grpc_subchannel_args* subchannel_args =
|
150
|
-
get_secure_naming_subchannel_args(args);
|
151
|
-
if (subchannel_args == nullptr) {
|
152
|
-
gpr_log(
|
153
|
-
GPR_ERROR,
|
154
|
-
"Failed to create subchannel arguments during subchannel creation.");
|
155
|
-
return nullptr;
|
156
|
-
}
|
157
|
-
grpc_connector* connector = grpc_chttp2_connector_create();
|
158
|
-
grpc_subchannel* s = grpc_subchannel_create(connector, subchannel_args);
|
159
|
-
grpc_connector_unref(connector);
|
160
|
-
grpc_channel_args_destroy(
|
161
|
-
const_cast<grpc_channel_args*>(subchannel_args->args));
|
162
|
-
gpr_free(subchannel_args);
|
163
|
-
return s;
|
164
|
-
}
|
177
|
+
grpc_core::Chttp2SecureClientChannelFactory* g_factory;
|
178
|
+
gpr_once g_factory_once = GPR_ONCE_INIT;
|
165
179
|
|
166
|
-
|
167
|
-
|
168
|
-
grpc_client_channel_type type, const grpc_channel_args* args) {
|
169
|
-
if (target == nullptr) {
|
170
|
-
gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
|
171
|
-
return nullptr;
|
172
|
-
}
|
173
|
-
// Add channel arg containing the server URI.
|
174
|
-
grpc_core::UniquePtr<char> canonical_target =
|
175
|
-
grpc_core::ResolverRegistry::AddDefaultPrefixIfNeeded(target);
|
176
|
-
grpc_arg arg = grpc_channel_arg_string_create((char*)GRPC_ARG_SERVER_URI,
|
177
|
-
canonical_target.get());
|
178
|
-
const char* to_remove[] = {GRPC_ARG_SERVER_URI};
|
179
|
-
grpc_channel_args* new_args =
|
180
|
-
grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
|
181
|
-
grpc_channel* channel =
|
182
|
-
grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
|
183
|
-
grpc_channel_args_destroy(new_args);
|
184
|
-
return channel;
|
180
|
+
void FactoryInit() {
|
181
|
+
g_factory = grpc_core::New<grpc_core::Chttp2SecureClientChannelFactory>();
|
185
182
|
}
|
186
183
|
|
187
|
-
|
188
|
-
{client_channel_factory_ref, client_channel_factory_unref,
|
189
|
-
client_channel_factory_create_subchannel,
|
190
|
-
client_channel_factory_create_channel};
|
191
|
-
|
192
|
-
static grpc_client_channel_factory client_channel_factory = {
|
193
|
-
&client_channel_factory_vtable};
|
184
|
+
} // namespace
|
194
185
|
|
195
186
|
// Create a secure client channel:
|
196
187
|
// Asynchronously: - resolve target
|
@@ -210,15 +201,15 @@ grpc_channel* grpc_secure_channel_create(grpc_channel_credentials* creds,
|
|
210
201
|
if (creds != nullptr) {
|
211
202
|
// Add channel args containing the client channel factory and channel
|
212
203
|
// credentials.
|
204
|
+
gpr_once_init(&g_factory_once, FactoryInit);
|
213
205
|
grpc_arg args_to_add[] = {
|
214
|
-
|
206
|
+
grpc_core::ClientChannelFactory::CreateChannelArg(g_factory),
|
215
207
|
grpc_channel_credentials_to_arg(creds)};
|
216
208
|
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
217
209
|
args, args_to_add, GPR_ARRAY_SIZE(args_to_add));
|
210
|
+
new_args = creds->update_arguments(new_args);
|
218
211
|
// Create channel.
|
219
|
-
channel =
|
220
|
-
&client_channel_factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR,
|
221
|
-
new_args);
|
212
|
+
channel = g_factory->CreateChannel(target, new_args);
|
222
213
|
// Clean up.
|
223
214
|
grpc_channel_args_destroy(new_args);
|
224
215
|
}
|
@@ -20,12 +20,12 @@
|
|
20
20
|
|
21
21
|
#include "src/core/ext/transport/chttp2/server/chttp2_server.h"
|
22
22
|
|
23
|
-
#include <grpc/grpc.h>
|
24
|
-
|
25
23
|
#include <inttypes.h>
|
26
24
|
#include <limits.h>
|
27
25
|
#include <string.h>
|
28
26
|
|
27
|
+
#include <grpc/grpc.h>
|
28
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
29
29
|
#include <grpc/support/alloc.h>
|
30
30
|
#include <grpc/support/log.h>
|
31
31
|
#include <grpc/support/string_util.h>
|
@@ -54,7 +54,7 @@ typedef struct {
|
|
54
54
|
bool shutdown;
|
55
55
|
grpc_closure tcp_server_shutdown_complete;
|
56
56
|
grpc_closure* server_destroy_listener_done;
|
57
|
-
|
57
|
+
grpc_core::HandshakeManager* pending_handshake_mgrs;
|
58
58
|
grpc_core::RefCountedPtr<grpc_core::channelz::ListenSocketNode>
|
59
59
|
channelz_listen_socket;
|
60
60
|
} server_state;
|
@@ -64,7 +64,7 @@ typedef struct {
|
|
64
64
|
server_state* svr_state;
|
65
65
|
grpc_pollset* accepting_pollset;
|
66
66
|
grpc_tcp_server_acceptor* acceptor;
|
67
|
-
|
67
|
+
grpc_core::RefCountedPtr<grpc_core::HandshakeManager> handshake_mgr;
|
68
68
|
// State for enforcing handshake timeout on receiving HTTP/2 settings.
|
69
69
|
grpc_chttp2_transport* transport;
|
70
70
|
grpc_millis deadline;
|
@@ -112,7 +112,7 @@ static void on_receive_settings(void* arg, grpc_error* error) {
|
|
112
112
|
}
|
113
113
|
|
114
114
|
static void on_handshake_done(void* arg, grpc_error* error) {
|
115
|
-
|
115
|
+
auto* args = static_cast<grpc_core::HandshakerArgs*>(arg);
|
116
116
|
server_connection_state* connection_state =
|
117
117
|
static_cast<server_connection_state*>(args->user_data);
|
118
118
|
gpr_mu_lock(&connection_state->svr_state->mu);
|
@@ -175,11 +175,10 @@ static void on_handshake_done(void* arg, grpc_error* error) {
|
|
175
175
|
}
|
176
176
|
}
|
177
177
|
}
|
178
|
-
|
179
|
-
&connection_state->svr_state->pending_handshake_mgrs
|
180
|
-
connection_state->handshake_mgr);
|
178
|
+
connection_state->handshake_mgr->RemoveFromPendingMgrList(
|
179
|
+
&connection_state->svr_state->pending_handshake_mgrs);
|
181
180
|
gpr_mu_unlock(&connection_state->svr_state->mu);
|
182
|
-
|
181
|
+
connection_state->handshake_mgr.reset();
|
183
182
|
gpr_free(connection_state->acceptor);
|
184
183
|
grpc_tcp_server_unref(connection_state->svr_state->tcp_server);
|
185
184
|
server_connection_state_unref(connection_state);
|
@@ -211,9 +210,8 @@ static void on_accept(void* arg, grpc_endpoint* tcp,
|
|
211
210
|
gpr_free(acceptor);
|
212
211
|
return;
|
213
212
|
}
|
214
|
-
|
215
|
-
|
216
|
-
handshake_mgr);
|
213
|
+
auto handshake_mgr = grpc_core::MakeRefCounted<grpc_core::HandshakeManager>();
|
214
|
+
handshake_mgr->AddToPendingMgrList(&state->pending_handshake_mgrs);
|
217
215
|
grpc_tcp_server_ref(state->tcp_server);
|
218
216
|
gpr_mu_unlock(&state->mu);
|
219
217
|
server_connection_state* connection_state =
|
@@ -227,19 +225,19 @@ static void on_accept(void* arg, grpc_endpoint* tcp,
|
|
227
225
|
connection_state->interested_parties = grpc_pollset_set_create();
|
228
226
|
grpc_pollset_set_add_pollset(connection_state->interested_parties,
|
229
227
|
connection_state->accepting_pollset);
|
230
|
-
|
231
|
-
|
232
|
-
|
228
|
+
grpc_core::HandshakerRegistry::AddHandshakers(
|
229
|
+
grpc_core::HANDSHAKER_SERVER, state->args,
|
230
|
+
connection_state->interested_parties,
|
231
|
+
connection_state->handshake_mgr.get());
|
233
232
|
const grpc_arg* timeout_arg =
|
234
233
|
grpc_channel_args_find(state->args, GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS);
|
235
234
|
connection_state->deadline =
|
236
235
|
grpc_core::ExecCtx::Get()->Now() +
|
237
236
|
grpc_channel_arg_get_integer(timeout_arg,
|
238
237
|
{120 * GPR_MS_PER_SEC, 1, INT_MAX});
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
connection_state);
|
238
|
+
connection_state->handshake_mgr->DoHandshake(
|
239
|
+
tcp, state->args, connection_state->deadline, acceptor, on_handshake_done,
|
240
|
+
connection_state);
|
243
241
|
}
|
244
242
|
|
245
243
|
/* Server callback: start listening on our ports */
|
@@ -260,8 +258,9 @@ static void tcp_server_shutdown_complete(void* arg, grpc_error* error) {
|
|
260
258
|
gpr_mu_lock(&state->mu);
|
261
259
|
grpc_closure* destroy_done = state->server_destroy_listener_done;
|
262
260
|
GPR_ASSERT(state->shutdown);
|
263
|
-
|
264
|
-
|
261
|
+
if (state->pending_handshake_mgrs != nullptr) {
|
262
|
+
state->pending_handshake_mgrs->ShutdownAllPending(GRPC_ERROR_REF(error));
|
263
|
+
}
|
265
264
|
state->channelz_listen_socket.reset();
|
266
265
|
gpr_mu_unlock(&state->mu);
|
267
266
|
// Flush queued work before destroying handshaker factory, since that
|
@@ -290,6 +289,50 @@ static void server_destroy_listener(grpc_server* server, void* arg,
|
|
290
289
|
grpc_tcp_server_unref(tcp_server);
|
291
290
|
}
|
292
291
|
|
292
|
+
static grpc_error* chttp2_server_add_acceptor(grpc_server* server,
|
293
|
+
const char* name,
|
294
|
+
grpc_channel_args* args) {
|
295
|
+
grpc_tcp_server* tcp_server = nullptr;
|
296
|
+
grpc_error* err = GRPC_ERROR_NONE;
|
297
|
+
server_state* state = nullptr;
|
298
|
+
const grpc_arg* arg = nullptr;
|
299
|
+
grpc_core::TcpServerFdHandler** arg_val = nullptr;
|
300
|
+
state = static_cast<server_state*>(gpr_zalloc(sizeof(*state)));
|
301
|
+
GRPC_CLOSURE_INIT(&state->tcp_server_shutdown_complete,
|
302
|
+
tcp_server_shutdown_complete, state,
|
303
|
+
grpc_schedule_on_exec_ctx);
|
304
|
+
err = grpc_tcp_server_create(&state->tcp_server_shutdown_complete, args,
|
305
|
+
&tcp_server);
|
306
|
+
if (err != GRPC_ERROR_NONE) {
|
307
|
+
goto error;
|
308
|
+
}
|
309
|
+
state->server = server;
|
310
|
+
state->tcp_server = tcp_server;
|
311
|
+
state->args = args;
|
312
|
+
state->shutdown = true;
|
313
|
+
gpr_mu_init(&state->mu);
|
314
|
+
// TODO(yangg) channelz
|
315
|
+
arg = grpc_channel_args_find(args, name);
|
316
|
+
GPR_ASSERT(arg->type == GRPC_ARG_POINTER);
|
317
|
+
arg_val = static_cast<grpc_core::TcpServerFdHandler**>(arg->value.pointer.p);
|
318
|
+
*arg_val = grpc_tcp_server_create_fd_handler(tcp_server);
|
319
|
+
|
320
|
+
grpc_server_add_listener(server, state, server_start_listener,
|
321
|
+
server_destroy_listener, /* socket_uuid */ 0);
|
322
|
+
return err;
|
323
|
+
|
324
|
+
/* Error path: cleanup and return */
|
325
|
+
error:
|
326
|
+
GPR_ASSERT(err != GRPC_ERROR_NONE);
|
327
|
+
if (tcp_server) {
|
328
|
+
grpc_tcp_server_unref(tcp_server);
|
329
|
+
} else {
|
330
|
+
grpc_channel_args_destroy(args);
|
331
|
+
gpr_free(state);
|
332
|
+
}
|
333
|
+
return err;
|
334
|
+
}
|
335
|
+
|
293
336
|
grpc_error* grpc_chttp2_server_add_port(grpc_server* server, const char* addr,
|
294
337
|
grpc_channel_args* args,
|
295
338
|
int* port_num) {
|
@@ -307,6 +350,10 @@ grpc_error* grpc_chttp2_server_add_port(grpc_server* server, const char* addr,
|
|
307
350
|
|
308
351
|
*port_num = -1;
|
309
352
|
|
353
|
+
if (strncmp(addr, "external:", 9) == 0) {
|
354
|
+
return chttp2_server_add_acceptor(server, addr, args);
|
355
|
+
}
|
356
|
+
|
310
357
|
/* resolve address */
|
311
358
|
err = grpc_blocking_resolve_address(addr, "https", &resolved);
|
312
359
|
if (err != GRPC_ERROR_NONE) {
|
@@ -51,7 +51,7 @@ static uint8_t decode_table[] = {
|
|
51
51
|
|
52
52
|
static const uint8_t tail_xtra[4] = {0, 0, 1, 2};
|
53
53
|
|
54
|
-
static bool input_is_valid(uint8_t* input_ptr, size_t length) {
|
54
|
+
static bool input_is_valid(const uint8_t* input_ptr, size_t length) {
|
55
55
|
size_t i;
|
56
56
|
|
57
57
|
for (i = 0; i < length; ++i) {
|
@@ -158,7 +158,7 @@ bool grpc_base64_decode_partial(struct grpc_base64_decode_context* ctx) {
|
|
158
158
|
return true;
|
159
159
|
}
|
160
160
|
|
161
|
-
grpc_slice grpc_chttp2_base64_decode(grpc_slice input) {
|
161
|
+
grpc_slice grpc_chttp2_base64_decode(const grpc_slice& input) {
|
162
162
|
size_t input_length = GRPC_SLICE_LENGTH(input);
|
163
163
|
size_t output_length = input_length / 4 * 3;
|
164
164
|
struct grpc_base64_decode_context ctx;
|
@@ -174,7 +174,7 @@ grpc_slice grpc_chttp2_base64_decode(grpc_slice input) {
|
|
174
174
|
}
|
175
175
|
|
176
176
|
if (input_length > 0) {
|
177
|
-
uint8_t* input_end = GRPC_SLICE_END_PTR(input);
|
177
|
+
const uint8_t* input_end = GRPC_SLICE_END_PTR(input);
|
178
178
|
if (*(--input_end) == '=') {
|
179
179
|
output_length--;
|
180
180
|
if (*(--input_end) == '=') {
|
@@ -202,7 +202,7 @@ grpc_slice grpc_chttp2_base64_decode(grpc_slice input) {
|
|
202
202
|
return output;
|
203
203
|
}
|
204
204
|
|
205
|
-
grpc_slice grpc_chttp2_base64_decode_with_length(grpc_slice input,
|
205
|
+
grpc_slice grpc_chttp2_base64_decode_with_length(const grpc_slice& input,
|
206
206
|
size_t output_length) {
|
207
207
|
size_t input_length = GRPC_SLICE_LENGTH(input);
|
208
208
|
grpc_slice output = GRPC_SLICE_MALLOC(output_length);
|
@@ -26,8 +26,8 @@
|
|
26
26
|
|
27
27
|
struct grpc_base64_decode_context {
|
28
28
|
/* input/output: */
|
29
|
-
uint8_t* input_cur;
|
30
|
-
uint8_t* input_end;
|
29
|
+
const uint8_t* input_cur;
|
30
|
+
const uint8_t* input_end;
|
31
31
|
uint8_t* output_cur;
|
32
32
|
uint8_t* output_end;
|
33
33
|
/* Indicate if the decoder should handle the tail of input data*/
|
@@ -42,12 +42,12 @@ bool grpc_base64_decode_partial(struct grpc_base64_decode_context* ctx);
|
|
42
42
|
|
43
43
|
/* base64 decode a slice with pad chars. Returns a new slice, does not take
|
44
44
|
ownership of the input. Returns an empty slice if decoding is failed. */
|
45
|
-
grpc_slice grpc_chttp2_base64_decode(grpc_slice input);
|
45
|
+
grpc_slice grpc_chttp2_base64_decode(const grpc_slice& input);
|
46
46
|
|
47
47
|
/* base64 decode a slice without pad chars, data length is needed. Returns a new
|
48
48
|
slice, does not take ownership of the input. Returns an empty slice if
|
49
49
|
decoding is failed. */
|
50
|
-
grpc_slice grpc_chttp2_base64_decode_with_length(grpc_slice input,
|
50
|
+
grpc_slice grpc_chttp2_base64_decode_with_length(const grpc_slice& input,
|
51
51
|
size_t output_length);
|
52
52
|
|
53
53
|
/* Infer the length of decoded data from encoded data. */
|
@@ -48,13 +48,13 @@ static const b64_huff_sym huff_alphabet[64] = {
|
|
48
48
|
|
49
49
|
static const uint8_t tail_xtra[3] = {0, 2, 3};
|
50
50
|
|
51
|
-
grpc_slice grpc_chttp2_base64_encode(grpc_slice input) {
|
51
|
+
grpc_slice grpc_chttp2_base64_encode(const grpc_slice& input) {
|
52
52
|
size_t input_length = GRPC_SLICE_LENGTH(input);
|
53
53
|
size_t input_triplets = input_length / 3;
|
54
54
|
size_t tail_case = input_length % 3;
|
55
55
|
size_t output_length = input_triplets * 4 + tail_xtra[tail_case];
|
56
56
|
grpc_slice output = GRPC_SLICE_MALLOC(output_length);
|
57
|
-
uint8_t* in = GRPC_SLICE_START_PTR(input);
|
57
|
+
const uint8_t* in = GRPC_SLICE_START_PTR(input);
|
58
58
|
char* out = reinterpret_cast<char*> GRPC_SLICE_START_PTR(output);
|
59
59
|
size_t i;
|
60
60
|
|
@@ -92,9 +92,9 @@ grpc_slice grpc_chttp2_base64_encode(grpc_slice input) {
|
|
92
92
|
return output;
|
93
93
|
}
|
94
94
|
|
95
|
-
grpc_slice grpc_chttp2_huffman_compress(grpc_slice input) {
|
95
|
+
grpc_slice grpc_chttp2_huffman_compress(const grpc_slice& input) {
|
96
96
|
size_t nbits;
|
97
|
-
uint8_t* in;
|
97
|
+
const uint8_t* in;
|
98
98
|
uint8_t* out;
|
99
99
|
grpc_slice output;
|
100
100
|
uint32_t temp = 0;
|
@@ -166,7 +166,8 @@ static void enc_add1(huff_out* out, uint8_t a) {
|
|
166
166
|
enc_flush_some(out);
|
167
167
|
}
|
168
168
|
|
169
|
-
grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(
|
169
|
+
grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(
|
170
|
+
const grpc_slice& input) {
|
170
171
|
size_t input_length = GRPC_SLICE_LENGTH(input);
|
171
172
|
size_t input_triplets = input_length / 3;
|
172
173
|
size_t tail_case = input_length % 3;
|
@@ -174,7 +175,7 @@ grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(grpc_slice input) {
|
|
174
175
|
size_t max_output_bits = 11 * output_syms;
|
175
176
|
size_t max_output_length = max_output_bits / 8 + (max_output_bits % 8 != 0);
|
176
177
|
grpc_slice output = GRPC_SLICE_MALLOC(max_output_length);
|
177
|
-
uint8_t* in = GRPC_SLICE_START_PTR(input);
|
178
|
+
const uint8_t* in = GRPC_SLICE_START_PTR(input);
|
178
179
|
uint8_t* start_out = GRPC_SLICE_START_PTR(output);
|
179
180
|
huff_out out;
|
180
181
|
size_t i;
|
@@ -25,17 +25,18 @@
|
|
25
25
|
|
26
26
|
/* base64 encode a slice. Returns a new slice, does not take ownership of the
|
27
27
|
input */
|
28
|
-
grpc_slice grpc_chttp2_base64_encode(grpc_slice input);
|
28
|
+
grpc_slice grpc_chttp2_base64_encode(const grpc_slice& input);
|
29
29
|
|
30
30
|
/* Compress a slice with the static huffman encoder detailed in the hpack
|
31
31
|
standard. Returns a new slice, does not take ownership of the input */
|
32
|
-
grpc_slice grpc_chttp2_huffman_compress(grpc_slice input);
|
32
|
+
grpc_slice grpc_chttp2_huffman_compress(const grpc_slice& input);
|
33
33
|
|
34
34
|
/* equivalent to:
|
35
35
|
grpc_slice x = grpc_chttp2_base64_encode(input);
|
36
36
|
grpc_slice y = grpc_chttp2_huffman_compress(x);
|
37
37
|
grpc_slice_unref_internal( x);
|
38
38
|
return y; */
|
39
|
-
grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(
|
39
|
+
grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(
|
40
|
+
const grpc_slice& input);
|
40
41
|
|
41
42
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_BIN_ENCODER_H */
|
@@ -20,16 +20,18 @@
|
|
20
20
|
|
21
21
|
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
|
22
22
|
#include "src/core/lib/debug/trace.h"
|
23
|
-
#include "src/core/lib/
|
23
|
+
#include "src/core/lib/gprpp/global_config.h"
|
24
24
|
#include "src/core/lib/transport/metadata.h"
|
25
25
|
|
26
|
+
GPR_GLOBAL_CONFIG_DEFINE_BOOL(
|
27
|
+
grpc_experimental_disable_flow_control, false,
|
28
|
+
"If set, flow control will be effectively disabled. Max out all values and "
|
29
|
+
"assume the remote peer does the same. Thus we can ignore any flow control "
|
30
|
+
"bookkeeping, error checking, and decision making");
|
31
|
+
|
26
32
|
void grpc_chttp2_plugin_init(void) {
|
27
|
-
g_flow_control_enabled =
|
28
|
-
|
29
|
-
if (env_variable != nullptr) {
|
30
|
-
g_flow_control_enabled = false;
|
31
|
-
gpr_free(env_variable);
|
32
|
-
}
|
33
|
+
g_flow_control_enabled =
|
34
|
+
!GPR_GLOBAL_CONFIG_GET(grpc_experimental_disable_flow_control);
|
33
35
|
}
|
34
36
|
|
35
37
|
void grpc_chttp2_plugin_shutdown(void) {}
|