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
@@ -90,7 +90,7 @@ static void start_timer_thread_and_unlock(void) {
|
|
90
90
|
++g_waiter_count;
|
91
91
|
++g_thread_count;
|
92
92
|
gpr_mu_unlock(&g_mu);
|
93
|
-
if (grpc_timer_check_trace
|
93
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
94
94
|
gpr_log(GPR_INFO, "Spawn timer thread");
|
95
95
|
}
|
96
96
|
completed_thread* ct =
|
@@ -105,6 +105,14 @@ void grpc_timer_manager_tick() {
|
|
105
105
|
}
|
106
106
|
|
107
107
|
static void run_some_timers() {
|
108
|
+
// In the case of timers, the ExecCtx for the thread is declared
|
109
|
+
// in the timer thread itself, but this is the point where we
|
110
|
+
// could start seeing application-level callbacks. No need to
|
111
|
+
// create a new ExecCtx, though, since there already is one and it is
|
112
|
+
// flushed (but not destructed) in this function itself
|
113
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx(
|
114
|
+
GRPC_APP_CALLBACK_EXEC_CTX_FLAG_IS_INTERNAL_THREAD);
|
115
|
+
|
108
116
|
// if there's something to execute...
|
109
117
|
gpr_mu_lock(&g_mu);
|
110
118
|
// remove a waiter from the pool, and start another thread if necessary
|
@@ -118,7 +126,7 @@ static void run_some_timers() {
|
|
118
126
|
// if there's no thread waiting with a timeout, kick an existing untimed
|
119
127
|
// waiter so that the next deadline is not missed
|
120
128
|
if (!g_has_timed_waiter) {
|
121
|
-
if (grpc_timer_check_trace
|
129
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
122
130
|
gpr_log(GPR_INFO, "kick untimed waiter");
|
123
131
|
}
|
124
132
|
gpr_cv_signal(&g_cv_wait);
|
@@ -126,7 +134,7 @@ static void run_some_timers() {
|
|
126
134
|
gpr_mu_unlock(&g_mu);
|
127
135
|
}
|
128
136
|
// without our lock, flush the exec_ctx
|
129
|
-
if (grpc_timer_check_trace
|
137
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
130
138
|
gpr_log(GPR_INFO, "flush exec_ctx");
|
131
139
|
}
|
132
140
|
grpc_core::ExecCtx::Get()->Flush();
|
@@ -181,7 +189,7 @@ static bool wait_until(grpc_millis next) {
|
|
181
189
|
g_has_timed_waiter = true;
|
182
190
|
g_timed_waiter_deadline = next;
|
183
191
|
|
184
|
-
if (grpc_timer_check_trace
|
192
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
185
193
|
grpc_millis wait_time = next - grpc_core::ExecCtx::Get()->Now();
|
186
194
|
gpr_log(GPR_INFO, "sleep for a %" PRId64 " milliseconds", wait_time);
|
187
195
|
}
|
@@ -190,7 +198,8 @@ static bool wait_until(grpc_millis next) {
|
|
190
198
|
}
|
191
199
|
}
|
192
200
|
|
193
|
-
if (grpc_timer_check_trace
|
201
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace) &&
|
202
|
+
next == GRPC_MILLIS_INF_FUTURE) {
|
194
203
|
gpr_log(GPR_INFO, "sleep until kicked");
|
195
204
|
}
|
196
205
|
|
@@ -202,7 +211,7 @@ static bool wait_until(grpc_millis next) {
|
|
202
211
|
gpr_cv_wait(&g_cv_wait, &g_mu,
|
203
212
|
grpc_millis_to_timespec(next, GPR_CLOCK_MONOTONIC));
|
204
213
|
|
205
|
-
if (grpc_timer_check_trace
|
214
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
206
215
|
gpr_log(GPR_INFO, "wait ended: was_timed:%d kicked:%d",
|
207
216
|
my_timed_waiter_generation == g_timed_waiter_generation,
|
208
217
|
g_kicked);
|
@@ -247,7 +256,7 @@ static void timer_main_loop() {
|
|
247
256
|
|
248
257
|
Consequently, we can just sleep forever here and be happy at some
|
249
258
|
saved wakeup cycles. */
|
250
|
-
if (grpc_timer_check_trace
|
259
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
251
260
|
gpr_log(GPR_INFO, "timers not checked: expect another thread to");
|
252
261
|
}
|
253
262
|
next = GRPC_MILLIS_INF_FUTURE;
|
@@ -273,7 +282,7 @@ static void timer_thread_cleanup(completed_thread* ct) {
|
|
273
282
|
ct->next = g_completed_threads;
|
274
283
|
g_completed_threads = ct;
|
275
284
|
gpr_mu_unlock(&g_mu);
|
276
|
-
if (grpc_timer_check_trace
|
285
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
277
286
|
gpr_log(GPR_INFO, "End timer thread");
|
278
287
|
}
|
279
288
|
}
|
@@ -319,18 +328,18 @@ void grpc_timer_manager_init(void) {
|
|
319
328
|
|
320
329
|
static void stop_threads(void) {
|
321
330
|
gpr_mu_lock(&g_mu);
|
322
|
-
if (grpc_timer_check_trace
|
331
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
323
332
|
gpr_log(GPR_INFO, "stop timer threads: threaded=%d", g_threaded);
|
324
333
|
}
|
325
334
|
if (g_threaded) {
|
326
335
|
g_threaded = false;
|
327
336
|
gpr_cv_broadcast(&g_cv_wait);
|
328
|
-
if (grpc_timer_check_trace
|
337
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
329
338
|
gpr_log(GPR_INFO, "num timer threads: %d", g_thread_count);
|
330
339
|
}
|
331
340
|
while (g_thread_count > 0) {
|
332
341
|
gpr_cv_wait(&g_cv_shutdown, &g_mu, gpr_inf_future(GPR_CLOCK_MONOTONIC));
|
333
|
-
if (grpc_timer_check_trace
|
342
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
334
343
|
gpr_log(GPR_INFO, "num timer threads: %d", g_thread_count);
|
335
344
|
}
|
336
345
|
gc_completed_threads();
|
@@ -332,7 +332,7 @@ void GrpcUdpListener::OnFdAboutToOrphan() {
|
|
332
332
|
GRPC_CLOSURE_INIT(&destroyed_closure_, destroyed_port, server_,
|
333
333
|
grpc_schedule_on_exec_ctx);
|
334
334
|
if (!orphan_notified_ && udp_handler_ != nullptr) {
|
335
|
-
/*
|
335
|
+
/* Signals udp_handler that the FD is about to be closed and
|
336
336
|
* should no longer be used. */
|
337
337
|
GRPC_CLOSURE_INIT(&orphan_fd_closure_, shutdown_fd, this,
|
338
338
|
grpc_schedule_on_exec_ctx);
|
@@ -481,8 +481,9 @@ void GrpcUdpListener::OnRead(grpc_error* error, void* do_read_arg) {
|
|
481
481
|
if (udp_handler_->Read()) {
|
482
482
|
/* There maybe more packets to read. Schedule read_more_cb_ closure to run
|
483
483
|
* after finishing this event loop. */
|
484
|
-
GRPC_CLOSURE_INIT(
|
485
|
-
|
484
|
+
GRPC_CLOSURE_INIT(
|
485
|
+
&do_read_closure_, do_read, do_read_arg,
|
486
|
+
grpc_core::Executor::Scheduler(grpc_core::ExecutorJobType::LONG));
|
486
487
|
GRPC_CLOSURE_SCHED(&do_read_closure_, GRPC_ERROR_NONE);
|
487
488
|
} else {
|
488
489
|
/* Finish reading all the packets, re-arm the notification event so we can
|
@@ -542,8 +543,9 @@ void GrpcUdpListener::OnCanWrite(grpc_error* error, void* do_write_arg) {
|
|
542
543
|
}
|
543
544
|
|
544
545
|
/* Schedule actual write in another thread. */
|
545
|
-
GRPC_CLOSURE_INIT(
|
546
|
-
|
546
|
+
GRPC_CLOSURE_INIT(
|
547
|
+
&do_write_closure_, do_write, do_write_arg,
|
548
|
+
grpc_core::Executor::Scheduler(grpc_core::ExecutorJobType::LONG));
|
547
549
|
|
548
550
|
GRPC_CLOSURE_SCHED(&do_write_closure_, GRPC_ERROR_NONE);
|
549
551
|
}
|
@@ -643,7 +645,7 @@ int grpc_udp_server_add_port(grpc_udp_server* s,
|
|
643
645
|
grpc_sockaddr_set_port(addr, allocated_port1);
|
644
646
|
port = allocated_port1;
|
645
647
|
} else if (allocated_port1 >= 0) {
|
646
|
-
/* The following
|
648
|
+
/* The following successfully created socket should have same port as
|
647
649
|
* the first one. */
|
648
650
|
GPR_ASSERT(port == allocated_port1);
|
649
651
|
}
|
@@ -23,7 +23,6 @@
|
|
23
23
|
#ifdef GRPC_POSIX_WAKEUP_FD
|
24
24
|
|
25
25
|
#include <stddef.h>
|
26
|
-
#include "src/core/lib/iomgr/wakeup_fd_cv.h"
|
27
26
|
#include "src/core/lib/iomgr/wakeup_fd_pipe.h"
|
28
27
|
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
29
28
|
|
@@ -51,37 +50,20 @@ void grpc_wakeup_fd_global_destroy(void) { wakeup_fd_vtable = nullptr; }
|
|
51
50
|
|
52
51
|
int grpc_has_wakeup_fd(void) { return has_real_wakeup_fd; }
|
53
52
|
|
54
|
-
int grpc_cv_wakeup_fds_enabled(void) { return cv_wakeup_fds_enabled; }
|
55
|
-
|
56
|
-
void grpc_enable_cv_wakeup_fds(int enable) { cv_wakeup_fds_enabled = enable; }
|
57
|
-
|
58
53
|
grpc_error* grpc_wakeup_fd_init(grpc_wakeup_fd* fd_info) {
|
59
|
-
if (cv_wakeup_fds_enabled) {
|
60
|
-
return grpc_cv_wakeup_fd_vtable.init(fd_info);
|
61
|
-
}
|
62
54
|
return wakeup_fd_vtable->init(fd_info);
|
63
55
|
}
|
64
56
|
|
65
57
|
grpc_error* grpc_wakeup_fd_consume_wakeup(grpc_wakeup_fd* fd_info) {
|
66
|
-
if (cv_wakeup_fds_enabled) {
|
67
|
-
return grpc_cv_wakeup_fd_vtable.consume(fd_info);
|
68
|
-
}
|
69
58
|
return wakeup_fd_vtable->consume(fd_info);
|
70
59
|
}
|
71
60
|
|
72
61
|
grpc_error* grpc_wakeup_fd_wakeup(grpc_wakeup_fd* fd_info) {
|
73
|
-
if (cv_wakeup_fds_enabled) {
|
74
|
-
return grpc_cv_wakeup_fd_vtable.wakeup(fd_info);
|
75
|
-
}
|
76
62
|
return wakeup_fd_vtable->wakeup(fd_info);
|
77
63
|
}
|
78
64
|
|
79
65
|
void grpc_wakeup_fd_destroy(grpc_wakeup_fd* fd_info) {
|
80
|
-
|
81
|
-
grpc_cv_wakeup_fd_vtable.destroy(fd_info);
|
82
|
-
} else {
|
83
|
-
wakeup_fd_vtable->destroy(fd_info);
|
84
|
-
}
|
66
|
+
wakeup_fd_vtable->destroy(fd_info);
|
85
67
|
}
|
86
68
|
|
87
69
|
#endif /* GRPC_POSIX_WAKEUP_FD */
|
data/src/core/lib/json/json.cc
CHANGED
@@ -35,24 +35,21 @@ grpc_json* grpc_json_create(grpc_json_type type) {
|
|
35
35
|
}
|
36
36
|
|
37
37
|
void grpc_json_destroy(grpc_json* json) {
|
38
|
+
if (json == nullptr) return;
|
38
39
|
while (json->child) {
|
39
40
|
grpc_json_destroy(json->child);
|
40
41
|
}
|
41
|
-
|
42
42
|
if (json->next) {
|
43
43
|
json->next->prev = json->prev;
|
44
44
|
}
|
45
|
-
|
46
45
|
if (json->prev) {
|
47
46
|
json->prev->next = json->next;
|
48
47
|
} else if (json->parent) {
|
49
48
|
json->parent->child = json->next;
|
50
49
|
}
|
51
|
-
|
52
50
|
if (json->owns_value) {
|
53
51
|
gpr_free((void*)json->value);
|
54
52
|
}
|
55
|
-
|
56
53
|
gpr_free(json);
|
57
54
|
}
|
58
55
|
|
@@ -31,7 +31,8 @@
|
|
31
31
|
#include <stdio.h>
|
32
32
|
#include <string.h>
|
33
33
|
|
34
|
-
#include "src/core/lib/
|
34
|
+
#include "src/core/lib/gprpp/global_config.h"
|
35
|
+
#include "src/core/lib/profiling/timers.h"
|
35
36
|
|
36
37
|
typedef enum { BEGIN = '{', END = '}', MARK = '.' } marker_type;
|
37
38
|
|
@@ -74,11 +75,16 @@ static __thread int g_thread_id;
|
|
74
75
|
static int g_next_thread_id;
|
75
76
|
static int g_writing_enabled = 1;
|
76
77
|
|
78
|
+
GPR_GLOBAL_CONFIG_DEFINE_STRING(grpc_latency_trace, "latency_trace.txt",
|
79
|
+
"Output file name for latency trace")
|
80
|
+
|
77
81
|
static const char* output_filename() {
|
78
82
|
if (output_filename_or_null == NULL) {
|
79
|
-
|
80
|
-
|
81
|
-
|
83
|
+
grpc_core::UniquePtr<char> value =
|
84
|
+
GPR_GLOBAL_CONFIG_GET(grpc_latency_trace);
|
85
|
+
if (strlen(value.get()) > 0) {
|
86
|
+
output_filename_or_null = value.release();
|
87
|
+
} else {
|
82
88
|
output_filename_or_null = "latency_trace.txt";
|
83
89
|
}
|
84
90
|
}
|
@@ -21,8 +21,8 @@
|
|
21
21
|
#include <string.h>
|
22
22
|
|
23
23
|
#include "src/core/lib/channel/channel_args.h"
|
24
|
-
#include "src/core/lib/gpr/arena.h"
|
25
24
|
#include "src/core/lib/gpr/string.h"
|
25
|
+
#include "src/core/lib/gprpp/arena.h"
|
26
26
|
#include "src/core/lib/gprpp/ref_counted.h"
|
27
27
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
28
28
|
#include "src/core/lib/security/context/security_context.h"
|
@@ -102,9 +102,9 @@ grpc_client_security_context::~grpc_client_security_context() {
|
|
102
102
|
}
|
103
103
|
|
104
104
|
grpc_client_security_context* grpc_client_security_context_create(
|
105
|
-
|
106
|
-
return
|
107
|
-
|
105
|
+
grpc_core::Arena* arena, grpc_call_credentials* creds) {
|
106
|
+
return arena->New<grpc_client_security_context>(
|
107
|
+
creds != nullptr ? creds->Ref() : nullptr);
|
108
108
|
}
|
109
109
|
|
110
110
|
void grpc_client_security_context_destroy(void* ctx) {
|
@@ -123,9 +123,8 @@ grpc_server_security_context::~grpc_server_security_context() {
|
|
123
123
|
}
|
124
124
|
|
125
125
|
grpc_server_security_context* grpc_server_security_context_create(
|
126
|
-
|
127
|
-
return
|
128
|
-
grpc_server_security_context();
|
126
|
+
grpc_core::Arena* arena) {
|
127
|
+
return arena->New<grpc_server_security_context>();
|
129
128
|
}
|
130
129
|
|
131
130
|
void grpc_server_security_context_destroy(void* ctx) {
|
@@ -21,6 +21,7 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include "src/core/lib/gprpp/arena.h"
|
24
25
|
#include "src/core/lib/gprpp/ref_counted.h"
|
25
26
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
26
27
|
#include "src/core/lib/iomgr/pollset.h"
|
@@ -28,8 +29,6 @@
|
|
28
29
|
|
29
30
|
extern grpc_core::DebugOnlyTraceFlag grpc_trace_auth_context_refcount;
|
30
31
|
|
31
|
-
struct gpr_arena;
|
32
|
-
|
33
32
|
/* --- grpc_auth_context ---
|
34
33
|
|
35
34
|
High level authentication context object. Can optionally be chained. */
|
@@ -121,7 +120,7 @@ struct grpc_client_security_context {
|
|
121
120
|
};
|
122
121
|
|
123
122
|
grpc_client_security_context* grpc_client_security_context_create(
|
124
|
-
|
123
|
+
grpc_core::Arena* arena, grpc_call_credentials* creds);
|
125
124
|
void grpc_client_security_context_destroy(void* ctx);
|
126
125
|
|
127
126
|
/* --- grpc_server_security_context ---
|
@@ -137,7 +136,7 @@ struct grpc_server_security_context {
|
|
137
136
|
};
|
138
137
|
|
139
138
|
grpc_server_security_context* grpc_server_security_context_create(
|
140
|
-
|
139
|
+
grpc_core::Arena* arena);
|
141
140
|
void grpc_server_security_context_destroy(void* ctx);
|
142
141
|
|
143
142
|
/* --- Channel args for auth context --- */
|
@@ -31,7 +31,7 @@
|
|
31
31
|
#include "src/core/lib/security/security_connector/alts/alts_security_connector.h"
|
32
32
|
|
33
33
|
#define GRPC_CREDENTIALS_TYPE_ALTS "Alts"
|
34
|
-
#define GRPC_ALTS_HANDSHAKER_SERVICE_URL "metadata.google.internal
|
34
|
+
#define GRPC_ALTS_HANDSHAKER_SERVICE_URL "metadata.google.internal.:8080"
|
35
35
|
|
36
36
|
grpc_alts_credentials::grpc_alts_credentials(
|
37
37
|
const grpc_alts_credentials_options* options,
|
@@ -25,8 +25,8 @@
|
|
25
25
|
#include <grpc/support/log.h>
|
26
26
|
|
27
27
|
bool grpc_alts_is_running_on_gcp() {
|
28
|
-
gpr_log(
|
29
|
-
"Platforms other than Linux and Windows are not supported");
|
28
|
+
gpr_log(GPR_INFO,
|
29
|
+
"ALTS: Platforms other than Linux and Windows are not supported");
|
30
30
|
return false;
|
31
31
|
}
|
32
32
|
|
@@ -49,6 +49,10 @@ class grpc_composite_channel_credentials : public grpc_channel_credentials {
|
|
49
49
|
const char* target, const grpc_channel_args* args,
|
50
50
|
grpc_channel_args** new_args) override;
|
51
51
|
|
52
|
+
grpc_channel_args* update_arguments(grpc_channel_args* args) override {
|
53
|
+
return inner_creds_->update_arguments(args);
|
54
|
+
}
|
55
|
+
|
52
56
|
const grpc_channel_credentials* inner_creds() const {
|
53
57
|
return inner_creds_.get();
|
54
58
|
}
|
@@ -60,7 +60,7 @@ typedef enum {
|
|
60
60
|
|
61
61
|
#define GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS 60
|
62
62
|
|
63
|
-
#define GRPC_COMPUTE_ENGINE_METADATA_HOST "metadata.google.internal"
|
63
|
+
#define GRPC_COMPUTE_ENGINE_METADATA_HOST "metadata.google.internal."
|
64
64
|
#define GRPC_COMPUTE_ENGINE_METADATA_TOKEN_PATH \
|
65
65
|
"/computeMetadata/v1/instance/service-accounts/default/token"
|
66
66
|
|
@@ -123,6 +123,14 @@ struct grpc_channel_credentials
|
|
123
123
|
return Ref();
|
124
124
|
}
|
125
125
|
|
126
|
+
// Allows credentials to optionally modify a parent channel's args.
|
127
|
+
// By default, leave channel args as is. The callee takes ownership
|
128
|
+
// of the passed-in channel args, and the caller takes ownership
|
129
|
+
// of the returned channel args.
|
130
|
+
virtual grpc_channel_args* update_arguments(grpc_channel_args* args) {
|
131
|
+
return args;
|
132
|
+
}
|
133
|
+
|
126
134
|
const char* type() const { return type_; }
|
127
135
|
|
128
136
|
GRPC_ABSTRACT_BASE_CLASS
|
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
/* -- Constants. -- */
|
48
48
|
|
49
|
-
#define GRPC_COMPUTE_ENGINE_DETECTION_HOST "metadata.google.internal"
|
49
|
+
#define GRPC_COMPUTE_ENGINE_DETECTION_HOST "metadata.google.internal."
|
50
50
|
|
51
51
|
/* -- Default credentials. -- */
|
52
52
|
|
@@ -114,6 +114,19 @@ grpc_google_default_channel_credentials::create_security_connector(
|
|
114
114
|
return sc;
|
115
115
|
}
|
116
116
|
|
117
|
+
grpc_channel_args* grpc_google_default_channel_credentials::update_arguments(
|
118
|
+
grpc_channel_args* args) {
|
119
|
+
grpc_channel_args* updated = args;
|
120
|
+
if (grpc_channel_args_find(args, GRPC_ARG_DNS_ENABLE_SRV_QUERIES) ==
|
121
|
+
nullptr) {
|
122
|
+
grpc_arg new_srv_arg = grpc_channel_arg_integer_create(
|
123
|
+
const_cast<char*>(GRPC_ARG_DNS_ENABLE_SRV_QUERIES), true);
|
124
|
+
updated = grpc_channel_args_copy_and_add(args, &new_srv_arg, 1);
|
125
|
+
grpc_channel_args_destroy(args);
|
126
|
+
}
|
127
|
+
return updated;
|
128
|
+
}
|
129
|
+
|
117
130
|
static void on_metadata_server_detection_http_response(void* user_data,
|
118
131
|
grpc_error* error) {
|
119
132
|
metadata_server_detector* detector =
|
@@ -159,7 +172,6 @@ static int is_metadata_server_reachable() {
|
|
159
172
|
detector.pollent = grpc_polling_entity_create_from_pollset(pollset);
|
160
173
|
detector.is_done = 0;
|
161
174
|
detector.success = 0;
|
162
|
-
memset(&detector.response, 0, sizeof(detector.response));
|
163
175
|
memset(&request, 0, sizeof(grpc_httpcli_request));
|
164
176
|
request.host = (char*)GRPC_COMPUTE_ENGINE_DETECTION_HOST;
|
165
177
|
request.http.path = (char*)"/";
|
@@ -259,7 +271,7 @@ end:
|
|
259
271
|
GPR_ASSERT((result == nullptr) + (error == GRPC_ERROR_NONE) == 1);
|
260
272
|
if (creds_path != nullptr) gpr_free(creds_path);
|
261
273
|
grpc_slice_unref_internal(creds_data);
|
262
|
-
|
274
|
+
grpc_json_destroy(json);
|
263
275
|
*creds = result;
|
264
276
|
return error;
|
265
277
|
}
|
@@ -58,6 +58,8 @@ class grpc_google_default_channel_credentials
|
|
58
58
|
const char* target, const grpc_channel_args* args,
|
59
59
|
grpc_channel_args** new_args) override;
|
60
60
|
|
61
|
+
grpc_channel_args* update_arguments(grpc_channel_args* args) override;
|
62
|
+
|
61
63
|
const grpc_channel_credentials* alts_creds() const {
|
62
64
|
return alts_creds_.get();
|
63
65
|
}
|
@@ -121,7 +121,7 @@ grpc_auth_json_key grpc_auth_json_key_create_from_string(
|
|
121
121
|
char* scratchpad = gpr_strdup(json_string);
|
122
122
|
grpc_json* json = grpc_json_parse_string(scratchpad);
|
123
123
|
grpc_auth_json_key result = grpc_auth_json_key_create_from_json(json);
|
124
|
-
|
124
|
+
grpc_json_destroy(json);
|
125
125
|
gpr_free(scratchpad);
|
126
126
|
return result;
|
127
127
|
}
|
@@ -160,7 +160,7 @@ static char* redact_private_key(const char* json_key) {
|
|
160
160
|
|
161
161
|
grpc_call_credentials* grpc_service_account_jwt_access_credentials_create(
|
162
162
|
const char* json_key, gpr_timespec token_lifetime, void* reserved) {
|
163
|
-
if (grpc_api_trace
|
163
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace)) {
|
164
164
|
char* clean_json = redact_private_key(json_key);
|
165
165
|
gpr_log(GPR_INFO,
|
166
166
|
"grpc_service_account_jwt_access_credentials_create("
|
@@ -174,6 +174,7 @@ grpc_call_credentials* grpc_service_account_jwt_access_credentials_create(
|
|
174
174
|
gpr_free(clean_json);
|
175
175
|
}
|
176
176
|
GPR_ASSERT(reserved == nullptr);
|
177
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
177
178
|
grpc_core::ExecCtx exec_ctx;
|
178
179
|
return grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
|
179
180
|
grpc_auth_json_key_create_from_string(json_key), token_lifetime)
|
@@ -134,7 +134,8 @@ static void jose_header_destroy(jose_header* h) {
|
|
134
134
|
}
|
135
135
|
|
136
136
|
/* Takes ownership of json and buffer. */
|
137
|
-
static jose_header* jose_header_from_json(grpc_json* json,
|
137
|
+
static jose_header* jose_header_from_json(grpc_json* json,
|
138
|
+
const grpc_slice& buffer) {
|
138
139
|
grpc_json* cur;
|
139
140
|
jose_header* h = static_cast<jose_header*>(gpr_zalloc(sizeof(jose_header)));
|
140
141
|
h->buffer = buffer;
|
@@ -235,7 +236,8 @@ gpr_timespec grpc_jwt_claims_not_before(const grpc_jwt_claims* claims) {
|
|
235
236
|
}
|
236
237
|
|
237
238
|
/* Takes ownership of json and buffer even in case of failure. */
|
238
|
-
grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json,
|
239
|
+
grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json,
|
240
|
+
const grpc_slice& buffer) {
|
239
241
|
grpc_json* cur;
|
240
242
|
grpc_jwt_claims* claims =
|
241
243
|
static_cast<grpc_jwt_claims*>(gpr_malloc(sizeof(grpc_jwt_claims)));
|
@@ -350,9 +352,10 @@ typedef struct {
|
|
350
352
|
/* Takes ownership of the header, claims and signature. */
|
351
353
|
static verifier_cb_ctx* verifier_cb_ctx_create(
|
352
354
|
grpc_jwt_verifier* verifier, grpc_pollset* pollset, jose_header* header,
|
353
|
-
grpc_jwt_claims* claims, const char* audience, grpc_slice signature,
|
355
|
+
grpc_jwt_claims* claims, const char* audience, const grpc_slice& signature,
|
354
356
|
const char* signed_jwt, size_t signed_jwt_len, void* user_data,
|
355
357
|
grpc_jwt_verification_done_cb cb) {
|
358
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
356
359
|
grpc_core::ExecCtx exec_ctx;
|
357
360
|
verifier_cb_ctx* ctx =
|
358
361
|
static_cast<verifier_cb_ctx*>(gpr_zalloc(sizeof(verifier_cb_ctx)));
|
@@ -601,7 +604,8 @@ static EVP_PKEY* find_verification_key(const grpc_json* json,
|
|
601
604
|
}
|
602
605
|
|
603
606
|
static int verify_jwt_signature(EVP_PKEY* key, const char* alg,
|
604
|
-
grpc_slice signature,
|
607
|
+
const grpc_slice& signature,
|
608
|
+
const grpc_slice& signed_data) {
|
605
609
|
EVP_MD_CTX* md_ctx = EVP_MD_CTX_create();
|
606
610
|
const EVP_MD* md = evp_md_from_alg(alg);
|
607
611
|
int result = 0;
|
@@ -666,7 +670,7 @@ static void on_keys_retrieved(void* user_data, grpc_error* error) {
|
|
666
670
|
}
|
667
671
|
|
668
672
|
end:
|
669
|
-
|
673
|
+
grpc_json_destroy(json);
|
670
674
|
EVP_PKEY_free(verification_key);
|
671
675
|
ctx->user_cb(ctx->user_data, status, claims);
|
672
676
|
verifier_cb_ctx_destroy(ctx);
|
@@ -719,7 +723,7 @@ static void on_openid_config_retrieved(void* user_data, grpc_error* error) {
|
|
719
723
|
return;
|
720
724
|
|
721
725
|
error:
|
722
|
-
|
726
|
+
grpc_json_destroy(json);
|
723
727
|
ctx->user_cb(ctx->user_data, GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR, nullptr);
|
724
728
|
verifier_cb_ctx_destroy(ctx);
|
725
729
|
}
|
@@ -115,7 +115,8 @@ void grpc_jwt_verifier_verify(grpc_jwt_verifier* verifier,
|
|
115
115
|
|
116
116
|
/* --- TESTING ONLY exposed functions. --- */
|
117
117
|
|
118
|
-
grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json,
|
118
|
+
grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json,
|
119
|
+
const grpc_slice& buffer);
|
119
120
|
grpc_jwt_verifier_status grpc_jwt_claims_check(const grpc_jwt_claims* claims,
|
120
121
|
const char* audience);
|
121
122
|
const char* grpc_jwt_issuer_email_domain(const char* issuer);
|
@@ -80,7 +80,7 @@ grpc_auth_refresh_token grpc_auth_refresh_token_create_from_string(
|
|
80
80
|
grpc_json* json = grpc_json_parse_string(scratchpad);
|
81
81
|
grpc_auth_refresh_token result =
|
82
82
|
grpc_auth_refresh_token_create_from_json(json);
|
83
|
-
|
83
|
+
grpc_json_destroy(json);
|
84
84
|
gpr_free(scratchpad);
|
85
85
|
return result;
|
86
86
|
}
|
@@ -199,7 +199,7 @@ end:
|
|
199
199
|
}
|
200
200
|
if (null_terminated_body != nullptr) gpr_free(null_terminated_body);
|
201
201
|
if (new_access_token != nullptr) gpr_free(new_access_token);
|
202
|
-
|
202
|
+
grpc_json_destroy(json);
|
203
203
|
return status;
|
204
204
|
}
|
205
205
|
|
@@ -459,7 +459,7 @@ grpc_call_credentials* grpc_google_refresh_token_credentials_create(
|
|
459
459
|
const char* json_refresh_token, void* reserved) {
|
460
460
|
grpc_auth_refresh_token token =
|
461
461
|
grpc_auth_refresh_token_create_from_string(json_refresh_token);
|
462
|
-
if (grpc_api_trace
|
462
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace)) {
|
463
463
|
char* loggable_token = create_loggable_refresh_token(&token);
|
464
464
|
gpr_log(GPR_INFO,
|
465
465
|
"grpc_refresh_token_credentials_create(json_refresh_token=%s, "
|
@@ -85,7 +85,7 @@ static grpc_error* process_plugin_result(
|
|
85
85
|
grpc_validate_header_key_is_legal(md[i].key))) {
|
86
86
|
seen_illegal_header = true;
|
87
87
|
break;
|
88
|
-
} else if (!
|
88
|
+
} else if (!grpc_is_binary_header_internal(md[i].key) &&
|
89
89
|
!GRPC_LOG_IF_ERROR(
|
90
90
|
"validate_metadata_from_plugin",
|
91
91
|
grpc_validate_header_nonbin_value_is_legal(md[i].value))) {
|
@@ -114,11 +114,12 @@ static void plugin_md_request_metadata_ready(void* request,
|
|
114
114
|
grpc_status_code status,
|
115
115
|
const char* error_details) {
|
116
116
|
/* called from application code */
|
117
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
117
118
|
grpc_core::ExecCtx exec_ctx(GRPC_EXEC_CTX_FLAG_IS_FINISHED |
|
118
119
|
GRPC_EXEC_CTX_FLAG_THREAD_RESOURCE_LOOP);
|
119
120
|
grpc_plugin_credentials::pending_request* r =
|
120
121
|
static_cast<grpc_plugin_credentials::pending_request*>(request);
|
121
|
-
if (grpc_plugin_credentials_trace
|
122
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
|
122
123
|
gpr_log(GPR_INFO,
|
123
124
|
"plugin_credentials[%p]: request %p: plugin returned "
|
124
125
|
"asynchronously",
|
@@ -131,7 +132,7 @@ static void plugin_md_request_metadata_ready(void* request,
|
|
131
132
|
grpc_error* error =
|
132
133
|
process_plugin_result(r, md, num_md, status, error_details);
|
133
134
|
GRPC_CLOSURE_SCHED(r->on_request_metadata, error);
|
134
|
-
} else if (grpc_plugin_credentials_trace
|
135
|
+
} else if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
|
135
136
|
gpr_log(GPR_INFO,
|
136
137
|
"plugin_credentials[%p]: request %p: plugin was previously "
|
137
138
|
"cancelled",
|
@@ -161,7 +162,7 @@ bool grpc_plugin_credentials::get_request_metadata(
|
|
161
162
|
pending_requests_ = request;
|
162
163
|
gpr_mu_unlock(&mu_);
|
163
164
|
// Invoke the plugin. The callback holds a ref to us.
|
164
|
-
if (grpc_plugin_credentials_trace
|
165
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
|
165
166
|
gpr_log(GPR_INFO, "plugin_credentials[%p]: request %p: invoking plugin",
|
166
167
|
this, request);
|
167
168
|
}
|
@@ -173,7 +174,7 @@ bool grpc_plugin_credentials::get_request_metadata(
|
|
173
174
|
if (!plugin_.get_metadata(
|
174
175
|
plugin_.state, context, plugin_md_request_metadata_ready, request,
|
175
176
|
creds_md, &num_creds_md, &status, &error_details)) {
|
176
|
-
if (grpc_plugin_credentials_trace
|
177
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
|
177
178
|
gpr_log(GPR_INFO,
|
178
179
|
"plugin_credentials[%p]: request %p: plugin will return "
|
179
180
|
"asynchronously",
|
@@ -188,7 +189,7 @@ bool grpc_plugin_credentials::get_request_metadata(
|
|
188
189
|
// asynchronously by plugin_cancel_get_request_metadata(), so return
|
189
190
|
// false. Otherwise, process the result.
|
190
191
|
if (request->cancelled) {
|
191
|
-
if (grpc_plugin_credentials_trace
|
192
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
|
192
193
|
gpr_log(GPR_INFO,
|
193
194
|
"plugin_credentials[%p]: request %p was cancelled, error "
|
194
195
|
"will be returned asynchronously",
|
@@ -196,7 +197,7 @@ bool grpc_plugin_credentials::get_request_metadata(
|
|
196
197
|
}
|
197
198
|
retval = false;
|
198
199
|
} else {
|
199
|
-
if (grpc_plugin_credentials_trace
|
200
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
|
200
201
|
gpr_log(GPR_INFO,
|
201
202
|
"plugin_credentials[%p]: request %p: plugin returned "
|
202
203
|
"synchronously",
|
@@ -222,7 +223,7 @@ void grpc_plugin_credentials::cancel_get_request_metadata(
|
|
222
223
|
for (pending_request* pending_request = pending_requests_;
|
223
224
|
pending_request != nullptr; pending_request = pending_request->next) {
|
224
225
|
if (pending_request->md_array == md_array) {
|
225
|
-
if (grpc_plugin_credentials_trace
|
226
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
|
226
227
|
gpr_log(GPR_INFO, "plugin_credentials[%p]: cancelling request %p", this,
|
227
228
|
pending_request);
|
228
229
|
}
|