grpc 1.83.1 → 1.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +21 -17
- data/include/grpc/credentials.h +10 -0
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +9 -0
- data/src/core/call/call_filters.h +4 -2
- data/src/core/call/client_call.cc +20 -8
- data/src/core/call/client_call.h +4 -0
- data/src/core/call/interception_chain.cc +2 -0
- data/src/core/call/interception_chain.h +14 -1
- data/src/core/call/metadata.cc +1 -3
- data/src/core/call/metadata_batch.h +13 -5
- data/src/core/call/server_call.cc +31 -14
- data/src/core/call/server_call.h +4 -0
- data/src/core/channelz/text_encode.cc +9 -4
- data/src/core/channelz/v2tov1/convert.cc +2 -2
- data/src/core/client_channel/backup_poller.cc +1 -2
- data/src/core/client_channel/client_channel.cc +6 -33
- data/src/core/client_channel/client_channel_filter.cc +22 -55
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_service_config.cc +3 -19
- data/src/core/client_channel/direct_channel.cc +7 -1
- data/src/core/client_channel/direct_channel.h +2 -2
- data/src/core/client_channel/load_balanced_call_destination.cc +5 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -12
- data/src/core/client_channel/subchannel.cc +310 -1058
- data/src/core/client_channel/subchannel.h +44 -329
- data/src/core/client_channel/subchannel_metrics.cc +48 -0
- data/src/core/client_channel/subchannel_metrics.h +60 -0
- data/src/core/credentials/call/external/file_external_account_credentials.cc +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -3
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +8 -24
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +3 -6
- data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.cc +525 -0
- data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.h +138 -0
- data/src/core/credentials/call/json_util.h +1 -0
- data/src/core/credentials/call/jwt/json_token.cc +10 -2
- data/src/core/credentials/call/jwt/jwt_verifier.cc +15 -1
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +1 -1
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +42 -79
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +2 -5
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +52 -31
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +21 -8
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +59 -72
- data/src/core/credentials/transport/ssl/ssl_credentials.h +9 -8
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +12 -6
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -4
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -18
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +9 -6
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +45 -56
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -4
- data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +26 -0
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +1 -1
- data/src/core/credentials/transport/tls/load_system_roots.h +2 -6
- data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +2 -4
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +13 -15
- data/src/core/credentials/transport/tls/load_system_roots_supported.h +3 -2
- data/src/core/credentials/transport/tls/load_system_roots_windows.cc +5 -8
- data/src/core/credentials/transport/tls/spiffe_utils.cc +1 -1
- data/src/core/credentials/transport/tls/ssl_utils.cc +39 -28
- data/src/core/credentials/transport/tls/ssl_utils.h +12 -49
- data/src/core/credentials/transport/tls/tls_security_connector.cc +48 -33
- data/src/core/credentials/transport/tls/tls_security_connector.h +31 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +15 -11
- data/src/core/ext/filters/http/http_filters_plugin.cc +20 -9
- data/src/core/ext/filters/rbac/rbac_filter.cc +43 -21
- data/src/core/ext/filters/rbac/rbac_filter.h +21 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +32 -67
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/goaway.h +7 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +5 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +141 -130
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +22 -22
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +402 -269
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +80 -49
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +1 -2
- data/src/core/ext/transport/chttp2/transport/http2_status.h +38 -37
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +178 -5
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +345 -5
- data/src/core/ext/transport/chttp2/transport/parsing.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +25 -5
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/read_context.h +30 -3
- data/src/core/ext/transport/chttp2/transport/stream.h +65 -23
- data/src/core/ext/transport/chttp2/transport/writing.cc +0 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -5
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +4 -17
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb.h +1912 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.c +300 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.h +37 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb.h +187 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.c +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.h +31 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb.h +2362 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.c +556 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.h +47 -0
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.h +5 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.c +453 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.h +67 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.h +37 -0
- data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +715 -0
- data/src/core/ext/upbdefs-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upbdefs.h +44 -44
- data/src/core/filter/auth/server_auth_filter.cc +2 -3
- data/src/core/filter/composite/composite_filter.cc +45 -33
- data/src/core/filter/composite/composite_filter.h +5 -4
- data/src/core/filter/ext_proc/ext_proc_filter.cc +224 -0
- data/src/core/filter/ext_proc/ext_proc_filter.h +155 -0
- data/src/core/filter/ext_proc/ext_proc_messages.cc +701 -0
- data/src/core/filter/ext_proc/ext_proc_messages.h +297 -0
- data/src/core/filter/filter_args.h +13 -2
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -3
- data/src/core/handshaker/security/security_handshaker.cc +9 -6
- data/src/core/lib/channel/channel_stack.cc +3 -0
- data/src/core/lib/channel/channel_stack.h +2 -0
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -2
- data/src/core/lib/channel/promise_based_filter.cc +132 -20
- data/src/core/lib/channel/promise_based_filter.h +42 -12
- data/src/core/lib/compression/compression_internal.cc +4 -5
- data/src/core/lib/debug/trace_flags.cc +8 -0
- data/src/core/lib/debug/trace_flags.h +3 -0
- data/src/core/lib/event_engine/ares_resolver.cc +54 -50
- data/src/core/lib/event_engine/ares_resolver.h +3 -2
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -10
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +74 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +1 -3
- data/src/core/lib/experiments/experiments.cc +60 -96
- data/src/core/lib/experiments/experiments.h +34 -50
- data/src/core/lib/iomgr/cfstream_handle.cc +2 -6
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -10
- data/src/core/lib/iomgr/error.cc +2 -6
- data/src/core/lib/iomgr/error_cfstream.cc +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +5 -9
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -1
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -2
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
- data/src/core/lib/iomgr/iomgr_posix.cc +0 -4
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -4
- data/src/core/lib/iomgr/iomgr_windows.cc +0 -4
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/systemd_utils.cc +0 -1
- data/src/core/lib/iomgr/tcp_client.h +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +23 -15
- data/src/core/lib/iomgr/tcp_server.h +1 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_windows.cc +5 -10
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/vsock.h +3 -1
- data/src/core/lib/resource_quota/memory_quota.cc +1 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +139 -56
- data/src/core/lib/security/authorization/rbac_policy.h +21 -3
- data/src/core/lib/surface/call.cc +3 -9
- data/src/core/lib/surface/call_utils.h +113 -0
- data/src/core/lib/surface/channel_create.cc +1 -1
- data/src/core/lib/surface/channel_create.h +0 -2
- data/src/core/lib/surface/channel_init.cc +77 -38
- data/src/core/lib/surface/channel_init.h +30 -16
- data/src/core/lib/surface/filter_stack_call.cc +5 -10
- data/src/core/lib/surface/init.cc +13 -27
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +0 -27
- data/src/core/lib/transport/error_utils.h +0 -16
- data/src/core/lib/transport/transport.h +7 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +2 -0
- data/src/core/load_balancing/rls/rls.cc +28 -11
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -42
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +0 -2
- data/src/core/load_balancing/xds/cds.cc +3 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +0 -1
- data/src/core/mitigation_engine/mitigation.h +14 -5
- data/src/core/mitigation_engine/mitigation_engine.h +7 -3
- data/src/core/mitigation_engine/mitigation_provider.h +2 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +39 -8
- data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc} +42 -41
- data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h} +8 -5
- data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc} +1 -1
- data/src/core/resolver/dns/{event_engine/service_config_helper.h → service_config_helper.h} +3 -3
- data/src/core/resolver/endpoint_addresses.h +3 -0
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +35 -9
- data/src/core/server/server.cc +2 -6
- data/src/core/server/server_config_selector.h +18 -3
- data/src/core/server/server_config_selector_filter.cc +178 -91
- data/src/core/server/server_config_selector_filter.h +58 -3
- data/src/core/server/xds_server_config_fetcher.cc +196 -129
- data/src/core/server/xds_server_config_fetcher.h +49 -0
- data/src/core/server/xds_server_config_fetcher_legacy.cc +41 -37
- data/src/core/telemetry/histogram.h +94 -14
- data/src/core/telemetry/instrument.cc +179 -74
- data/src/core/telemetry/instrument.h +78 -30
- data/src/core/telemetry/metrics.h +5 -0
- data/src/core/{resolver/dns/dns_resolver_plugin.h → telemetry/telemetry_label.h} +12 -8
- data/src/core/tsi/alts/crypt/aes_gcm.cc +10 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -1
- data/src/core/tsi/ssl_telemetry_utils.cc +216 -259
- data/src/core/tsi/ssl_telemetry_utils.h +12 -2
- data/src/core/tsi/ssl_transport_security.cc +238 -80
- data/src/core/tsi/ssl_transport_security.h +63 -33
- data/src/core/tsi/tls_telemetry.cc +31 -0
- data/src/core/tsi/tls_telemetry.h +47 -0
- data/src/core/tsi/transport_security.cc +2 -2
- data/src/core/tsi/transport_security.h +1 -1
- data/src/core/tsi/transport_security_interface.h +1 -1
- data/src/core/{resolver/dns/native/dns_resolver.h → util/address_sorting_init.cc} +21 -8
- data/src/core/{resolver/dns/c_ares/grpc_ares_wrapper_posix.cc → util/address_sorting_init.h} +7 -8
- data/src/core/util/http_client/httpcli.cc +16 -53
- data/src/core/util/http_client/httpcli.h +0 -7
- data/src/core/util/http_client/httpcli_security_connector.cc +13 -8
- data/src/core/util/linux/cpu.cc +1 -1
- data/src/core/util/load_file.cc +3 -9
- data/src/core/util/load_file.h +3 -4
- data/src/core/util/matchers.h +8 -0
- data/src/core/util/posix/cpu.cc +1 -1
- data/src/core/util/status_helper.cc +0 -20
- data/src/core/util/status_helper.h +3 -14
- data/src/core/xds/grpc/xds_audit_logger_registry.cc +51 -31
- data/src/core/xds/grpc/xds_audit_logger_registry.h +17 -3
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -10
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -6
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +488 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.h +97 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +7 -7
- data/src/core/xds/grpc/xds_client_grpc.cc +4 -8
- data/src/core/xds/grpc/xds_client_grpc.h +0 -4
- data/src/core/xds/grpc/xds_cluster.h +1 -0
- data/src/core/xds/grpc/xds_cluster_parser.cc +1 -5
- data/src/core/xds/grpc/xds_cluster_parser.h +0 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +0 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +0 -2
- data/src/core/xds/grpc/xds_common_types.cc +0 -91
- data/src/core/xds/grpc/xds_common_types.h +1 -47
- data/src/core/xds/grpc/xds_common_types_parser.cc +84 -378
- data/src/core/xds/grpc/xds_common_types_parser.h +9 -11
- data/src/core/xds/grpc/xds_endpoint_parser.cc +0 -2
- data/src/core/xds/grpc/xds_grpc_service_parser.cc +177 -0
- data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → xds/grpc/xds_grpc_service_parser.h} +14 -9
- data/src/core/xds/grpc/xds_http_composite_filter.cc +26 -21
- data/src/core/xds/grpc/xds_http_composite_filter.h +4 -3
- data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +418 -0
- data/src/core/xds/grpc/xds_http_ext_proc_filter.h +89 -0
- data/src/core/xds/grpc/xds_http_fault_filter.cc +9 -12
- data/src/core/xds/grpc/xds_http_fault_filter.h +1 -4
- data/src/core/xds/grpc/xds_http_filter.cc +2 -1
- data/src/core/xds/grpc/xds_http_filter.h +6 -5
- data/src/core/xds/grpc/xds_http_filter_registry.cc +10 -127
- data/src/core/xds/grpc/xds_http_filter_registry.h +7 -59
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +13 -14
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +403 -25
- data/src/core/xds/grpc/xds_http_rbac_filter.h +1 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +8 -13
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +1 -4
- data/src/core/xds/grpc/xds_lb_policy_registry.cc +0 -292
- data/src/core/xds/grpc/xds_lb_policy_registry.h +7 -3
- data/src/core/xds/grpc/xds_listener.cc +2 -0
- data/src/core/xds/grpc/xds_listener.h +5 -0
- data/src/core/xds/grpc/xds_listener_parser.cc +16 -11
- data/src/core/xds/grpc/xds_matcher_parse.h +3 -1
- data/src/core/xds/grpc/xds_metadata_parser.cc +6 -1
- data/src/core/xds/grpc/xds_metadata_parser.h +2 -0
- data/src/core/xds/grpc/xds_route_config.cc +2 -0
- data/src/core/xds/grpc/xds_route_config.h +3 -1
- data/src/core/xds/grpc/xds_route_config_parser.cc +13 -79
- data/src/core/xds/grpc/xds_route_config_parser.h +0 -3
- data/src/core/xds/grpc/xds_routing.cc +116 -69
- data/src/core/xds/grpc/xds_routing.h +19 -8
- data/src/core/xds/grpc/xds_tls_context.cc +117 -0
- data/src/core/xds/grpc/xds_tls_context.h +76 -0
- data/src/core/xds/grpc/xds_tls_context_parser.cc +275 -0
- data/src/core/xds/grpc/xds_tls_context_parser.h +35 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +41 -38
- data/src/core/xds/grpc/xds_transport_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_call.c +26 -15
- data/src/ruby/ext/grpc/rb_completion_queue.c +6 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +5 -4
- data/src/ruby/spec/call_spec.rb +14 -0
- data/src/ruby/spec/generic/server_interceptors_spec.rb +3 -6
- metadata +50 -35
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +0 -716
- data/src/core/lib/iomgr/resolve_address.cc +0 -59
- data/src/core/lib/iomgr/resolve_address.h +0 -125
- data/src/core/lib/iomgr/resolve_address_impl.h +0 -58
- data/src/core/lib/iomgr/resolve_address_posix.cc +0 -184
- data/src/core/lib/iomgr/resolve_address_posix.h +0 -78
- data/src/core/lib/iomgr/resolve_address_windows.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_windows.h +0 -76
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +0 -781
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +0 -93
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +0 -203
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -838
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1237
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +0 -130
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +0 -35
- data/src/core/resolver/dns/dns_resolver_plugin.cc +0 -64
- data/src/core/resolver/dns/native/dns_resolver.cc +0 -173
- data/src/core/util/json/json_util.cc +0 -101
- data/src/core/util/json/json_util.h +0 -163
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2018 gRPC authors.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
//
|
|
16
|
+
|
|
17
|
+
#include "src/core/xds/grpc/xds_grpc_service_parser.h"
|
|
18
|
+
|
|
19
|
+
#include <memory>
|
|
20
|
+
#include <string>
|
|
21
|
+
#include <utility>
|
|
22
|
+
#include <variant>
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
#include "src/core/config/core_configuration.h"
|
|
26
|
+
#include "src/core/util/down_cast.h"
|
|
27
|
+
#include "src/core/util/upb_utils.h"
|
|
28
|
+
#include "src/core/util/validation_errors.h"
|
|
29
|
+
#include "src/core/xds/grpc/xds_bootstrap_grpc.h"
|
|
30
|
+
#include "src/core/xds/grpc/xds_common_types.h"
|
|
31
|
+
#include "src/core/xds/grpc/xds_common_types_parser.h"
|
|
32
|
+
#include "src/core/xds/xds_client/xds_client.h"
|
|
33
|
+
#include "absl/strings/str_cat.h"
|
|
34
|
+
#include "absl/strings/string_view.h"
|
|
35
|
+
|
|
36
|
+
namespace grpc_core {
|
|
37
|
+
|
|
38
|
+
GrpcXdsServerTarget ParseXdsGrpcService(
|
|
39
|
+
const XdsResourceType::DecodeContext& context,
|
|
40
|
+
const envoy_config_core_v3_GrpcService* grpc_service,
|
|
41
|
+
ValidationErrors* errors) {
|
|
42
|
+
if (grpc_service == nullptr) {
|
|
43
|
+
errors->AddError("field not set");
|
|
44
|
+
return GrpcXdsServerTarget(/*server_uri=*/"",
|
|
45
|
+
/*channel_creds_config=*/nullptr,
|
|
46
|
+
/*call_creds_configs=*/{});
|
|
47
|
+
}
|
|
48
|
+
// timeout
|
|
49
|
+
Duration timeout = Duration::Zero();
|
|
50
|
+
if (auto* timeout_proto =
|
|
51
|
+
envoy_config_core_v3_GrpcService_timeout(grpc_service);
|
|
52
|
+
timeout_proto != nullptr) {
|
|
53
|
+
ValidationErrors::ScopedField field(errors, ".timeout");
|
|
54
|
+
timeout = ParseDuration(timeout_proto, errors);
|
|
55
|
+
if (timeout <= Duration::Zero()) {
|
|
56
|
+
errors->AddError("duration must be positive");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// initial_metadata
|
|
60
|
+
std::vector<std::pair<std::string, std::string>> initial_metadata;
|
|
61
|
+
size_t initial_metadata_size;
|
|
62
|
+
auto* initial_metadata_proto =
|
|
63
|
+
envoy_config_core_v3_GrpcService_initial_metadata(grpc_service,
|
|
64
|
+
&initial_metadata_size);
|
|
65
|
+
for (size_t i = 0; i < initial_metadata_size; ++i) {
|
|
66
|
+
ValidationErrors::ScopedField field(
|
|
67
|
+
errors, absl::StrCat(".initial_metadata[", i, "]"));
|
|
68
|
+
initial_metadata.push_back(
|
|
69
|
+
ParseXdsHeader(initial_metadata_proto[i], errors));
|
|
70
|
+
}
|
|
71
|
+
// google_grpc
|
|
72
|
+
ValidationErrors::ScopedField field(errors, ".google_grpc");
|
|
73
|
+
auto* google_grpc =
|
|
74
|
+
envoy_config_core_v3_GrpcService_google_grpc(grpc_service);
|
|
75
|
+
if (google_grpc == nullptr) {
|
|
76
|
+
errors->AddError("field not set");
|
|
77
|
+
return GrpcXdsServerTarget(/*server_uri=*/"",
|
|
78
|
+
/*channel_creds_config=*/nullptr,
|
|
79
|
+
/*call_creds_configs=*/{});
|
|
80
|
+
}
|
|
81
|
+
// target_uri
|
|
82
|
+
std::string target_uri = UpbStringToStdString(
|
|
83
|
+
envoy_config_core_v3_GrpcService_GoogleGrpc_target_uri(google_grpc));
|
|
84
|
+
if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(target_uri)) {
|
|
85
|
+
ValidationErrors::ScopedField field(errors, ".target_uri");
|
|
86
|
+
errors->AddError("invalid target URI");
|
|
87
|
+
}
|
|
88
|
+
// credentials
|
|
89
|
+
RefCountedPtr<const ChannelCredsConfig> channel_creds_config;
|
|
90
|
+
std::vector<RefCountedPtr<const CallCredsConfig>> call_creds_configs;
|
|
91
|
+
if (DownCast<const GrpcXdsServer&>(context.server).TrustedXdsServer()) {
|
|
92
|
+
// Trusted xDS server. Use credentials from the GoogleGrpc proto.
|
|
93
|
+
// First, look at channel creds.
|
|
94
|
+
{
|
|
95
|
+
ValidationErrors::ScopedField field(errors,
|
|
96
|
+
".channel_credentials_plugin");
|
|
97
|
+
size_t size;
|
|
98
|
+
const auto* const* channel_creds_plugin =
|
|
99
|
+
envoy_config_core_v3_GrpcService_GoogleGrpc_channel_credentials_plugin(
|
|
100
|
+
google_grpc, &size);
|
|
101
|
+
if (size == 0) {
|
|
102
|
+
errors->AddError("field not set");
|
|
103
|
+
} else {
|
|
104
|
+
const auto& registry =
|
|
105
|
+
CoreConfiguration::Get().channel_creds_registry();
|
|
106
|
+
const auto& certificate_providers =
|
|
107
|
+
DownCast<const GrpcXdsBootstrap&>(context.client->bootstrap())
|
|
108
|
+
.certificate_providers();
|
|
109
|
+
for (size_t i = 0; i < size; ++i) {
|
|
110
|
+
ValidationErrors::ScopedField field(errors,
|
|
111
|
+
absl::StrCat("[", i, "]"));
|
|
112
|
+
auto extension =
|
|
113
|
+
ExtractXdsExtension(context, channel_creds_plugin[i], errors);
|
|
114
|
+
if (!extension.has_value()) continue;
|
|
115
|
+
if (!registry.IsProtoSupported(extension->type)) continue;
|
|
116
|
+
absl::string_view* serialized_config =
|
|
117
|
+
std::get_if<absl::string_view>(&extension->value);
|
|
118
|
+
if (serialized_config == nullptr) {
|
|
119
|
+
errors->AddError("can't decode config");
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
channel_creds_config =
|
|
123
|
+
registry.ParseProto(extension->type, *serialized_config,
|
|
124
|
+
certificate_providers, errors);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
if (channel_creds_config == nullptr) {
|
|
128
|
+
errors->AddError("no supported channel credentials type found");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Now look at call creds.
|
|
133
|
+
{
|
|
134
|
+
ValidationErrors::ScopedField field(errors, ".call_credentials_plugin");
|
|
135
|
+
size_t size;
|
|
136
|
+
const auto* const* call_creds_plugin =
|
|
137
|
+
envoy_config_core_v3_GrpcService_GoogleGrpc_call_credentials_plugin(
|
|
138
|
+
google_grpc, &size);
|
|
139
|
+
const auto& registry = CoreConfiguration::Get().call_creds_registry();
|
|
140
|
+
for (size_t i = 0; i < size; ++i) {
|
|
141
|
+
ValidationErrors::ScopedField field(errors, absl::StrCat("[", i, "]"));
|
|
142
|
+
auto extension =
|
|
143
|
+
ExtractXdsExtension(context, call_creds_plugin[i], errors);
|
|
144
|
+
if (!extension.has_value()) continue;
|
|
145
|
+
if (!registry.IsProtoSupported(extension->type)) continue;
|
|
146
|
+
absl::string_view* serialized_config =
|
|
147
|
+
std::get_if<absl::string_view>(&extension->value);
|
|
148
|
+
if (serialized_config == nullptr) {
|
|
149
|
+
errors->AddError("can't decode config");
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
call_creds_configs.push_back(
|
|
153
|
+
registry.ParseProto(extension->type, *serialized_config, errors));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} else {
|
|
157
|
+
// Not a trusted xDS server. Do lookup in bootstrap.
|
|
158
|
+
const auto& bootstrap =
|
|
159
|
+
DownCast<const GrpcXdsBootstrap&>(context.client->bootstrap());
|
|
160
|
+
auto& allowed_grpc_services = bootstrap.allowed_grpc_services();
|
|
161
|
+
auto it = allowed_grpc_services.find(target_uri);
|
|
162
|
+
if (it == allowed_grpc_services.end()) {
|
|
163
|
+
ValidationErrors::ScopedField field(errors, ".target_uri");
|
|
164
|
+
errors->AddError(
|
|
165
|
+
"service not present in \"allowed_grpc_services\" "
|
|
166
|
+
"in bootstrap config");
|
|
167
|
+
} else {
|
|
168
|
+
channel_creds_config = it->second.channel_creds_config;
|
|
169
|
+
call_creds_configs = it->second.call_creds_configs;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return GrpcXdsServerTarget(target_uri, std::move(channel_creds_config),
|
|
173
|
+
std::move(call_creds_configs),
|
|
174
|
+
std::move(initial_metadata), timeout);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
} // namespace grpc_core
|
data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → xds/grpc/xds_grpc_service_parser.h}
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
//
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2018 gRPC authors.
|
|
2
3
|
//
|
|
3
4
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
5
|
// you may not use this file except in compliance with the License.
|
|
@@ -11,19 +12,23 @@
|
|
|
11
12
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
13
|
// See the License for the specific language governing permissions and
|
|
13
14
|
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#define GRPC_SRC_CORE_RESOLVER_DNS_C_ARES_DNS_RESOLVER_ARES_H
|
|
15
|
+
//
|
|
16
16
|
|
|
17
|
-
#
|
|
17
|
+
#ifndef GRPC_SRC_CORE_XDS_GRPC_XDS_GRPC_SERVICE_PARSER_H
|
|
18
|
+
#define GRPC_SRC_CORE_XDS_GRPC_XDS_GRPC_SERVICE_PARSER_H
|
|
18
19
|
|
|
19
|
-
#include "
|
|
20
|
-
#include "
|
|
20
|
+
#include "envoy/config/core/v3/grpc_service.upb.h"
|
|
21
|
+
#include "src/core/util/validation_errors.h"
|
|
22
|
+
#include "src/core/xds/grpc/xds_server_grpc.h"
|
|
23
|
+
#include "src/core/xds/xds_client/xds_resource_type.h"
|
|
21
24
|
|
|
22
25
|
namespace grpc_core {
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
GrpcXdsServerTarget ParseXdsGrpcService(
|
|
28
|
+
const XdsResourceType::DecodeContext& context,
|
|
29
|
+
const envoy_config_core_v3_GrpcService* grpc_service,
|
|
30
|
+
ValidationErrors* errors);
|
|
26
31
|
|
|
27
32
|
} // namespace grpc_core
|
|
28
33
|
|
|
29
|
-
#endif //
|
|
34
|
+
#endif // GRPC_SRC_CORE_XDS_GRPC_XDS_GRPC_SERVICE_PARSER_H
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
#include "src/core/filter/composite/composite_filter.h"
|
|
27
27
|
#include "src/core/util/validation_errors.h"
|
|
28
28
|
#include "src/core/xds/grpc/xds_bootstrap_grpc.h"
|
|
29
|
+
#include "src/core/xds/grpc/xds_common_types_parser.h"
|
|
29
30
|
#include "src/core/xds/grpc/xds_http_filter.h"
|
|
30
31
|
#include "src/core/xds/grpc/xds_http_filter_registry.h"
|
|
31
32
|
#include "src/core/xds/grpc/xds_matcher.h"
|
|
@@ -37,15 +38,16 @@
|
|
|
37
38
|
|
|
38
39
|
namespace grpc_core {
|
|
39
40
|
|
|
40
|
-
absl::string_view
|
|
41
|
+
absl::string_view XdsHttpCompositeFilterFactory::ConfigProtoName() const {
|
|
41
42
|
return "envoy.extensions.common.matching.v3.ExtensionWithMatcher";
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
absl::string_view
|
|
45
|
+
absl::string_view XdsHttpCompositeFilterFactory::OverrideConfigProtoName()
|
|
46
|
+
const {
|
|
45
47
|
return "envoy.extensions.common.matching.v3.ExtensionWithMatcherPerRoute";
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
void
|
|
50
|
+
void XdsHttpCompositeFilterFactory::PopulateSymtab(upb_DefPool* symtab) const {
|
|
49
51
|
envoy_extensions_common_matching_v3_ExtensionWithMatcher_getmsgdef(symtab);
|
|
50
52
|
envoy_extensions_common_matching_v3_ExtensionWithMatcherPerRoute_getmsgdef(
|
|
51
53
|
symtab);
|
|
@@ -56,13 +58,14 @@ void XdsHttpCompositeFilter::PopulateSymtab(upb_DefPool* symtab) const {
|
|
|
56
58
|
symtab);
|
|
57
59
|
}
|
|
58
60
|
|
|
59
|
-
void
|
|
61
|
+
void XdsHttpCompositeFilterFactory::AddFilter(
|
|
60
62
|
FilterChainBuilder& builder,
|
|
61
63
|
RefCountedPtr<const FilterConfig> config) const {
|
|
62
64
|
builder.AddFilter<CompositeFilter>(std::move(config));
|
|
63
65
|
}
|
|
64
66
|
|
|
65
|
-
const grpc_channel_filter*
|
|
67
|
+
const grpc_channel_filter* XdsHttpCompositeFilterFactory::channel_filter()
|
|
68
|
+
const {
|
|
66
69
|
return &CompositeFilter::kFilterVtable;
|
|
67
70
|
}
|
|
68
71
|
|
|
@@ -167,22 +170,21 @@ class ExecuteFilterActionFactory final : public XdsMatcherActionFactory {
|
|
|
167
170
|
envoy_config_core_v3_TypedExtensionConfig_typed_config(typed_config);
|
|
168
171
|
ValidationErrors::ScopedField field(errors, ".typed_config.typed_config");
|
|
169
172
|
auto extension = ExtractXdsExtension(context, any, errors);
|
|
170
|
-
const
|
|
173
|
+
const XdsHttpFilterFactory* factory = nullptr;
|
|
171
174
|
RefCountedPtr<const FilterConfig> config;
|
|
172
175
|
if (extension.has_value()) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (filter_impl == nullptr) {
|
|
176
|
+
factory = http_filter_registry.GetFilterForTopLevelType(extension->type);
|
|
177
|
+
if (factory == nullptr) {
|
|
176
178
|
errors->AddError("unsupported filter type");
|
|
177
|
-
} else if (
|
|
179
|
+
} else if (factory->IsTerminalFilter()) {
|
|
178
180
|
errors->AddError(
|
|
179
181
|
"terminal filters may not be used under composite filter");
|
|
180
182
|
} else {
|
|
181
183
|
config =
|
|
182
|
-
|
|
184
|
+
factory->ParseTopLevelConfig(name, context, *extension, errors);
|
|
183
185
|
}
|
|
184
186
|
}
|
|
185
|
-
return {
|
|
187
|
+
return {factory, std::move(config)};
|
|
186
188
|
}
|
|
187
189
|
};
|
|
188
190
|
|
|
@@ -200,7 +202,8 @@ std::unique_ptr<XdsMatcher> ParseMatcher(
|
|
|
200
202
|
|
|
201
203
|
} // namespace
|
|
202
204
|
|
|
203
|
-
RefCountedPtr<const FilterConfig>
|
|
205
|
+
RefCountedPtr<const FilterConfig>
|
|
206
|
+
XdsHttpCompositeFilterFactory::ParseTopLevelConfig(
|
|
204
207
|
absl::string_view /*instance_name*/,
|
|
205
208
|
const XdsResourceType::DecodeContext& context,
|
|
206
209
|
const XdsExtension& extension, ValidationErrors* errors) const {
|
|
@@ -251,7 +254,8 @@ RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::ParseTopLevelConfig(
|
|
|
251
254
|
return config;
|
|
252
255
|
}
|
|
253
256
|
|
|
254
|
-
RefCountedPtr<const FilterConfig>
|
|
257
|
+
RefCountedPtr<const FilterConfig>
|
|
258
|
+
XdsHttpCompositeFilterFactory::ParseOverrideConfig(
|
|
255
259
|
absl::string_view /*instance_name*/,
|
|
256
260
|
const XdsResourceType::DecodeContext& context,
|
|
257
261
|
const XdsExtension& extension, ValidationErrors* errors) const {
|
|
@@ -279,17 +283,17 @@ RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::ParseOverrideConfig(
|
|
|
279
283
|
return config;
|
|
280
284
|
}
|
|
281
285
|
|
|
282
|
-
RefCountedPtr<const FilterConfig>
|
|
286
|
+
RefCountedPtr<const FilterConfig> XdsHttpCompositeFilterFactory::MergeConfigs(
|
|
283
287
|
RefCountedPtr<const FilterConfig> top_level_config,
|
|
284
288
|
RefCountedPtr<const FilterConfig> virtual_host_override_config,
|
|
285
289
|
RefCountedPtr<const FilterConfig> route_override_config,
|
|
286
290
|
RefCountedPtr<const FilterConfig> cluster_weight_override_config,
|
|
287
|
-
Blackboard& blackboard) const {
|
|
291
|
+
XdsTransportFactory& transport_factory, Blackboard& blackboard) const {
|
|
288
292
|
// Get the config to use via our base class.
|
|
289
|
-
auto config_to_use =
|
|
293
|
+
auto config_to_use = XdsHttpFilterFactory::MergeConfigs(
|
|
290
294
|
std::move(top_level_config), std::move(virtual_host_override_config),
|
|
291
295
|
std::move(route_override_config),
|
|
292
|
-
std::move(cluster_weight_override_config), blackboard);
|
|
296
|
+
std::move(cluster_weight_override_config), transport_factory, blackboard);
|
|
293
297
|
auto& composite_config =
|
|
294
298
|
DownCast<const CompositeFilter::Config&>(*config_to_use);
|
|
295
299
|
if (composite_config.matcher == nullptr) return config_to_use;
|
|
@@ -304,12 +308,13 @@ RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::MergeConfigs(
|
|
|
304
308
|
DownCast<const CompositeFilter::ExecuteFilterAction&>(action);
|
|
305
309
|
auto& merged_configs = new_config->merged_config_map[&action];
|
|
306
310
|
GRPC_CHECK(merged_configs.empty());
|
|
307
|
-
for (const auto& [
|
|
311
|
+
for (const auto& [factory, filter_config] :
|
|
308
312
|
execute_filter_action.filter_chain()) {
|
|
309
|
-
merged_configs.push_back(
|
|
313
|
+
merged_configs.push_back(factory->MergeConfigs(
|
|
310
314
|
filter_config, /*virtual_host_override_config=*/nullptr,
|
|
311
315
|
/*route_override_config=*/nullptr,
|
|
312
|
-
/*cluster_weight_override_config=*/nullptr,
|
|
316
|
+
/*cluster_weight_override_config=*/nullptr, transport_factory,
|
|
317
|
+
blackboard));
|
|
313
318
|
}
|
|
314
319
|
});
|
|
315
320
|
return new_config;
|
|
@@ -19,19 +19,19 @@
|
|
|
19
19
|
|
|
20
20
|
#include <optional>
|
|
21
21
|
|
|
22
|
-
#include "src/core/lib/channel/channel_args.h"
|
|
23
22
|
#include "src/core/lib/channel/channel_fwd.h"
|
|
24
23
|
#include "src/core/util/validation_errors.h"
|
|
25
24
|
#include "src/core/xds/grpc/xds_common_types.h"
|
|
26
25
|
#include "src/core/xds/grpc/xds_http_filter.h"
|
|
27
26
|
#include "src/core/xds/xds_client/xds_resource_type.h"
|
|
27
|
+
#include "src/core/xds/xds_client/xds_transport.h"
|
|
28
28
|
#include "upb/reflection/def.h"
|
|
29
29
|
#include "absl/status/statusor.h"
|
|
30
30
|
#include "absl/strings/string_view.h"
|
|
31
31
|
|
|
32
32
|
namespace grpc_core {
|
|
33
33
|
|
|
34
|
-
class
|
|
34
|
+
class XdsHttpCompositeFilterFactory final : public XdsHttpFilterFactory {
|
|
35
35
|
public:
|
|
36
36
|
absl::string_view ConfigProtoName() const override;
|
|
37
37
|
absl::string_view OverrideConfigProtoName() const override;
|
|
@@ -77,9 +77,10 @@ class XdsHttpCompositeFilter final : public XdsHttpFilterImpl {
|
|
|
77
77
|
RefCountedPtr<const FilterConfig> virtual_host_override_config,
|
|
78
78
|
RefCountedPtr<const FilterConfig> route_override_config,
|
|
79
79
|
RefCountedPtr<const FilterConfig> cluster_weight_override_config,
|
|
80
|
+
XdsTransportFactory& transport_factory,
|
|
80
81
|
Blackboard& blackboard) const override;
|
|
81
82
|
bool IsSupportedOnClients() const override { return true; }
|
|
82
|
-
bool IsSupportedOnServers() const override { return
|
|
83
|
+
bool IsSupportedOnServers() const override { return true; }
|
|
83
84
|
};
|
|
84
85
|
|
|
85
86
|
} // namespace grpc_core
|