grpc 1.83.0 → 1.84.0.pre1
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/http/message_compress/compression_filter.cc +25 -32
- data/src/core/ext/filters/http/message_compress/compression_filter.h +0 -1
- 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 +80 -70
- 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 +33 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +55 -23
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
- 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/internal.h +6 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +13 -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/compression/message_compress.cc +132 -97
- data/src/core/lib/compression/message_compress.h +24 -0
- 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 +81 -102
- data/src/core/lib/experiments/experiments.h +57 -56
- 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/legacy_channel.cc +3 -1
- 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
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
#include <vector>
|
|
35
35
|
|
|
36
36
|
#include "src/core/credentials/transport/security_connector.h"
|
|
37
|
+
#include "src/core/credentials/transport/tls/grpc_tls_certificate_selector.h"
|
|
37
38
|
#include "src/core/credentials/transport/tls/spiffe_utils.h"
|
|
38
39
|
#include "src/core/lib/iomgr/error.h"
|
|
39
40
|
#include "src/core/tsi/ssl/key_logging/ssl_key_logging.h"
|
|
@@ -88,7 +89,7 @@ const char** ParseAlpnStringIntoArray(absl::string_view preferred_protocols,
|
|
|
88
89
|
|
|
89
90
|
// Initialize TSI SSL server/client handshaker factory.
|
|
90
91
|
grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
|
|
91
|
-
|
|
92
|
+
const grpc_core::PemKeyCertPair* key_cert_pair,
|
|
92
93
|
std::shared_ptr<tsi::RootCertInfo> root_cert_info,
|
|
93
94
|
bool skip_server_certificate_verification, tsi_tls_version min_tls_version,
|
|
94
95
|
tsi_tls_version max_tls_version, tsi_ssl_session_cache* ssl_session_cache,
|
|
@@ -99,7 +100,7 @@ grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
|
|
|
99
100
|
tsi_ssl_client_handshaker_factory** handshaker_factory);
|
|
100
101
|
|
|
101
102
|
grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
|
|
102
|
-
|
|
103
|
+
grpc_core::KeyCertPairsOrSelector key_cert_pairs,
|
|
103
104
|
std::shared_ptr<tsi::RootCertInfo> root_cert_info,
|
|
104
105
|
grpc_ssl_client_certificate_request_type client_certificate_request,
|
|
105
106
|
tsi_tls_version min_tls_version, tsi_tls_version max_tls_version,
|
|
@@ -120,8 +121,6 @@ int grpc_ssl_host_matches_name(const tsi_peer* peer,
|
|
|
120
121
|
|
|
121
122
|
// --- Default SSL Root Store. ---
|
|
122
123
|
namespace grpc_core {
|
|
123
|
-
using tsi::PrivateKey;
|
|
124
|
-
|
|
125
124
|
bool IsPrivateKeyEmpty(const PrivateKey& private_key);
|
|
126
125
|
|
|
127
126
|
// The class implements default SSL root store.
|
|
@@ -131,12 +130,11 @@ class DefaultSslRootStore {
|
|
|
131
130
|
static const tsi_ssl_root_certs_store* GetRootStore();
|
|
132
131
|
|
|
133
132
|
// Gets the default PEM root certificate.
|
|
134
|
-
static
|
|
133
|
+
static absl::string_view GetPemRootCerts();
|
|
135
134
|
|
|
136
|
-
|
|
137
|
-
//
|
|
138
|
-
|
|
139
|
-
static grpc_slice ComputePemRootCerts();
|
|
135
|
+
// Returns default PEM root certificates.
|
|
136
|
+
// DO NOT USE -- exposed for testing purposes only.
|
|
137
|
+
static Slice ComputePemRootCerts();
|
|
140
138
|
|
|
141
139
|
private:
|
|
142
140
|
// Construct me not!
|
|
@@ -152,48 +150,13 @@ class DefaultSslRootStore {
|
|
|
152
150
|
static tsi_ssl_root_certs_store* default_root_store_;
|
|
153
151
|
|
|
154
152
|
// Default PEM root certificates.
|
|
155
|
-
static
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
class PemKeyCertPair {
|
|
159
|
-
public:
|
|
160
|
-
PemKeyCertPair(PrivateKey private_key, absl::string_view cert_chain)
|
|
161
|
-
: private_key_(std::move(private_key)), cert_chain_(cert_chain) {}
|
|
162
|
-
|
|
163
|
-
// Movable.
|
|
164
|
-
PemKeyCertPair(PemKeyCertPair&& other) noexcept {
|
|
165
|
-
private_key_ = std::move(other.private_key_);
|
|
166
|
-
cert_chain_ = std::move(other.cert_chain_);
|
|
167
|
-
}
|
|
168
|
-
PemKeyCertPair& operator=(PemKeyCertPair&& other) noexcept {
|
|
169
|
-
private_key_ = std::move(other.private_key_);
|
|
170
|
-
cert_chain_ = std::move(other.cert_chain_);
|
|
171
|
-
return *this;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Copyable.
|
|
175
|
-
PemKeyCertPair(const PemKeyCertPair& other)
|
|
176
|
-
: private_key_(other.private_key()), cert_chain_(other.cert_chain()) {}
|
|
177
|
-
PemKeyCertPair& operator=(const PemKeyCertPair& other) {
|
|
178
|
-
private_key_ = other.private_key();
|
|
179
|
-
cert_chain_ = other.cert_chain();
|
|
180
|
-
return *this;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
bool operator==(const PemKeyCertPair& other) const {
|
|
184
|
-
return this->private_key() == other.private_key() &&
|
|
185
|
-
this->cert_chain() == other.cert_chain();
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
const PrivateKey& private_key() const { return private_key_; }
|
|
189
|
-
const std::string& cert_chain() const { return cert_chain_; }
|
|
190
|
-
|
|
191
|
-
private:
|
|
192
|
-
PrivateKey private_key_;
|
|
193
|
-
std::string cert_chain_;
|
|
153
|
+
static Slice default_pem_root_certs_;
|
|
194
154
|
};
|
|
195
155
|
|
|
196
|
-
|
|
156
|
+
// Checks whether `std::vector<PemKeyCertPair>` in the variant is empty, or the
|
|
157
|
+
// `CertficateSelector` is nullptr.
|
|
158
|
+
bool IsKeyCertPairsOrSelectorEmpty(
|
|
159
|
+
const KeyCertPairsOrSelector& key_cert_pairs_or_selector);
|
|
197
160
|
|
|
198
161
|
} // namespace grpc_core
|
|
199
162
|
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
#include <utility>
|
|
32
32
|
#include <vector>
|
|
33
33
|
|
|
34
|
+
#include "src/core/client_channel/client_channel_args.h"
|
|
35
|
+
#include "src/core/credentials/transport/tls/grpc_tls_certificate_selector.h"
|
|
34
36
|
#include "src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h"
|
|
35
37
|
#include "src/core/credentials/transport/tls/grpc_tls_credentials_options.h"
|
|
36
38
|
#include "src/core/credentials/transport/tls/ssl_utils.h"
|
|
@@ -75,6 +77,7 @@ void PendingVerifierRequestInit(
|
|
|
75
77
|
bool has_peer_cert = false;
|
|
76
78
|
bool has_peer_cert_full_chain = false;
|
|
77
79
|
bool has_verified_root_cert_subject = false;
|
|
80
|
+
bool has_negotiated_key_exchange_group = false;
|
|
78
81
|
std::vector<char*> uri_names;
|
|
79
82
|
std::vector<char*> dns_names;
|
|
80
83
|
std::vector<char*> email_names;
|
|
@@ -111,6 +114,10 @@ void PendingVerifierRequestInit(
|
|
|
111
114
|
request->peer_info.verified_root_cert_subject =
|
|
112
115
|
CopyCoreString(prop->value.data, prop->value.length);
|
|
113
116
|
has_verified_root_cert_subject = true;
|
|
117
|
+
} else if (strcmp(prop->name, TSI_SSL_NEGOTIATED_KEY_EXCHANGE_GROUP) == 0) {
|
|
118
|
+
request->peer_info.negotiated_key_exchange_group =
|
|
119
|
+
CopyCoreString(prop->value.data, prop->value.length);
|
|
120
|
+
has_negotiated_key_exchange_group = true;
|
|
114
121
|
}
|
|
115
122
|
}
|
|
116
123
|
if (!has_common_name) {
|
|
@@ -125,6 +132,9 @@ void PendingVerifierRequestInit(
|
|
|
125
132
|
if (!has_verified_root_cert_subject) {
|
|
126
133
|
request->peer_info.verified_root_cert_subject = nullptr;
|
|
127
134
|
}
|
|
135
|
+
if (!has_negotiated_key_exchange_group) {
|
|
136
|
+
request->peer_info.negotiated_key_exchange_group = nullptr;
|
|
137
|
+
}
|
|
128
138
|
request->peer_info.san_names.uri_names_size = uri_names.size();
|
|
129
139
|
if (!uri_names.empty()) {
|
|
130
140
|
request->peer_info.san_names.uri_names =
|
|
@@ -214,20 +224,11 @@ void PendingVerifierRequestDestroy(
|
|
|
214
224
|
if (request->peer_info.verified_root_cert_subject != nullptr) {
|
|
215
225
|
gpr_free(const_cast<char*>(request->peer_info.verified_root_cert_subject));
|
|
216
226
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
const PemKeyCertPairList& cert_pair_list) {
|
|
221
|
-
std::vector<tsi_ssl_pem_key_cert_pair> tsi_pairs;
|
|
222
|
-
for (size_t i = 0; i < cert_pair_list.size(); i++) {
|
|
223
|
-
GRPC_CHECK(!IsPrivateKeyEmpty(cert_pair_list[i].private_key()));
|
|
224
|
-
GRPC_CHECK(!cert_pair_list[i].cert_chain().empty());
|
|
225
|
-
tsi_pairs.emplace_back(cert_pair_list[i].private_key(),
|
|
226
|
-
cert_pair_list[i].cert_chain());
|
|
227
|
+
if (request->peer_info.negotiated_key_exchange_group != nullptr) {
|
|
228
|
+
gpr_free(
|
|
229
|
+
const_cast<char*>(request->peer_info.negotiated_key_exchange_group));
|
|
227
230
|
}
|
|
228
|
-
return tsi_pairs;
|
|
229
231
|
}
|
|
230
|
-
|
|
231
232
|
} // namespace
|
|
232
233
|
|
|
233
234
|
// -------------------channel security connector-------------------
|
|
@@ -369,12 +370,17 @@ void TlsChannelSecurityConnector::add_handshakers(
|
|
|
369
370
|
RefCountedPtr<CollectionScope> collection_scope =
|
|
370
371
|
stats_plugin_group != nullptr ? stats_plugin_group->GetCollectionScope()
|
|
371
372
|
: nullptr;
|
|
373
|
+
std::string backend_service(
|
|
374
|
+
args.GetString(GRPC_ARG_BACKEND_SERVICE).value_or(""));
|
|
375
|
+
std::string locality(args.GetString(GRPC_ARG_LB_LOCALITY).value_or(""));
|
|
376
|
+
std::string target(args.GetString(GRPC_ARG_SERVER_URI).value_or(""));
|
|
372
377
|
tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
|
|
373
378
|
client_handshaker_factory_, server_name_indication,
|
|
374
379
|
/*network_bio_buf_size=*/0,
|
|
375
380
|
/*ssl_bio_buf_size=*/0,
|
|
376
381
|
args.GetOwnedString(GRPC_ARG_TRANSPORT_PROTOCOLS),
|
|
377
|
-
std::move(collection_scope),
|
|
382
|
+
std::move(collection_scope), std::move(target), std::move(locality),
|
|
383
|
+
std::move(backend_service), &tsi_hs);
|
|
378
384
|
if (result != TSI_OK) {
|
|
379
385
|
LOG(ERROR) << "Handshaker creation failed with error "
|
|
380
386
|
<< tsi_result_to_string(result);
|
|
@@ -455,15 +461,17 @@ ArenaPromise<absl::Status> TlsChannelSecurityConnector::CheckCallHost(
|
|
|
455
461
|
}
|
|
456
462
|
|
|
457
463
|
void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::
|
|
458
|
-
OnCertificatesChanged(
|
|
459
|
-
|
|
464
|
+
OnCertificatesChanged(
|
|
465
|
+
std::shared_ptr<tsi::RootCertInfo> root_certs,
|
|
466
|
+
std::optional<KeyCertPairsOrSelector> key_cert_pairs_or_selector) {
|
|
460
467
|
GRPC_CHECK_NE(security_connector_, nullptr);
|
|
461
468
|
MutexLock lock(&security_connector_->mu_);
|
|
462
469
|
if (root_certs != nullptr) {
|
|
463
470
|
security_connector_->root_cert_info_ = std::move(root_certs);
|
|
464
471
|
}
|
|
465
|
-
if (
|
|
466
|
-
security_connector_->
|
|
472
|
+
if (key_cert_pairs_or_selector.has_value()) {
|
|
473
|
+
security_connector_->key_cert_pairs_or_selector_ =
|
|
474
|
+
std::move(key_cert_pairs_or_selector);
|
|
467
475
|
}
|
|
468
476
|
const bool root_ready =
|
|
469
477
|
security_connector_->options_->root_certificate_distributor() ==
|
|
@@ -472,7 +480,7 @@ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::
|
|
|
472
480
|
const bool identity_ready =
|
|
473
481
|
security_connector_->options_->identity_certificate_distributor() ==
|
|
474
482
|
nullptr ||
|
|
475
|
-
security_connector_->
|
|
483
|
+
security_connector_->key_cert_pairs_or_selector_.has_value();
|
|
476
484
|
if (root_ready && identity_ready) {
|
|
477
485
|
if (security_connector_->UpdateHandshakerFactoryLocked() !=
|
|
478
486
|
GRPC_SECURITY_OK) {
|
|
@@ -554,14 +562,20 @@ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() {
|
|
|
554
562
|
if (client_handshaker_factory_ != nullptr) {
|
|
555
563
|
tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
|
|
556
564
|
}
|
|
557
|
-
|
|
558
|
-
if (
|
|
559
|
-
|
|
565
|
+
const PemKeyCertPair* pem_key_cert_pair = nullptr;
|
|
566
|
+
if (key_cert_pairs_or_selector_.has_value()) {
|
|
567
|
+
Match(
|
|
568
|
+
*key_cert_pairs_or_selector_,
|
|
569
|
+
[&pem_key_cert_pair](const PemKeyCertPairList& pem_key_cert_pairs) {
|
|
570
|
+
pem_key_cert_pair =
|
|
571
|
+
pem_key_cert_pairs.empty() ? nullptr : &pem_key_cert_pairs[0];
|
|
572
|
+
},
|
|
573
|
+
// This is not expected to happen and we do nothing here.
|
|
574
|
+
[](const std::shared_ptr<CertificateSelector>&) {});
|
|
560
575
|
}
|
|
561
576
|
bool use_default_roots = options_->root_certificate_distributor() == nullptr;
|
|
562
577
|
return grpc_ssl_tsi_client_handshaker_factory_init(
|
|
563
|
-
pem_key_cert_pair
|
|
564
|
-
use_default_roots ? nullptr : root_cert_info_,
|
|
578
|
+
pem_key_cert_pair, use_default_roots ? nullptr : root_cert_info_,
|
|
565
579
|
skip_server_certificate_verification,
|
|
566
580
|
grpc_get_tsi_tls_version(options_->min_tls_version()),
|
|
567
581
|
grpc_get_tsi_tls_version(options_->max_tls_version()), ssl_session_cache_,
|
|
@@ -730,15 +744,17 @@ int TlsServerSecurityConnector::cmp(
|
|
|
730
744
|
}
|
|
731
745
|
|
|
732
746
|
void TlsServerSecurityConnector::TlsServerCertificateWatcher::
|
|
733
|
-
OnCertificatesChanged(
|
|
734
|
-
|
|
747
|
+
OnCertificatesChanged(
|
|
748
|
+
std::shared_ptr<tsi::RootCertInfo> roots,
|
|
749
|
+
std::optional<KeyCertPairsOrSelector> key_cert_pairs_or_selector) {
|
|
735
750
|
GRPC_CHECK_NE(security_connector_, nullptr);
|
|
736
751
|
MutexLock lock(&security_connector_->mu_);
|
|
737
752
|
if (roots != nullptr) {
|
|
738
753
|
security_connector_->root_cert_info_ = std::move(roots);
|
|
739
754
|
}
|
|
740
|
-
if (
|
|
741
|
-
security_connector_->
|
|
755
|
+
if (key_cert_pairs_or_selector.has_value()) {
|
|
756
|
+
security_connector_->key_cert_pairs_or_selector_ =
|
|
757
|
+
std::move(key_cert_pairs_or_selector);
|
|
742
758
|
}
|
|
743
759
|
bool root_being_watched =
|
|
744
760
|
security_connector_->options_->root_certificate_distributor() != nullptr;
|
|
@@ -747,7 +763,7 @@ void TlsServerSecurityConnector::TlsServerCertificateWatcher::
|
|
|
747
763
|
security_connector_->options_->identity_certificate_distributor() !=
|
|
748
764
|
nullptr;
|
|
749
765
|
bool identity_has_value =
|
|
750
|
-
security_connector_->
|
|
766
|
+
security_connector_->key_cert_pairs_or_selector_.has_value();
|
|
751
767
|
if ((root_being_watched && root_has_value && identity_being_watched &&
|
|
752
768
|
identity_has_value) ||
|
|
753
769
|
(root_being_watched && root_has_value && !identity_being_watched) ||
|
|
@@ -831,12 +847,11 @@ TlsServerSecurityConnector::UpdateHandshakerFactoryLocked() {
|
|
|
831
847
|
tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_);
|
|
832
848
|
}
|
|
833
849
|
// The identity certs on the server side shouldn't be empty.
|
|
834
|
-
GRPC_CHECK(
|
|
835
|
-
GRPC_CHECK(!(*
|
|
836
|
-
std::vector<tsi_ssl_pem_key_cert_pair> pem_key_cert_pairs =
|
|
837
|
-
ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
|
|
850
|
+
GRPC_CHECK(key_cert_pairs_or_selector_.has_value());
|
|
851
|
+
GRPC_CHECK(!IsKeyCertPairsOrSelectorEmpty(*key_cert_pairs_or_selector_));
|
|
838
852
|
return grpc_ssl_tsi_server_handshaker_factory_init(
|
|
839
|
-
|
|
853
|
+
*key_cert_pairs_or_selector_, root_cert_info_,
|
|
854
|
+
options_->cert_request_type(),
|
|
840
855
|
grpc_get_tsi_tls_version(options_->min_tls_version()),
|
|
841
856
|
grpc_get_tsi_tls_version(options_->max_tls_version()),
|
|
842
857
|
tls_session_key_logger_.get(), options_->crl_directory().c_str(),
|
|
@@ -25,11 +25,13 @@
|
|
|
25
25
|
#include <grpc/support/port_platform.h>
|
|
26
26
|
|
|
27
27
|
#include <map>
|
|
28
|
+
#include <memory>
|
|
28
29
|
#include <optional>
|
|
29
30
|
#include <string>
|
|
30
31
|
|
|
31
32
|
#include "src/core/credentials/transport/security_connector.h"
|
|
32
33
|
#include "src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h"
|
|
34
|
+
#include "src/core/credentials/transport/tls/grpc_tls_certificate_selector.h"
|
|
33
35
|
#include "src/core/credentials/transport/tls/ssl_utils.h"
|
|
34
36
|
#include "src/core/handshaker/handshaker.h"
|
|
35
37
|
#include "src/core/lib/channel/channel_args.h"
|
|
@@ -41,6 +43,7 @@
|
|
|
41
43
|
#include "src/core/tsi/ssl/key_logging/ssl_key_logging.h"
|
|
42
44
|
#include "src/core/tsi/ssl_transport_security.h"
|
|
43
45
|
#include "src/core/tsi/transport_security_interface.h"
|
|
46
|
+
#include "src/core/util/match.h"
|
|
44
47
|
#include "src/core/util/ref_counted_ptr.h"
|
|
45
48
|
#include "src/core/util/sync.h"
|
|
46
49
|
#include "absl/base/thread_annotations.h"
|
|
@@ -96,7 +99,16 @@ class TlsChannelSecurityConnector final
|
|
|
96
99
|
|
|
97
100
|
std::optional<PemKeyCertPairList> KeyCertPairListForTesting() {
|
|
98
101
|
MutexLock lock(&mu_);
|
|
99
|
-
|
|
102
|
+
std::optional<PemKeyCertPairList> pem_key_cert_pairs;
|
|
103
|
+
if (key_cert_pairs_or_selector_.has_value()) {
|
|
104
|
+
Match(
|
|
105
|
+
*key_cert_pairs_or_selector_,
|
|
106
|
+
[&pem_key_cert_pairs](const PemKeyCertPairList& key_cert_pairs) {
|
|
107
|
+
pem_key_cert_pairs = key_cert_pairs;
|
|
108
|
+
},
|
|
109
|
+
[](const std::shared_ptr<CertificateSelector>&) {});
|
|
110
|
+
}
|
|
111
|
+
return pem_key_cert_pairs;
|
|
100
112
|
}
|
|
101
113
|
|
|
102
114
|
std::shared_ptr<tsi::RootCertInfo> RootCertInfoForTesting() {
|
|
@@ -114,9 +126,9 @@ class TlsChannelSecurityConnector final
|
|
|
114
126
|
explicit TlsChannelCertificateWatcher(
|
|
115
127
|
TlsChannelSecurityConnector* security_connector)
|
|
116
128
|
: security_connector_(security_connector) {}
|
|
117
|
-
void OnCertificatesChanged(
|
|
118
|
-
|
|
119
|
-
|
|
129
|
+
void OnCertificatesChanged(std::shared_ptr<tsi::RootCertInfo> root_certs,
|
|
130
|
+
std::optional<KeyCertPairsOrSelector>
|
|
131
|
+
key_cert_pairs_or_selector) override;
|
|
120
132
|
void OnError(grpc_error_handle root_cert_error,
|
|
121
133
|
grpc_error_handle identity_cert_error) override;
|
|
122
134
|
|
|
@@ -167,7 +179,7 @@ class TlsChannelSecurityConnector final
|
|
|
167
179
|
ABSL_GUARDED_BY(mu_) = nullptr;
|
|
168
180
|
tsi_ssl_session_cache* ssl_session_cache_ ABSL_GUARDED_BY(mu_) = nullptr;
|
|
169
181
|
RefCountedPtr<TlsSessionKeyLogger> tls_session_key_logger_;
|
|
170
|
-
std::optional<
|
|
182
|
+
std::optional<KeyCertPairsOrSelector> key_cert_pairs_or_selector_
|
|
171
183
|
ABSL_GUARDED_BY(mu_);
|
|
172
184
|
std::shared_ptr<tsi::RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
|
|
173
185
|
std::map<grpc_closure* /*on_peer_checked*/, ChannelPendingVerifierRequest*>
|
|
@@ -208,7 +220,16 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
|
|
|
208
220
|
|
|
209
221
|
std::optional<PemKeyCertPairList> KeyCertPairListForTesting() {
|
|
210
222
|
MutexLock lock(&mu_);
|
|
211
|
-
|
|
223
|
+
std::optional<PemKeyCertPairList> pem_key_cert_pairs;
|
|
224
|
+
if (key_cert_pairs_or_selector_.has_value()) {
|
|
225
|
+
Match(
|
|
226
|
+
*key_cert_pairs_or_selector_,
|
|
227
|
+
[&pem_key_cert_pairs](const PemKeyCertPairList& key_cert_pairs) {
|
|
228
|
+
pem_key_cert_pairs = key_cert_pairs;
|
|
229
|
+
},
|
|
230
|
+
[](const std::shared_ptr<CertificateSelector>&) {});
|
|
231
|
+
}
|
|
232
|
+
return pem_key_cert_pairs;
|
|
212
233
|
}
|
|
213
234
|
|
|
214
235
|
std::shared_ptr<tsi::RootCertInfo> RootCertInfoForTesting() {
|
|
@@ -226,9 +247,9 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
|
|
|
226
247
|
explicit TlsServerCertificateWatcher(
|
|
227
248
|
TlsServerSecurityConnector* security_connector)
|
|
228
249
|
: security_connector_(security_connector) {}
|
|
229
|
-
void OnCertificatesChanged(
|
|
230
|
-
|
|
231
|
-
|
|
250
|
+
void OnCertificatesChanged(std::shared_ptr<tsi::RootCertInfo> roots,
|
|
251
|
+
std::optional<KeyCertPairsOrSelector>
|
|
252
|
+
key_cert_pairs_or_selector) override;
|
|
232
253
|
|
|
233
254
|
void OnError(grpc_error_handle root_cert_error,
|
|
234
255
|
grpc_error_handle identity_cert_error) override;
|
|
@@ -276,7 +297,7 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
|
|
|
276
297
|
identity_certificate_watcher_ = nullptr;
|
|
277
298
|
tsi_ssl_server_handshaker_factory* server_handshaker_factory_
|
|
278
299
|
ABSL_GUARDED_BY(mu_) = nullptr;
|
|
279
|
-
std::optional<
|
|
300
|
+
std::optional<KeyCertPairsOrSelector> key_cert_pairs_or_selector_
|
|
280
301
|
ABSL_GUARDED_BY(mu_);
|
|
281
302
|
std::shared_ptr<tsi::RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
|
|
282
303
|
RefCountedPtr<TlsSessionKeyLogger> tls_session_key_logger_;
|
|
@@ -284,9 +284,8 @@ void LegacyChannelIdleFilter::StartIdleTimer() {
|
|
|
284
284
|
|
|
285
285
|
void LegacyChannelIdleFilter::CloseChannel(absl::string_view reason) {
|
|
286
286
|
auto* op = grpc_make_transport_op(nullptr);
|
|
287
|
-
op->disconnect_with_error =
|
|
288
|
-
|
|
289
|
-
GRPC_CHANNEL_IDLE);
|
|
287
|
+
op->disconnect_with_error = GRPC_ERROR_CREATE(reason);
|
|
288
|
+
op->go_idle = true;
|
|
290
289
|
// Pass the transport op down to the channel stack.
|
|
291
290
|
auto* elem = grpc_channel_stack_element(channel_stack_, 0);
|
|
292
291
|
elem->filter->start_transport_op(elem, op);
|
|
@@ -305,14 +304,19 @@ void RegisterLegacyChannelIdleFilters(CoreConfiguration::Builder* builder) {
|
|
|
305
304
|
return GetClientIdleTimeout(channel_args) != Duration::Infinity();
|
|
306
305
|
});
|
|
307
306
|
|
|
308
|
-
|
|
309
|
-
->
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
307
|
+
auto& max_age_registration =
|
|
308
|
+
builder->channel_init()
|
|
309
|
+
->RegisterV2Filter<LegacyMaxAgeFilter>(GRPC_SERVER_CHANNEL)
|
|
310
|
+
.ExcludeFromMinimalStack()
|
|
311
|
+
.If([](const ChannelArgs& channel_args) {
|
|
312
|
+
return LegacyMaxAgeFilter::Config::FromChannelArgs(channel_args)
|
|
313
|
+
.enable();
|
|
314
|
+
});
|
|
315
|
+
if (IsFixV3FilterStackServerSideOrderingEnabled()) {
|
|
316
|
+
max_age_registration.SinkToBottom();
|
|
317
|
+
} else {
|
|
318
|
+
max_age_registration.FloatToTop();
|
|
319
|
+
}
|
|
316
320
|
}
|
|
317
321
|
|
|
318
322
|
LegacyMaxAgeFilter::LegacyMaxAgeFilter(grpc_channel_stack* channel_stack,
|
|
@@ -48,11 +48,6 @@ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
|
|
|
48
48
|
.If(IsBuildingHttpLikeTransport)
|
|
49
49
|
.After<HttpClientFilter>()
|
|
50
50
|
.After<ClientMessageSizeFilter>();
|
|
51
|
-
builder->channel_init()
|
|
52
|
-
->RegisterFilter<ServerCompressionFilter>(GRPC_SERVER_CHANNEL)
|
|
53
|
-
.If(IsBuildingHttpLikeTransport)
|
|
54
|
-
.After<HttpServerFilter>()
|
|
55
|
-
.After<ServerMessageSizeFilter>();
|
|
56
51
|
builder->channel_init()
|
|
57
52
|
->RegisterFilter<HttpClientFilter>(GRPC_CLIENT_SUBCHANNEL)
|
|
58
53
|
.If(IsBuildingHttpLikeTransport)
|
|
@@ -61,15 +56,31 @@ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
|
|
|
61
56
|
->RegisterFilter<HttpClientFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
|
62
57
|
.If(IsBuildingHttpLikeTransport)
|
|
63
58
|
.After<ClientMessageSizeFilter>();
|
|
64
|
-
builder->channel_init()
|
|
65
|
-
->RegisterFilter<HttpServerFilter>(GRPC_SERVER_CHANNEL)
|
|
66
|
-
.If(IsBuildingHttpLikeTransport)
|
|
67
|
-
.After<ServerMessageSizeFilter>();
|
|
68
59
|
builder->channel_init()
|
|
69
60
|
->RegisterFilter<HttpClientFilter>(GRPC_CLIENT_VIRTUAL_CHANNEL)
|
|
70
61
|
.If(IsBuildingHttpLikeTransport);
|
|
62
|
+
|
|
63
|
+
// Server side filters.
|
|
64
|
+
auto& compression_reg =
|
|
65
|
+
builder->channel_init()
|
|
66
|
+
->RegisterFilter<ServerCompressionFilter>(GRPC_SERVER_CHANNEL)
|
|
67
|
+
.If(IsBuildingHttpLikeTransport);
|
|
68
|
+
auto& http_server_reg =
|
|
69
|
+
builder->channel_init()
|
|
70
|
+
->RegisterFilter<HttpServerFilter>(GRPC_SERVER_CHANNEL)
|
|
71
|
+
.If(IsBuildingHttpLikeTransport);
|
|
72
|
+
|
|
71
73
|
builder->channel_init()
|
|
72
74
|
->RegisterFilter<HttpServerFilter>(GRPC_SERVER_VIRTUAL_CHANNEL)
|
|
73
75
|
.If(IsBuildingHttpLikeTransport);
|
|
76
|
+
|
|
77
|
+
if (IsFixV3FilterStackServerSideOrderingEnabled()) {
|
|
78
|
+
compression_reg.Before<HttpServerFilter>()
|
|
79
|
+
.Before<ServerMessageSizeFilter>();
|
|
80
|
+
http_server_reg.Before<ServerMessageSizeFilter>();
|
|
81
|
+
} else {
|
|
82
|
+
compression_reg.After<HttpServerFilter>().After<ServerMessageSizeFilter>();
|
|
83
|
+
http_server_reg.After<ServerMessageSizeFilter>();
|
|
84
|
+
}
|
|
74
85
|
}
|
|
75
86
|
} // namespace grpc_core
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include <grpc/support/port_platform.h>
|
|
22
22
|
#include <inttypes.h>
|
|
23
23
|
|
|
24
|
+
#include <cstdint>
|
|
24
25
|
#include <functional>
|
|
25
26
|
#include <memory>
|
|
26
27
|
#include <optional>
|
|
@@ -44,6 +45,7 @@
|
|
|
44
45
|
#include "src/core/lib/surface/call.h"
|
|
45
46
|
#include "src/core/lib/transport/transport.h"
|
|
46
47
|
#include "src/core/telemetry/call_tracer.h"
|
|
48
|
+
#include "src/core/transport/message_size_service_config.h"
|
|
47
49
|
#include "src/core/util/grpc_check.h"
|
|
48
50
|
#include "src/core/util/latent_see.h"
|
|
49
51
|
#include "absl/status/status.h"
|
|
@@ -75,8 +77,6 @@ ServerCompressionFilter::Create(const ChannelArgs& args, ChannelFilter::Args) {
|
|
|
75
77
|
|
|
76
78
|
ChannelCompression::ChannelCompression(const ChannelArgs& args)
|
|
77
79
|
: max_recv_size_(GetMaxRecvSizeFromChannelArgs(args)),
|
|
78
|
-
message_size_service_config_parser_index_(
|
|
79
|
-
MessageSizeParser::ParserIndex()),
|
|
80
80
|
default_compression_algorithm_(
|
|
81
81
|
DefaultCompressionAlgorithmFromChannelArgs(args).value_or(
|
|
82
82
|
GRPC_COMPRESS_NONE)),
|
|
@@ -118,26 +118,25 @@ MessageHandle ChannelCompression::CompressMessage(
|
|
|
118
118
|
return message;
|
|
119
119
|
}
|
|
120
120
|
// Try to compress the payload.
|
|
121
|
-
SliceBuffer
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
tmp.c_slice_buffer());
|
|
121
|
+
std::optional<SliceBuffer> compressed =
|
|
122
|
+
MessageCompress(algorithm, *message->payload());
|
|
123
|
+
|
|
125
124
|
// If we achieved compression send it as compressed, otherwise send it as (to
|
|
126
125
|
// avoid spending cycles on the receiver decompressing).
|
|
127
|
-
if (
|
|
126
|
+
if (compressed.has_value()) {
|
|
128
127
|
if (GRPC_TRACE_FLAG_ENABLED(compression)) {
|
|
129
128
|
const char* algo_name;
|
|
130
|
-
|
|
131
|
-
const size_t
|
|
129
|
+
GRPC_CHECK(grpc_compression_algorithm_name(algorithm, &algo_name));
|
|
130
|
+
const size_t before_size = message->payload()->Length();
|
|
131
|
+
const size_t after_size = compressed->Length();
|
|
132
132
|
const float savings_ratio = 1.0f - (static_cast<float>(after_size) /
|
|
133
133
|
static_cast<float>(before_size));
|
|
134
|
-
GRPC_CHECK(grpc_compression_algorithm_name(algorithm, &algo_name));
|
|
135
134
|
LOG(INFO) << absl::StrFormat(
|
|
136
135
|
"Compressed[%s] %" PRIuPTR " bytes vs. %" PRIuPTR
|
|
137
136
|
" bytes (%.2f%% savings)",
|
|
138
137
|
algo_name, before_size, after_size, 100 * savings_ratio);
|
|
139
138
|
}
|
|
140
|
-
|
|
139
|
+
*message->payload() = std::move(*compressed);
|
|
141
140
|
flags |= GRPC_WRITE_INTERNAL_COMPRESS;
|
|
142
141
|
if (call_tracer != nullptr) {
|
|
143
142
|
call_tracer->RecordSendCompressedMessage(*message);
|
|
@@ -148,7 +147,7 @@ MessageHandle ChannelCompression::CompressMessage(
|
|
|
148
147
|
GRPC_CHECK(grpc_compression_algorithm_name(algorithm, &algo_name));
|
|
149
148
|
LOG(INFO) << "Algorithm '" << algo_name
|
|
150
149
|
<< "' enabled but decided not to compress. Input size: "
|
|
151
|
-
<< payload->Length();
|
|
150
|
+
<< message->payload()->Length();
|
|
152
151
|
}
|
|
153
152
|
}
|
|
154
153
|
return message;
|
|
@@ -180,15 +179,17 @@ absl::StatusOr<MessageHandle> ChannelCompression::DecompressMessage(
|
|
|
180
179
|
return std::move(message);
|
|
181
180
|
}
|
|
182
181
|
// Try to decompress the payload.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
182
|
+
std::optional<uint32_t> max_output_size = IsMessageSizeRefactoringEnabled()
|
|
183
|
+
? args.max_recv_message_length
|
|
184
|
+
: std::nullopt;
|
|
185
|
+
absl::StatusOr<SliceBuffer> decompressed_slices =
|
|
186
|
+
MessageDecompress(args.algorithm, *message->payload(), max_output_size);
|
|
187
|
+
if (!decompressed_slices.ok()) {
|
|
188
|
+
return decompressed_slices.status();
|
|
189
189
|
}
|
|
190
|
-
|
|
191
|
-
message
|
|
190
|
+
|
|
191
|
+
// Move the decompressed slices into the message.
|
|
192
|
+
*message->payload() = std::move(*decompressed_slices);
|
|
192
193
|
message->mutable_flags() &= ~GRPC_WRITE_INTERNAL_COMPRESS;
|
|
193
194
|
message->mutable_flags() |= GRPC_WRITE_INTERNAL_TEST_ONLY_WAS_COMPRESSED;
|
|
194
195
|
if (call_tracer != nullptr) {
|
|
@@ -213,18 +214,10 @@ grpc_compression_algorithm ChannelCompression::HandleOutgoingMetadata(
|
|
|
213
214
|
ChannelCompression::DecompressArgs ChannelCompression::HandleIncomingMetadata(
|
|
214
215
|
const grpc_metadata_batch& incoming_metadata) {
|
|
215
216
|
// Configure max receive size.
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if (limits != nullptr && limits->max_recv_size().has_value() &&
|
|
221
|
-
(!max_recv_message_length.has_value() ||
|
|
222
|
-
*limits->max_recv_size() < *max_recv_message_length)) {
|
|
223
|
-
max_recv_message_length = limits->max_recv_size();
|
|
224
|
-
}
|
|
225
|
-
return DecompressArgs{incoming_metadata.get(GrpcEncodingMetadata())
|
|
226
|
-
.value_or(GRPC_COMPRESS_NONE),
|
|
227
|
-
max_recv_message_length};
|
|
217
|
+
return DecompressArgs{
|
|
218
|
+
incoming_metadata.get(GrpcEncodingMetadata())
|
|
219
|
+
.value_or(GRPC_COMPRESS_NONE),
|
|
220
|
+
GetMaxRecvSizeFromCallContext(GetContext<Arena>(), max_recv_size_)};
|
|
228
221
|
}
|
|
229
222
|
|
|
230
223
|
void ClientCompressionFilter::Call::OnClientInitialMetadata(
|
|
@@ -107,7 +107,6 @@ class ChannelCompression {
|
|
|
107
107
|
private:
|
|
108
108
|
// Max receive message length, if set.
|
|
109
109
|
std::optional<uint32_t> max_recv_size_;
|
|
110
|
-
size_t message_size_service_config_parser_index_;
|
|
111
110
|
// The default, channel-level, compression algorithm.
|
|
112
111
|
grpc_compression_algorithm default_compression_algorithm_;
|
|
113
112
|
// Enabled compression algorithms.
|