grpc 1.72.0 → 1.78.1
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 +153 -54
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +41 -8
- data/include/grpc/event_engine/event_engine.h +182 -8
- data/include/grpc/event_engine/internal/write_event.h +34 -0
- data/include/grpc/event_engine/memory_allocator.h +2 -0
- data/include/grpc/event_engine/memory_request.h +2 -0
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +24 -13
- data/include/grpc/impl/compression_types.h +3 -2
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +27 -21
- data/include/grpc/support/metrics.h +7 -1
- data/include/grpc/support/port_platform.h +8 -5
- data/src/core/call/call_filters.cc +5 -5
- data/src/core/call/call_filters.h +239 -56
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +56 -32
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +53 -14
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/interception_chain.h +8 -11
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +41 -2
- data/src/core/call/metadata_batch.cc +49 -55
- data/src/core/call/metadata_batch.h +10 -9
- data/src/core/call/metadata_info.cc +1 -1
- data/src/core/call/parsed_metadata.h +2 -2
- data/src/core/call/request_buffer.cc +1 -1
- data/src/core/call/security_context.cc +2 -2
- data/src/core/call/security_context.h +1 -1
- data/src/core/call/server_call.cc +5 -5
- data/src/core/call/server_call.h +6 -4
- data/src/core/call/simple_slice_based_metadata.h +1 -1
- data/src/core/call/status_util.cc +1 -1
- data/src/core/channelz/channel_trace.cc +218 -112
- data/src/core/channelz/channel_trace.h +390 -65
- data/src/core/channelz/channelz.cc +483 -192
- data/src/core/channelz/channelz.h +523 -78
- data/src/core/channelz/channelz_registry.cc +239 -195
- data/src/core/channelz/channelz_registry.h +261 -21
- data/src/core/channelz/property_list.cc +371 -0
- data/src/core/channelz/property_list.h +215 -0
- data/src/core/channelz/text_encode.cc +66 -0
- data/src/core/channelz/text_encode.h +29 -0
- data/src/core/channelz/v2tov1/convert.cc +694 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +431 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +119 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -0
- data/src/core/channelz/ztrace_collector.h +489 -0
- data/src/core/client_channel/backup_poller.cc +19 -5
- data/src/core/client_channel/buffered_call.cc +140 -0
- data/src/core/client_channel/buffered_call.h +104 -0
- data/src/core/client_channel/client_channel.cc +179 -129
- data/src/core/client_channel/client_channel.h +8 -11
- data/src/core/client_channel/client_channel_factory.h +1 -1
- data/src/core/client_channel/client_channel_filter.cc +449 -719
- data/src/core/client_channel/client_channel_filter.h +57 -152
- data/src/core/client_channel/client_channel_internal.h +8 -4
- data/src/core/client_channel/client_channel_service_config.cc +43 -3
- data/src/core/client_channel/client_channel_service_config.h +12 -1
- data/src/core/client_channel/config_selector.h +13 -7
- data/src/core/client_channel/connector.h +2 -3
- data/src/core/client_channel/dynamic_filters.cc +10 -11
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +42 -15
- data/src/core/client_channel/global_subchannel_pool.h +19 -13
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +9 -10
- data/src/core/client_channel/load_balanced_call_destination.h +1 -1
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.cc +23 -29
- data/src/core/client_channel/retry_filter.h +13 -10
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +16 -17
- data/src/core/client_channel/retry_filter_legacy_call_data.h +7 -9
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_service_config.cc +3 -3
- data/src/core/client_channel/retry_service_config.h +1 -1
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +174 -55
- data/src/core/client_channel/subchannel.h +36 -16
- data/src/core/client_channel/subchannel_pool_interface.cc +7 -8
- data/src/core/client_channel/subchannel_pool_interface.h +12 -2
- data/src/core/client_channel/subchannel_stream_client.cc +5 -5
- data/src/core/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/config/config_vars.cc +50 -3
- data/src/core/config/config_vars.h +34 -0
- data/src/core/config/core_configuration.cc +56 -14
- data/src/core/config/core_configuration.h +116 -11
- data/src/core/config/load_config.cc +13 -1
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +4 -4
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/call_creds_util.cc +7 -6
- data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
- data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
- data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_request_signer.cc +3 -2
- data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
- data/src/core/credentials/call/external/external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +9 -9
- data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +26 -115
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
- data/src/core/credentials/call/iam/iam_credentials.cc +6 -6
- data/src/core/credentials/call/iam/iam_credentials.h +1 -1
- data/src/core/credentials/call/json_util.cc +1 -1
- data/src/core/credentials/call/jwt/json_token.cc +7 -7
- data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
- data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
- data/src/core/credentials/call/jwt/jwt_verifier.cc +23 -22
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +53 -74
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
- data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
- data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -14
- data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +23 -3
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
- data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
- data/src/core/credentials/transport/channel_creds_registry.h +1 -1
- data/src/core/credentials/transport/channel_creds_registry_init.cc +5 -3
- data/src/core/credentials/transport/composite/composite_channel_credentials.cc +7 -7
- data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_security_connector.cc +7 -7
- data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +151 -39
- data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
- data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
- data/src/core/credentials/transport/security_connector.cc +6 -6
- data/src/core/credentials/transport/security_connector.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +16 -17
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +57 -22
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +2 -1
- data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +52 -47
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +21 -10
- data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +103 -61
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +20 -7
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +2 -1
- data/src/core/credentials/transport/tls/spiffe_utils.cc +373 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +46 -22
- data/src/core/credentials/transport/tls/ssl_utils.h +11 -4
- data/src/core/credentials/transport/tls/tls_credentials.cc +3 -1
- data/src/core/credentials/transport/tls/tls_security_connector.cc +28 -42
- data/src/core/credentials/transport/tls/tls_security_connector.h +15 -15
- data/src/core/credentials/transport/transport_credentials.cc +3 -3
- data/src/core/credentials/transport/transport_credentials.h +4 -4
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -8
- data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +3 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +12 -7
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +10 -10
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +22 -19
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +9 -12
- data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -8
- data/src/core/ext/filters/http/client_authority_filter.h +4 -1
- data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +19 -19
- data/src/core/ext/filters/http/message_compress/compression_filter.h +61 -9
- data/src/core/ext/filters/http/server/http_server_filter.cc +7 -10
- data/src/core/ext/filters/http/server/http_server_filter.h +22 -7
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -6
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +17 -19
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/chttp2_plugin.cc +40 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +176 -178
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +5 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +63 -990
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +490 -202
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -8
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +43 -7
- data/src/core/ext/transport/chttp2/transport/flow_control.h +247 -83
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +472 -123
- data/src/core/ext/transport/chttp2/transport/frame.h +170 -12
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +15 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +20 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +5 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -11
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -24
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +14 -11
- data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
- data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +430 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +10 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +10 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +19 -13
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +13 -2
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +2076 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +723 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +12 -39
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +71 -29
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +62 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +143 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +369 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +428 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +251 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +323 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +72 -26
- data/src/core/ext/transport/chttp2/transport/internal_channel_arg_names.h +24 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +112 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +142 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +194 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +64 -48
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +21 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +194 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +237 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +16 -19
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +17 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
- data/src/core/ext/transport/chttp2/transport/stream.h +287 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +875 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +46 -8
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +35 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +84 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +372 -0
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +105 -66
- data/src/core/ext/transport/inproc/inproc_transport.cc +16 -5
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +17 -10
- data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +12 -22
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +12 -22
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +28 -22
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +24 -67
- data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +29 -31
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +2 -2
- data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +0 -23
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +20 -0
- data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +8 -22
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +0 -23
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +64 -66
- data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +4 -95
- data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +28 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +8 -36
- data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +4 -0
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +8 -44
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +12 -40
- data/src/core/ext/upb-gen/google/api/http.upb.h +4 -0
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +193 -20
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +59 -21
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +4 -0
- data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +4 -22
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +1072 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +0 -18
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +196 -104
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +40 -32
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +154 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +40 -2
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +4 -0
- data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +8 -0
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +0 -18
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +0 -36
- data/src/core/ext/upb-gen/validate/validate.upb.h +12 -0
- data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +4 -0
- data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +0 -18
- data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +8 -0
- data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +0 -54
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +20 -22
- data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +4 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +4 -0
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +4 -0
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c +123 -62
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c +200 -101
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c +152 -77
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +524 -255
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.c +44 -23
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.c +66 -34
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.c +54 -28
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.c +47 -25
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.c +256 -126
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.c +50 -28
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.c +55 -28
- data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.c +34 -18
- data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +414 -206
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +831 -413
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +143 -73
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1132 -557
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.c +63 -34
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.c +255 -127
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +363 -178
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +227 -114
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.c +57 -31
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +596 -295
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.c +271 -137
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.c +56 -30
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.c +45 -25
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.c +59 -31
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +438 -217
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.c +441 -221
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.c +55 -30
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.c +57 -31
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +619 -303
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +70 -36
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.c +62 -33
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.c +47 -25
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +97 -49
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +97 -51
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.c +51 -27
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.c +147 -76
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +230 -116
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.c +277 -138
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.c +48 -26
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +388 -197
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +304 -153
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +173 -90
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.c +90 -47
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +98 -51
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +196 -99
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +237 -118
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +418 -210
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +194 -99
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +2003 -973
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.c +101 -53
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +352 -176
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.c +79 -42
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.c +67 -37
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.c +63 -34
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.c +88 -47
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +80 -43
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.c +53 -29
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.c +86 -46
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +55 -32
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.c +91 -49
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +105 -55
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.c +775 -379
- data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +52 -28
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +134 -68
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +189 -96
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.c +116 -61
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +112 -58
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.c +160 -82
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +75 -39
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1161 -570
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +52 -28
- data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +55 -29
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -26
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +390 -194
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +126 -65
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +498 -246
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +74 -38
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +221 -110
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c +68 -36
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +378 -187
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c +100 -52
- data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +257 -129
- data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +44 -24
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.c +68 -35
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.c +38 -20
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.c +59 -32
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.c +65 -34
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.c +72 -38
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.c +57 -31
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.c +52 -29
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.c +51 -28
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.c +89 -47
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.c +37 -20
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.c +89 -47
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.c +67 -35
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.c +112 -58
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.c +110 -56
- data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +123 -62
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.c +59 -31
- data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.c +30 -16
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.c +143 -72
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.c +61 -32
- data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.c +51 -27
- data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.c +85 -45
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.c +35 -19
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.c +44 -23
- data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.c +61 -33
- data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.c +35 -19
- data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.c +272 -133
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.c +315 -154
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +64 -33
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +35 -19
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.c +26 -15
- data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +1106 -508
- data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.h +10 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.c +28 -16
- data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.c +23 -13
- data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.c +69 -35
- data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.c +29 -16
- data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.c +51 -26
- data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.c +32 -17
- data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +161 -79
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +84 -42
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +48 -26
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +26 -14
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +50 -26
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +36 -19
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.c +538 -261
- data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.c +86 -43
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.c +49 -26
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.c +27 -15
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.c +87 -44
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.c +37 -20
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.c +30 -17
- data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.c +41 -23
- data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.c +62 -33
- data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.c +36 -19
- data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.c +36 -20
- data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.c +42 -23
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.c +76 -39
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.c +45 -24
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +41 -23
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.c +53 -29
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +29 -16
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.c +58 -32
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +207 -103
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.c +95 -49
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.c +38 -20
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +60 -31
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +67 -36
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.c +31 -17
- data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.c +31 -17
- data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.h +5 -1
- data/src/core/filter/auth/auth_filters.h +9 -28
- data/src/core/filter/auth/client_auth_filter.cc +2 -120
- data/src/core/filter/auth/server_auth_filter.cc +5 -5
- data/src/core/filter/blackboard.h +2 -2
- data/src/core/filter/filter_args.h +46 -22
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
- data/src/core/handshaker/handshaker.cc +31 -22
- data/src/core/handshaker/handshaker.h +5 -2
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +8 -6
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +19 -34
- data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper_registry.h +1 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +597 -0
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +988 -0
- data/src/core/handshaker/security/secure_endpoint.cc +851 -314
- data/src/core/handshaker/security/secure_endpoint.h +25 -0
- data/src/core/handshaker/security/security_handshaker.cc +18 -12
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +13 -7
- data/src/core/lib/address_utils/parse_address.cc +5 -5
- data/src/core/lib/address_utils/parse_address.h +2 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +9 -9
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
- data/src/core/lib/channel/channel_args.cc +16 -1
- data/src/core/lib/channel/channel_args.h +9 -2
- data/src/core/lib/channel/channel_stack.cc +61 -29
- data/src/core/lib/channel/channel_stack.h +23 -7
- data/src/core/lib/channel/channel_stack_builder.cc +8 -4
- data/src/core/lib/channel/channel_stack_builder.h +10 -9
- data/src/core/lib/channel/channel_stack_builder_impl.cc +8 -13
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -8
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/promise_based_filter.cc +147 -97
- data/src/core/lib/channel/promise_based_filter.h +753 -328
- data/src/core/lib/compression/compression_internal.cc +6 -6
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +8 -8
- data/src/core/lib/debug/trace.cc +2 -5
- data/src/core/lib/debug/trace.h +10 -0
- data/src/core/lib/debug/trace_flags.cc +4 -4
- data/src/core/lib/debug/trace_flags.h +2 -2
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +185 -64
- data/src/core/lib/event_engine/ares_resolver.h +55 -7
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +20 -10
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +37 -9
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +23 -7
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +4 -4
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
- data/src/core/lib/event_engine/default_event_engine.cc +1 -1
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/blocking_dns.h +46 -0
- data/src/core/lib/event_engine/extensions/channelz.h +66 -0
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- data/src/core/lib/event_engine/extensions/tcp_trace.h +10 -3
- data/src/core/lib/event_engine/grpc_polled_fd.h +6 -1
- data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +147 -177
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +21 -23
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +104 -145
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +16 -16
- data/src/core/lib/event_engine/posix_engine/event_poller.h +20 -25
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +13 -25
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +33 -22
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +7 -3
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -7
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +4 -5
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +7 -10
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +4 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +179 -126
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +46 -50
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +514 -288
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +79 -72
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +56 -44
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +9 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +40 -150
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +7 -6
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +4 -720
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +12 -172
- data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +36 -25
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +14 -12
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +119 -153
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +28 -96
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +27 -26
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +7 -3
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +37 -63
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +7 -3
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +14 -8
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/query_extensions.h +10 -21
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
- data/src/core/lib/event_engine/resolved_address.cc +3 -3
- data/src/core/lib/event_engine/shim.cc +14 -8
- data/src/core/lib/event_engine/shim.h +4 -0
- data/src/core/lib/event_engine/slice.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +25 -24
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +15 -13
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +6 -5
- data/src/core/lib/event_engine/utils.cc +35 -1
- data/src/core/lib/event_engine/utils.h +4 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +38 -33
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +6 -2
- data/src/core/lib/event_engine/windows/iocp.cc +11 -11
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/win_socket.h +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +18 -18
- data/src/core/lib/event_engine/windows/windows_endpoint.h +5 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +20 -19
- data/src/core/lib/event_engine/windows/windows_engine.h +4 -6
- data/src/core/lib/event_engine/windows/windows_listener.cc +24 -12
- data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
- data/src/core/lib/experiments/config.cc +4 -4
- data/src/core/lib/experiments/experiments.cc +591 -165
- data/src/core/lib/experiments/experiments.h +229 -89
- data/src/core/lib/iomgr/buffer_list.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +4 -4
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/closure.h +2 -2
- data/src/core/lib/iomgr/combiner.cc +5 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +8 -5
- data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -9
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
- data/src/core/lib/iomgr/error.cc +1 -1
- data/src/core/lib/iomgr/error.h +2 -2
- data/src/core/lib/iomgr/error_cfstream.cc +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +25 -16
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +21 -19
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.h +4 -10
- data/src/core/lib/iomgr/fork_posix.cc +1 -8
- data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +9 -9
- data/src/core/lib/iomgr/iomgr.cc +1 -4
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +4 -4
- data/src/core/lib/iomgr/resolve_address.cc +1 -1
- data/src/core/lib/iomgr/resolve_address.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +37 -47
- data/src/core/lib/iomgr/resolve_address_posix.h +15 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +23 -46
- data/src/core/lib/iomgr/resolve_address_windows.h +15 -2
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -4
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/socket_windows.cc +6 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +22 -14
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +75 -67
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +7 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +84 -33
- data/src/core/lib/iomgr/tcp_windows.cc +11 -10
- data/src/core/lib/iomgr/timer_generic.cc +5 -5
- data/src/core/lib/iomgr/timer_manager.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/vsock.h +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/promise/activity.cc +3 -3
- data/src/core/lib/promise/activity.h +14 -12
- data/src/core/lib/promise/all_ok.h +3 -3
- data/src/core/lib/promise/arena_promise.h +66 -9
- data/src/core/lib/promise/context.h +3 -3
- data/src/core/lib/promise/detail/join_state.h +10 -10
- data/src/core/lib/promise/detail/promise_factory.h +11 -1
- data/src/core/lib/promise/detail/promise_like.h +133 -2
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +896 -16
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
- data/src/core/lib/promise/for_each.h +8 -8
- data/src/core/lib/promise/if.h +21 -1
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/interceptor_list.h +5 -5
- data/src/core/lib/promise/latch.h +9 -9
- data/src/core/lib/promise/loop.h +67 -5
- data/src/core/lib/promise/map.h +48 -7
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +426 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.cc +87 -25
- data/src/core/lib/promise/party.h +84 -15
- data/src/core/lib/promise/pipe.h +31 -17
- data/src/core/lib/promise/poll.h +16 -5
- data/src/core/lib/promise/promise.h +2 -2
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +5 -0
- data/src/core/lib/promise/sleep.cc +9 -4
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +15 -8
- data/src/core/lib/promise/try_join.h +5 -5
- data/src/core/lib/promise/try_seq.h +10 -5
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/api.cc +1 -1
- data/src/core/lib/resource_quota/arena.cc +1 -1
- data/src/core/lib/resource_quota/arena.h +34 -2
- data/src/core/lib/resource_quota/connection_quota.cc +9 -7
- data/src/core/lib/resource_quota/connection_quota.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +145 -28
- data/src/core/lib/resource_quota/memory_quota.h +72 -27
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +9 -1
- data/src/core/lib/resource_quota/resource_quota.cc +23 -4
- data/src/core/lib/resource_quota/resource_quota.h +5 -1
- data/src/core/lib/resource_quota/stream_quota.cc +22 -0
- data/src/core/lib/resource_quota/stream_quota.h +31 -0
- data/src/core/lib/resource_quota/telemetry.h +55 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- data/src/core/lib/resource_quota/thread_quota.h +1 -1
- data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
- data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
- data/src/core/lib/security/authorization/audit_logging.cc +7 -7
- data/src/core/lib/security/authorization/audit_logging.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -5
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
- data/src/core/lib/security/authorization/matchers.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/slice/percent_encoding.cc +1 -1
- data/src/core/lib/slice/slice.cc +1 -1
- data/src/core/lib/slice/slice.h +7 -2
- data/src/core/lib/slice/slice_buffer.cc +1 -1
- data/src/core/lib/slice/slice_buffer.h +6 -0
- data/src/core/lib/slice/slice_internal.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +65 -31
- data/src/core/lib/surface/call.h +19 -11
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/call_utils.cc +7 -7
- data/src/core/lib/surface/call_utils.h +85 -20
- data/src/core/lib/surface/channel.cc +6 -5
- data/src/core/lib/surface/channel.h +13 -3
- data/src/core/lib/surface/channel_create.cc +145 -6
- data/src/core/lib/surface/channel_create.h +5 -1
- data/src/core/lib/surface/channel_init.cc +239 -65
- data/src/core/lib/surface/channel_init.h +90 -10
- data/src/core/lib/surface/completion_queue.cc +23 -24
- data/src/core/lib/surface/completion_queue_factory.cc +7 -7
- data/src/core/lib/surface/connection_context.h +45 -2
- data/src/core/lib/surface/filter_stack_call.cc +43 -40
- data/src/core/lib/surface/filter_stack_call.h +6 -7
- data/src/core/lib/surface/init.cc +12 -21
- data/src/core/lib/surface/lame_client.cc +2 -2
- data/src/core/lib/surface/lame_client.h +3 -3
- data/src/core/lib/surface/legacy_channel.cc +13 -15
- data/src/core/lib/surface/legacy_channel.h +4 -2
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/validate_metadata.h +3 -3
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +5 -5
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/connectivity_state.h +2 -2
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/lib/transport/status_conversion.cc +7 -34
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +5 -5
- data/src/core/lib/transport/transport.h +65 -4
- data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/load_balancing/address_filtering.cc +1 -1
- data/src/core/load_balancing/address_filtering.h +2 -2
- data/src/core/load_balancing/backend_metric_parser.cc +13 -19
- data/src/core/load_balancing/backend_metric_parser.h +1 -1
- data/src/core/load_balancing/child_policy_handler.cc +10 -12
- data/src/core/load_balancing/child_policy_handler.h +2 -2
- data/src/core/load_balancing/delegating_helper.h +4 -5
- data/src/core/load_balancing/endpoint_list.cc +34 -7
- data/src/core/load_balancing/endpoint_list.h +2 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +10 -8
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +6 -2
- data/src/core/load_balancing/grpclb/grpclb.cc +39 -50
- data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
- data/src/core/load_balancing/health_check_client.cc +16 -18
- data/src/core/load_balancing/health_check_client_internal.h +5 -5
- data/src/core/load_balancing/lb_policy.h +12 -11
- data/src/core/load_balancing/lb_policy_factory.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +3 -3
- data/src/core/load_balancing/lb_policy_registry.h +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +14 -16
- data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +13 -20
- data/src/core/load_balancing/pick_first/pick_first.cc +80 -40
- data/src/core/load_balancing/priority/priority.cc +29 -30
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
- data/src/core/load_balancing/rls/rls.cc +29 -28
- data/src/core/load_balancing/round_robin/round_robin.cc +18 -19
- data/src/core/load_balancing/subchannel_interface.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +46 -45
- data/src/core/load_balancing/weighted_target/weighted_target.cc +17 -23
- data/src/core/load_balancing/xds/cds.cc +91 -38
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +29 -44
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +69 -48
- data/src/core/load_balancing/xds/xds_override_host.h +1 -1
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +8 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +7 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -36
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +24 -21
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -3
- data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
- data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
- data/src/core/resolver/endpoint_addresses.cc +6 -6
- data/src/core/resolver/endpoint_addresses.h +4 -1
- data/src/core/resolver/fake/fake_resolver.cc +3 -3
- data/src/core/resolver/fake/fake_resolver.h +3 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
- data/src/core/resolver/polling_resolver.cc +8 -8
- data/src/core/resolver/polling_resolver.h +1 -1
- data/src/core/resolver/resolver.h +2 -2
- data/src/core/resolver/resolver_factory.h +2 -2
- data/src/core/resolver/resolver_registry.cc +5 -4
- data/src/core/resolver/resolver_registry.h +1 -1
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +6 -5
- data/src/core/resolver/xds/xds_config.cc +7 -4
- data/src/core/resolver/xds/xds_config.h +12 -7
- data/src/core/resolver/xds/xds_dependency_manager.cc +27 -12
- data/src/core/resolver/xds/xds_dependency_manager.h +5 -4
- data/src/core/resolver/xds/xds_resolver.cc +56 -32
- data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
- data/src/core/server/add_port.cc +87 -0
- data/src/core/server/server.cc +175 -105
- data/src/core/server/server.h +31 -13
- data/src/core/server/server_call_tracer_filter.cc +1 -67
- data/src/core/server/server_call_tracer_filter.h +68 -0
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +6 -6
- data/src/core/server/xds_channel_stack_modifier.cc +3 -2
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +81 -42
- data/src/core/service_config/service_config.h +2 -2
- data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +85 -0
- data/src/core/service_config/service_config_impl.cc +3 -3
- data/src/core/service_config/service_config_impl.h +5 -5
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.cc +55 -59
- data/src/core/telemetry/call_tracer.h +211 -29
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/{ext/transport/chttp2/transport → telemetry}/context_list_entry.h +45 -15
- data/src/core/telemetry/default_tcp_tracer.cc +26 -0
- data/src/core/telemetry/default_tcp_tracer.h +44 -0
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +999 -0
- data/src/core/telemetry/instrument.h +1105 -0
- data/src/core/telemetry/metrics.cc +15 -5
- data/src/core/telemetry/metrics.h +44 -13
- data/src/core/telemetry/stats.h +2 -7
- data/src/core/telemetry/stats_data.cc +541 -492
- data/src/core/telemetry/stats_data.h +470 -298
- data/src/core/telemetry/tcp_tracer.cc +38 -0
- data/src/core/telemetry/tcp_tracer.h +14 -16
- data/src/core/transport/auth_context.cc +23 -4
- data/src/core/transport/auth_context.h +6 -2
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/transport/endpoint_transport.h +90 -0
- data/src/core/transport/endpoint_transport_client_channel_factory.cc +61 -0
- data/src/core/transport/endpoint_transport_client_channel_factory.h +57 -0
- data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +115 -51
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +4 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +118 -54
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +8 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +4 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +16 -8
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +28 -7
- data/src/core/tsi/fake_transport_security.cc +23 -5
- data/src/core/tsi/local_transport_security.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +416 -125
- data/src/core/tsi/ssl_transport_security.h +26 -12
- data/src/core/tsi/ssl_transport_security_utils.cc +31 -10
- data/src/core/tsi/ssl_transport_security_utils.h +6 -2
- data/src/core/tsi/transport_security.h +3 -0
- data/src/core/tsi/transport_security_grpc.cc +16 -0
- data/src/core/tsi/transport_security_grpc.h +37 -3
- data/src/core/tsi/transport_security_interface.h +30 -25
- data/src/core/util/alloc.cc +1 -1
- data/src/core/util/backoff.cc +5 -16
- data/src/core/util/backoff.h +2 -2
- data/src/core/util/chunked_vector.h +4 -4
- data/src/core/util/crash.h +1 -1
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/dual_ref_counted.h +50 -2
- data/src/core/util/event_log.cc +2 -2
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/function_signature.h +80 -0
- data/src/core/util/gcp_metadata_query.cc +10 -9
- data/src/core/util/gcp_metadata_query.h +2 -2
- data/src/core/util/glob.cc +2 -0
- data/src/core/util/grpc_check.cc +24 -0
- data/src/core/util/grpc_check.h +103 -0
- data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
- data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
- data/src/core/util/http_client/format_request.cc +1 -1
- data/src/core/util/http_client/httpcli.cc +17 -10
- data/src/core/util/http_client/httpcli.h +8 -5
- data/src/core/util/http_client/httpcli_security_connector.cc +9 -6
- data/src/core/util/http_client/parser.cc +4 -4
- data/src/core/util/json/json_channel_args.h +1 -1
- data/src/core/util/json/json_object_loader.h +9 -9
- data/src/core/util/json/json_reader.cc +2 -2
- data/src/core/util/json/json_reader.h +1 -1
- data/src/core/util/json/json_util.h +3 -3
- data/src/core/util/json/json_writer.cc +1 -1
- data/src/core/util/latent_see.cc +202 -123
- data/src/core/util/latent_see.h +423 -204
- data/src/core/util/linux/cpu.cc +1 -1
- data/src/core/util/linux/env.cc +3 -1
- data/src/core/util/load_file.cc +1 -1
- data/src/core/util/load_file.h +1 -1
- data/src/core/util/log.cc +7 -3
- data/src/core/util/lru_cache.h +4 -4
- data/src/core/util/matchers.h +1 -1
- data/src/core/util/memory_usage.h +284 -0
- data/src/core/util/mpscq.h +1 -1
- data/src/core/util/notification.h +1 -1
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/posix/cpu.cc +1 -1
- data/src/core/util/posix/directory_reader.cc +3 -2
- data/src/core/util/posix/stat.cc +2 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/posix/thd.cc +2 -2
- data/src/core/util/posix/tmpfile.cc +2 -2
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted.h +2 -2
- data/src/core/util/ref_counted_ptr.h +32 -1
- data/src/core/util/ref_counted_string.h +1 -1
- data/src/core/util/shared_bit_gen.cc +21 -0
- data/src/core/util/shared_bit_gen.h +64 -0
- data/src/core/util/single_set_ptr.h +40 -4
- data/src/core/util/status_helper.cc +8 -8
- data/src/core/util/status_helper.h +1 -1
- data/src/core/util/string.cc +2 -2
- data/src/core/util/sync_abseil.cc +1 -1
- data/src/core/util/table.h +1 -1
- data/src/core/util/time.cc +1 -1
- data/src/core/util/time_precise.cc +1 -1
- data/src/core/util/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- data/src/core/util/unique_type_name.h +1 -1
- data/src/core/util/upb_utils.h +48 -1
- data/src/core/util/uri.cc +76 -17
- data/src/core/util/uri.h +13 -8
- data/src/core/util/useful.h +144 -2
- data/src/core/util/validation_errors.cc +2 -2
- data/src/core/util/validation_errors.h +2 -3
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +25 -1
- data/src/core/util/windows/directory_reader.cc +2 -1
- data/src/core/util/windows/stat.cc +2 -2
- data/src/core/util/windows/thd.cc +3 -5
- data/src/core/util/windows/time.cc +1 -1
- data/src/core/util/work_serializer.cc +4 -4
- data/src/core/util/work_serializer.h +2 -2
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
- data/src/core/xds/grpc/certificate_provider_store.h +2 -2
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +35 -8
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +6 -1
- data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +9 -7
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +13 -3
- data/src/core/xds/grpc/xds_certificate_provider.cc +9 -10
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +43 -20
- data/src/core/xds/grpc/xds_client_grpc.h +6 -3
- data/src/core/xds/grpc/xds_cluster.cc +2 -2
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +7 -7
- data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_common_types_parser.cc +143 -63
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_endpoint.h +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -7
- data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
- data/src/core/xds/grpc/xds_health_status.cc +1 -1
- data/src/core/xds/grpc/xds_health_status.h +1 -1
- data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
- data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_filter.h +10 -3
- data/src/core/xds/grpc/xds_http_filter_registry.cc +5 -6
- data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +25 -3
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +5 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +14 -21
- data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +2 -2
- data/src/core/xds/grpc/xds_listener_parser.cc +9 -9
- data/src/core/xds/grpc/xds_listener_parser.h +1 -1
- data/src/core/xds/grpc/xds_matcher.cc +277 -0
- data/src/core/xds/grpc/xds_matcher.h +432 -0
- data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
- data/src/core/xds/grpc/xds_matcher_action.h +48 -0
- data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
- data/src/core/xds/grpc/xds_matcher_context.h +46 -0
- data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
- data/src/core/xds/grpc/xds_matcher_input.h +105 -0
- data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
- data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
- data/src/core/xds/grpc/xds_metadata.cc +4 -3
- data/src/core/xds/grpc/xds_metadata.h +3 -3
- data/src/core/xds/grpc/xds_metadata_parser.cc +42 -66
- data/src/core/xds/grpc/xds_metadata_parser.h +0 -2
- data/src/core/xds/grpc/xds_route_config.cc +3 -3
- data/src/core/xds/grpc/xds_route_config_parser.cc +84 -129
- data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
- data/src/core/xds/grpc/xds_routing.cc +6 -6
- data/src/core/xds/grpc/xds_routing.h +2 -2
- data/src/core/xds/grpc/xds_server_grpc.cc +65 -15
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +29 -11
- data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
- data/src/core/xds/xds_client/lrs_client.cc +9 -9
- data/src/core/xds/xds_client/lrs_client.h +4 -4
- data/src/core/xds/xds_client/xds_api.h +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +44 -23
- data/src/core/xds/xds_client/xds_client.h +5 -5
- data/src/core/xds/xds_client/xds_locality.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
- data/src/core/xds/xds_client/xds_transport.h +2 -2
- data/src/ruby/ext/grpc/extconf.rb +17 -13
- data/src/ruby/ext/grpc/rb_call.c +1 -9
- data/src/ruby/ext/grpc/rb_channel.c +70 -557
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -3
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/grpc.rb +7 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +2 -6
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +4 -5
- data/src/ruby/spec/spec_helper.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +2 -2
- data/third_party/abseil-cpp/absl/algorithm/container.h +81 -67
- data/third_party/abseil-cpp/absl/base/attributes.h +142 -23
- data/third_party/abseil-cpp/absl/base/call_once.h +18 -16
- data/third_party/abseil-cpp/absl/base/config.h +23 -132
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +106 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +5 -1
- data/third_party/abseil-cpp/absl/base/internal/tracing.cc +39 -0
- data/third_party/abseil-cpp/absl/base/internal/tracing.h +81 -0
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +0 -10
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +17 -0
- data/third_party/abseil-cpp/absl/base/macros.h +35 -4
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +124 -56
- data/third_party/abseil-cpp/absl/base/optimization.h +8 -12
- data/third_party/abseil-cpp/absl/base/options.h +7 -81
- data/third_party/abseil-cpp/absl/base/policy_checks.h +9 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +891 -0
- data/third_party/abseil-cpp/absl/container/btree_set.h +826 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -15
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +22 -3
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +23 -4
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +10 -6
- data/third_party/abseil-cpp/absl/container/internal/btree.h +3149 -0
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +867 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +10 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +6 -9
- data/third_party/abseil-cpp/absl/container/internal/layout.h +27 -43
- data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1462 -263
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1170 -1547
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +56 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +21 -7
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +12 -37
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -21
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +7 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -8
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/leak_check.cc +73 -0
- data/third_party/abseil-cpp/absl/debugging/leak_check.h +150 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +67 -18
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +1 -0
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +9 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +18 -15
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +14 -5
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +23 -11
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +4 -0
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +3 -0
- data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +13 -12
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/flags/usage_config.cc +9 -4
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +44 -2
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +14 -18
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +257 -127
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +27 -72
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +2 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +43 -38
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +124 -99
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +158 -64
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +140 -83
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -5
- data/third_party/abseil-cpp/absl/log/internal/proto.h +28 -18
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +107 -0
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +8 -1
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +5 -2
- data/third_party/abseil-cpp/absl/log/vlog_is_on.h +2 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +62 -181
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/int128.h +15 -3
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +6 -4
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +6 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +3 -1
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +3 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +12 -12
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +10 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +4 -2
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +3 -2
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -7
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +5 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/platform.h +12 -12
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +57 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +0 -1
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +1 -4
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +2 -3
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -2
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -1
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +2 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +5 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +10 -7
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +44 -29
- data/third_party/abseil-cpp/absl/strings/ascii.h +62 -22
- data/third_party/abseil-cpp/absl/strings/charconv.cc +25 -29
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/charset.h +3 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +99 -102
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +186 -197
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +53 -22
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -0
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/match.h +21 -11
- data/third_party/abseil-cpp/absl/strings/numbers.cc +55 -33
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +41 -30
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/str_split.h +18 -1
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +46 -50
- data/third_party/abseil-cpp/absl/strings/strip.h +11 -8
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +16 -10
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +6 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +39 -13
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +10 -2
- data/third_party/abseil-cpp/absl/synchronization/notification.h +12 -2
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +18 -58
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +3 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +2 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +2 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +3 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +2 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +92 -112
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -4
- data/third_party/abseil-cpp/absl/time/time.h +89 -23
- data/third_party/abseil-cpp/absl/types/internal/span.h +3 -2
- data/third_party/abseil-cpp/absl/types/optional.h +7 -745
- data/third_party/abseil-cpp/absl/types/span.h +98 -54
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- data/third_party/boringssl-with-bazel/src/crypto/aes/aes.cc +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.cc +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.cc +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +19 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.cc +79 -48
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.cc +11 -19
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.cc +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +0 -35
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.cc +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/bn/convert.cc +31 -47
- data/third_party/boringssl-with-bazel/src/crypto/bn/div.cc +100 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn/exponentiation.cc +166 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn/sqrt.cc +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.cc +14 -8
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/cipher/derive_key.cc +13 -15
- data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aeseax.cc +289 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aesgcmsiv.cc +179 -102
- data/third_party/boringssl-with-bazel/src/crypto/cipher/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/cms/cms.cc +172 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.cc +28 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +11 -9
- data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.cc +0 -6
- data/third_party/boringssl-with-bazel/src/crypto/crypto.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.cc +13 -14
- data/third_party/boringssl-with-bazel/src/crypto/dh/params.cc +27 -61
- data/third_party/boringssl-with-bazel/src/crypto/digest/digest_extra.cc +16 -8
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.cc +112 -122
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.cc +23 -35
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec/ec_asn1.cc +47 -63
- data/third_party/boringssl-with-bazel/src/crypto/ec/hash_to_curve.cc +60 -68
- data/third_party/boringssl-with-bazel/src/crypto/ec/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/ecdsa/ecdsa_asn1.cc +11 -17
- data/third_party/boringssl-with-bazel/src/crypto/err/err.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.cc +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.cc +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/sign.cc +23 -42
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.cc.inc +29 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/gcm.cc.inc +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +16 -45
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc +15 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.cc +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +101 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.cc.inc +96 -187
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.cc.inc +24 -512
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.cc.inc +58 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.cc.inc +29 -45
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +27 -25
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.cc.inc +7 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.cc.inc +27 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.cc.inc +34 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.cc.inc +102 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.cc.inc +3 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.cc.inc +1 -78
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.cc.inc +10 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +15 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.cc.inc +40 -53
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.cc.inc +57 -76
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.cc.inc +4 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.cc.inc +37 -52
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.cc.inc +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.cc.inc +28 -39
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.cc.inc +6 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/keccak/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/mldsa.cc.inc +335 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/mlkem.cc.inc +265 -33
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.cc.inc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.cc.inc +19 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.cc.inc +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc +121 -138
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.cc.inc +96 -83
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +8 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +235 -60
- data/third_party/boringssl-with-bazel/src/crypto/fuzzer_mode.cc +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -30
- data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/md5/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/mem.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.cc +2 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.cc +8 -13
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +22 -8
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.cc +19 -17
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.cc +134 -136
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +14 -8
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.cc +25 -21
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.cc +36 -52
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.cc +97 -79
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/rand/deterministic.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/fork_detect.cc +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand/getentropy.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/{sysrand_internal.h → internal.h} +22 -4
- data/third_party/boringssl-with-bazel/src/crypto/rand/ios.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/trusty.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/urandom.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/windows.cc +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/rsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_crypt.cc +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/spake2plus/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.cc +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.cc +8 -12
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +15 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_conf.cc +16 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.cc +18 -21
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.cc +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.cc +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.cc +10 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.cc +64 -85
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.cc +16 -32
- data/third_party/boringssl-with-bazel/src/gen/crypto/err_data.cc +576 -567
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +16 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -54
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +8 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cms.h +146 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +23 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +19 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +4 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +10 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +19 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +291 -40
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +0 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +7 -4
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +32 -26
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +49 -49
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +253 -50
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +12 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +7 -5
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +24 -32
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +93 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +18 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +83 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +173 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +5 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +28 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +31 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +13 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +13 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +2 -5
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- data/third_party/upb/upb/hash/common.c +310 -189
- data/third_party/upb/upb/hash/common.h +44 -43
- data/third_party/upb/upb/hash/int_table.h +29 -5
- data/third_party/upb/upb/hash/str_table.h +6 -0
- data/third_party/upb/upb/mem/arena.c +180 -57
- data/third_party/upb/upb/mem/arena.h +10 -0
- data/third_party/upb/upb/mem/internal/arena.h +62 -24
- data/third_party/upb/upb/message/accessors.c +1 -5
- data/third_party/upb/upb/message/array.c +7 -6
- data/third_party/upb/upb/message/array.h +4 -4
- data/third_party/upb/upb/message/internal/accessors.h +3 -3
- data/third_party/upb/upb/message/internal/extension.c +0 -12
- data/third_party/upb/upb/message/internal/extension.h +0 -4
- data/third_party/upb/upb/message/internal/iterator.h +3 -3
- data/third_party/upb/upb/message/internal/map.h +75 -20
- data/third_party/upb/upb/message/internal/map_sorter.h +10 -2
- data/third_party/upb/upb/message/internal/message.h +53 -5
- data/third_party/upb/upb/message/map.c +68 -20
- data/third_party/upb/upb/message/map.h +8 -1
- data/third_party/upb/upb/message/map_gencode_util.h +3 -45
- data/third_party/upb/upb/message/map_sorter.c +32 -8
- data/third_party/upb/upb/message/merge.h +3 -3
- data/third_party/upb/upb/message/message.c +120 -14
- data/third_party/upb/upb/message/message.h +17 -8
- data/third_party/upb/upb/mini_descriptor/build_enum.c +15 -5
- data/third_party/upb/upb/mini_descriptor/decode.c +18 -2
- data/third_party/upb/upb/mini_descriptor/link.c +4 -0
- data/third_party/upb/upb/mini_table/extension.h +8 -1
- data/third_party/upb/upb/mini_table/extension_registry.c +1 -1
- data/third_party/upb/upb/mini_table/internal/enum.h +1 -1
- data/third_party/upb/upb/mini_table/internal/extension.h +24 -1
- data/third_party/upb/upb/mini_table/internal/field.h +4 -4
- data/third_party/upb/upb/mini_table/internal/message.h +1 -1
- data/third_party/upb/upb/port/def.inc +32 -16
- data/third_party/upb/upb/port/undef.inc +1 -0
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/upb/upb/reflection/descriptor_bootstrap.h +3 -3
- data/third_party/upb/upb/reflection/enum_def.c +4 -4
- data/third_party/upb/upb/reflection/enum_reserved_range.c +1 -1
- data/third_party/upb/upb/reflection/enum_value_def.c +9 -8
- data/third_party/upb/upb/reflection/extension_range.c +1 -2
- data/third_party/upb/upb/reflection/field_def.c +3 -5
- data/third_party/upb/upb/reflection/field_def.h +1 -1
- data/third_party/upb/upb/reflection/file_def.c +4 -5
- data/third_party/upb/upb/reflection/internal/def_builder.h +35 -10
- data/third_party/upb/upb/reflection/internal/enum_value_def.h +1 -1
- data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
- data/third_party/upb/upb/reflection/message_def.c +4 -7
- data/third_party/upb/upb/reflection/message_reserved_range.c +1 -1
- data/third_party/upb/upb/reflection/method_def.c +1 -1
- data/third_party/upb/upb/reflection/oneof_def.c +3 -3
- data/third_party/upb/upb/reflection/service_def.c +2 -5
- data/third_party/upb/upb/text/encode.c +16 -0
- data/third_party/upb/upb/text/internal/encode.h +2 -1
- data/third_party/upb/upb/wire/decode.c +104 -72
- data/third_party/upb/upb/wire/encode.c +37 -13
- data/third_party/upb/upb/wire/internal/decode_fast.c +2 -2
- data/third_party/upb/upb/wire/internal/decode_fast.h +4 -0
- metadata +298 -79
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/executor.cc +0 -441
- data/src/core/lib/iomgr/executor.h +0 -119
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/src/core/util/ring_buffer.h +0 -122
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/base/internal/nullability_impl.h +0 -108
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/polyval.cc.inc +0 -89
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
|
@@ -0,0 +1,2076 @@
|
|
|
1
|
+
//
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2024 gRPC authors.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
// you may not use this file except in compliance with the License.
|
|
7
|
+
// You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
// See the License for the specific language governing permissions and
|
|
15
|
+
// limitations under the License.
|
|
16
|
+
//
|
|
17
|
+
//
|
|
18
|
+
|
|
19
|
+
#include "src/core/ext/transport/chttp2/transport/http2_client_transport.h"
|
|
20
|
+
|
|
21
|
+
#include <grpc/event_engine/event_engine.h>
|
|
22
|
+
#include <grpc/grpc.h>
|
|
23
|
+
#include <grpc/support/port_platform.h>
|
|
24
|
+
#include <limits.h>
|
|
25
|
+
|
|
26
|
+
#include <algorithm>
|
|
27
|
+
#include <cstddef>
|
|
28
|
+
#include <cstdint>
|
|
29
|
+
#include <iterator>
|
|
30
|
+
#include <memory>
|
|
31
|
+
#include <optional>
|
|
32
|
+
#include <string>
|
|
33
|
+
#include <utility>
|
|
34
|
+
#include <vector>
|
|
35
|
+
|
|
36
|
+
#include "src/core/call/call_spine.h"
|
|
37
|
+
#include "src/core/call/message.h"
|
|
38
|
+
#include "src/core/call/metadata.h"
|
|
39
|
+
#include "src/core/call/metadata_batch.h"
|
|
40
|
+
#include "src/core/call/metadata_info.h"
|
|
41
|
+
#include "src/core/channelz/channelz.h"
|
|
42
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
43
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control_manager.h"
|
|
44
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
45
|
+
#include "src/core/ext/transport/chttp2/transport/goaway.h"
|
|
46
|
+
#include "src/core/ext/transport/chttp2/transport/header_assembler.h"
|
|
47
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
48
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings_promises.h"
|
|
49
|
+
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
50
|
+
#include "src/core/ext/transport/chttp2/transport/http2_transport.h"
|
|
51
|
+
#include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
|
|
52
|
+
#include "src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h"
|
|
53
|
+
#include "src/core/ext/transport/chttp2/transport/keepalive.h"
|
|
54
|
+
#include "src/core/ext/transport/chttp2/transport/message_assembler.h"
|
|
55
|
+
#include "src/core/ext/transport/chttp2/transport/ping_promise.h"
|
|
56
|
+
#include "src/core/ext/transport/chttp2/transport/stream.h"
|
|
57
|
+
#include "src/core/ext/transport/chttp2/transport/stream_data_queue.h"
|
|
58
|
+
#include "src/core/ext/transport/chttp2/transport/transport_common.h"
|
|
59
|
+
#include "src/core/lib/channel/channel_args.h"
|
|
60
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
|
61
|
+
#include "src/core/lib/promise/activity.h"
|
|
62
|
+
#include "src/core/lib/promise/context.h"
|
|
63
|
+
#include "src/core/lib/promise/for_each.h"
|
|
64
|
+
#include "src/core/lib/promise/if.h"
|
|
65
|
+
#include "src/core/lib/promise/loop.h"
|
|
66
|
+
#include "src/core/lib/promise/map.h"
|
|
67
|
+
#include "src/core/lib/promise/match_promise.h"
|
|
68
|
+
#include "src/core/lib/promise/party.h"
|
|
69
|
+
#include "src/core/lib/promise/poll.h"
|
|
70
|
+
#include "src/core/lib/promise/promise.h"
|
|
71
|
+
#include "src/core/lib/promise/race.h"
|
|
72
|
+
#include "src/core/lib/promise/sleep.h"
|
|
73
|
+
#include "src/core/lib/promise/try_seq.h"
|
|
74
|
+
#include "src/core/lib/resource_quota/arena.h"
|
|
75
|
+
#include "src/core/lib/resource_quota/resource_quota.h"
|
|
76
|
+
#include "src/core/lib/slice/slice.h"
|
|
77
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
78
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
|
79
|
+
#include "src/core/lib/transport/promise_endpoint.h"
|
|
80
|
+
#include "src/core/lib/transport/transport.h"
|
|
81
|
+
#include "src/core/util/debug_location.h"
|
|
82
|
+
#include "src/core/util/grpc_check.h"
|
|
83
|
+
#include "src/core/util/latent_see.h"
|
|
84
|
+
#include "src/core/util/orphanable.h"
|
|
85
|
+
#include "src/core/util/ref_counted_ptr.h"
|
|
86
|
+
#include "src/core/util/sync.h"
|
|
87
|
+
#include "src/core/util/time.h"
|
|
88
|
+
#include "absl/base/thread_annotations.h"
|
|
89
|
+
#include "absl/container/flat_hash_map.h"
|
|
90
|
+
#include "absl/log/log.h"
|
|
91
|
+
#include "absl/status/status.h"
|
|
92
|
+
#include "absl/strings/cord.h"
|
|
93
|
+
#include "absl/strings/str_cat.h"
|
|
94
|
+
#include "absl/strings/string_view.h"
|
|
95
|
+
#include "absl/types/span.h"
|
|
96
|
+
|
|
97
|
+
namespace grpc_core {
|
|
98
|
+
namespace http2 {
|
|
99
|
+
|
|
100
|
+
// TODO(akshitpatel)(tjagtap) [PH2][P2] : When settings frame increases incoming
|
|
101
|
+
// window size, our transport must make the streams that were blocked on stream
|
|
102
|
+
// flow control as writeable.
|
|
103
|
+
|
|
104
|
+
// As a gRPC server never initiates a stream, the last incoming stream id on
|
|
105
|
+
// the client side will always be 0.
|
|
106
|
+
constexpr uint32_t kLastIncomingStreamIdClient = 0;
|
|
107
|
+
|
|
108
|
+
using grpc_event_engine::experimental::EventEngine;
|
|
109
|
+
using StreamWritabilityUpdate =
|
|
110
|
+
StreamDataQueue<ClientMetadataHandle>::StreamWritabilityUpdate;
|
|
111
|
+
|
|
112
|
+
// Experimental : This is just the initial skeleton of class
|
|
113
|
+
// and it is functions. The code will be written iteratively.
|
|
114
|
+
// Do not use or edit any of these functions unless you are
|
|
115
|
+
// familiar with the PH2 project (Moving chttp2 to promises.)
|
|
116
|
+
// TODO(tjagtap) : [PH2][P3] : Delete this comment when http2
|
|
117
|
+
// rollout begins
|
|
118
|
+
|
|
119
|
+
template <typename Factory>
|
|
120
|
+
void Http2ClientTransport::SpawnInfallible(RefCountedPtr<Party> party,
|
|
121
|
+
absl::string_view name,
|
|
122
|
+
Factory&& factory) {
|
|
123
|
+
party->Spawn(name, std::forward<Factory>(factory), [](Empty) {});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
template <typename Factory>
|
|
127
|
+
void Http2ClientTransport::SpawnInfallibleTransportParty(absl::string_view name,
|
|
128
|
+
Factory&& factory) {
|
|
129
|
+
SpawnInfallible(general_party_, name, std::forward<Factory>(factory));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
template <typename Factory>
|
|
133
|
+
void Http2ClientTransport::SpawnGuardedTransportParty(absl::string_view name,
|
|
134
|
+
Factory&& factory) {
|
|
135
|
+
general_party_->Spawn(
|
|
136
|
+
name, std::forward<Factory>(factory),
|
|
137
|
+
[self = RefAsSubclass<Http2ClientTransport>()](absl::Status status) {
|
|
138
|
+
if (!status.ok()) {
|
|
139
|
+
GRPC_UNUSED absl::Status error = self->HandleError(
|
|
140
|
+
/*stream_id=*/std::nullopt, ToHttpOkOrConnError(status));
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
void Http2ClientTransport::PerformOp(grpc_transport_op* op) {
|
|
146
|
+
// Notes : Refer : src/core/ext/transport/chaotic_good/client_transport.cc
|
|
147
|
+
// Functions : StartConnectivityWatch, StopConnectivityWatch, PerformOp
|
|
148
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport PerformOp Begin";
|
|
149
|
+
bool did_stuff = false;
|
|
150
|
+
if (op->start_connectivity_watch != nullptr) {
|
|
151
|
+
StartConnectivityWatch(op->start_connectivity_watch_state,
|
|
152
|
+
std::move(op->start_connectivity_watch));
|
|
153
|
+
did_stuff = true;
|
|
154
|
+
}
|
|
155
|
+
if (op->stop_connectivity_watch != nullptr) {
|
|
156
|
+
StopConnectivityWatch(op->stop_connectivity_watch);
|
|
157
|
+
did_stuff = true;
|
|
158
|
+
}
|
|
159
|
+
GRPC_CHECK(!op->set_accept_stream)
|
|
160
|
+
<< "Set_accept_stream not supported on clients";
|
|
161
|
+
GRPC_DCHECK(did_stuff) << "Unimplemented transport perform op ";
|
|
162
|
+
|
|
163
|
+
ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
|
|
164
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport PerformOp End";
|
|
165
|
+
// TODO(tjagtap) : [PH2][P2] :
|
|
166
|
+
// Refer src/core/ext/transport/chttp2/transport/chttp2_transport.cc
|
|
167
|
+
// perform_transport_op_locked
|
|
168
|
+
// Maybe more operations needed to be implemented.
|
|
169
|
+
// TODO(tjagtap) : [PH2][P2] : Consider either not using a transport level
|
|
170
|
+
// lock, or making this run on the Transport party - whatever is better.
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
void Http2ClientTransport::StartConnectivityWatch(
|
|
174
|
+
grpc_connectivity_state state,
|
|
175
|
+
OrphanablePtr<ConnectivityStateWatcherInterface> watcher) {
|
|
176
|
+
MutexLock lock(&transport_mutex_);
|
|
177
|
+
state_tracker_.AddWatcher(state, std::move(watcher));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
void Http2ClientTransport::StopConnectivityWatch(
|
|
181
|
+
ConnectivityStateWatcherInterface* watcher) {
|
|
182
|
+
MutexLock lock(&transport_mutex_);
|
|
183
|
+
state_tracker_.RemoveWatcher(watcher);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
void Http2ClientTransport::ReportDisconnection(
|
|
187
|
+
const absl::Status& status, StateWatcher::DisconnectInfo disconnect_info,
|
|
188
|
+
const char* reason) {
|
|
189
|
+
MutexLock lock(&transport_mutex_);
|
|
190
|
+
ReportDisconnectionLocked(status, disconnect_info, reason);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
void Http2ClientTransport::ReportDisconnectionLocked(
|
|
194
|
+
const absl::Status& status, StateWatcher::DisconnectInfo disconnect_info,
|
|
195
|
+
const char* reason) {
|
|
196
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ReportDisconnection: status="
|
|
197
|
+
<< status.ToString() << "; reason=" << reason;
|
|
198
|
+
state_tracker_.SetState(GRPC_CHANNEL_TRANSIENT_FAILURE, status, reason);
|
|
199
|
+
NotifyStateWatcherOnDisconnectLocked(status, disconnect_info);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
void Http2ClientTransport::StartWatch(RefCountedPtr<StateWatcher> watcher) {
|
|
203
|
+
MutexLock lock(&transport_mutex_);
|
|
204
|
+
GRPC_CHECK(watcher_ == nullptr);
|
|
205
|
+
watcher_ = std::move(watcher);
|
|
206
|
+
if (is_transport_closed_) {
|
|
207
|
+
// TODO(tjagtap) : [PH2][P2] : Provide better status message and
|
|
208
|
+
// disconnect info here.
|
|
209
|
+
NotifyStateWatcherOnDisconnectLocked(
|
|
210
|
+
absl::UnknownError("transport closed before watcher started"), {});
|
|
211
|
+
} else {
|
|
212
|
+
// TODO(tjagtap) : [PH2][P2] : Notify the state watcher of the current
|
|
213
|
+
// value of the peer's MAX_CONCURRENT_STREAMS setting.
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
void Http2ClientTransport::StopWatch(RefCountedPtr<StateWatcher> watcher) {
|
|
218
|
+
MutexLock lock(&transport_mutex_);
|
|
219
|
+
if (watcher_ == watcher) watcher_.reset();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
void Http2ClientTransport::NotifyStateWatcherOnDisconnectLocked(
|
|
223
|
+
absl::Status status, StateWatcher::DisconnectInfo disconnect_info) {
|
|
224
|
+
if (watcher_ == nullptr) return;
|
|
225
|
+
event_engine_->Run([watcher = std::move(watcher_), status = std::move(status),
|
|
226
|
+
disconnect_info]() mutable {
|
|
227
|
+
ExecCtx exec_ctx;
|
|
228
|
+
watcher->OnDisconnect(std::move(status), disconnect_info);
|
|
229
|
+
watcher.reset(); // Before ExecCtx goes out of scope.
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
void Http2ClientTransport::Orphan() {
|
|
234
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Orphan Begin";
|
|
235
|
+
// Accessing general_party here is not advisable. It may so happen that
|
|
236
|
+
// the party is already freed/may free up any time. The only guarantee here
|
|
237
|
+
// is that the transport is still valid.
|
|
238
|
+
SourceDestructing();
|
|
239
|
+
MaybeSpawnCloseTransport(
|
|
240
|
+
ToHttpOkOrConnError(absl::UnavailableError("Orphaned")));
|
|
241
|
+
Unref();
|
|
242
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Orphan End";
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
246
|
+
// Processing each type of frame
|
|
247
|
+
|
|
248
|
+
Http2Status Http2ClientTransport::ProcessHttp2DataFrame(Http2DataFrame frame) {
|
|
249
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-data
|
|
250
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
251
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame { stream_id="
|
|
252
|
+
<< frame.stream_id << ", end_stream=" << frame.end_stream
|
|
253
|
+
<< ", payload=" << MaybeTruncatePayload(frame.payload)
|
|
254
|
+
<< ", payload length=" << frame.payload.Length() << "}";
|
|
255
|
+
|
|
256
|
+
// TODO(akshitpatel) : [PH2][P3] : Investigate if we should do this even if
|
|
257
|
+
// the function returns a non-ok status?
|
|
258
|
+
ping_manager_->ReceivedDataFrame();
|
|
259
|
+
|
|
260
|
+
// Lookup stream
|
|
261
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
262
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame LookupStream";
|
|
263
|
+
RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
|
|
264
|
+
|
|
265
|
+
ValueOrHttp2Status<chttp2::FlowControlAction> flow_control_action =
|
|
266
|
+
ProcessIncomingDataFrameFlowControl(current_frame_header_, flow_control_,
|
|
267
|
+
stream);
|
|
268
|
+
if (!flow_control_action.IsOk()) {
|
|
269
|
+
return ValueOrHttp2Status<chttp2::FlowControlAction>::TakeStatus(
|
|
270
|
+
std::move(flow_control_action));
|
|
271
|
+
}
|
|
272
|
+
ActOnFlowControlAction(flow_control_action.value(), stream);
|
|
273
|
+
|
|
274
|
+
if (stream == nullptr) {
|
|
275
|
+
// TODO(tjagtap) : [PH2][P2] : Implement the correct behaviour later.
|
|
276
|
+
// RFC9113 : If a DATA frame is received whose stream is not in the "open"
|
|
277
|
+
// or "half-closed (local)" state, the recipient MUST respond with a stream
|
|
278
|
+
// error (Section 5.4.2) of type STREAM_CLOSED.
|
|
279
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
280
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame { stream_id="
|
|
281
|
+
<< frame.stream_id << "} Lookup Failed";
|
|
282
|
+
return Http2Status::Ok();
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// TODO(akshitpatel) : [PH2][P3] : We should add a check to reset stream if
|
|
286
|
+
// the stream state is kIdle as well.
|
|
287
|
+
|
|
288
|
+
Http2Status stream_status = stream->CanStreamReceiveDataFrames();
|
|
289
|
+
if (!stream_status.IsOk()) {
|
|
290
|
+
return stream_status;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Add frame to assembler
|
|
294
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
295
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame AppendNewDataFrame";
|
|
296
|
+
GrpcMessageAssembler& assembler = stream->assembler;
|
|
297
|
+
Http2Status status =
|
|
298
|
+
assembler.AppendNewDataFrame(frame.payload, frame.end_stream);
|
|
299
|
+
if (!status.IsOk()) {
|
|
300
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2DataFrame "
|
|
301
|
+
"AppendNewDataFrame Failed";
|
|
302
|
+
return status;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// Pass the messages up the stack if it is ready.
|
|
306
|
+
while (true) {
|
|
307
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
308
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame ExtractMessage";
|
|
309
|
+
ValueOrHttp2Status<MessageHandle> result = assembler.ExtractMessage();
|
|
310
|
+
if (!result.IsOk()) {
|
|
311
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
312
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame ExtractMessage Failed";
|
|
313
|
+
return ValueOrHttp2Status<MessageHandle>::TakeStatus(std::move(result));
|
|
314
|
+
}
|
|
315
|
+
MessageHandle message = TakeValue(std::move(result));
|
|
316
|
+
if (message != nullptr) {
|
|
317
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
318
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame SpawnPushMessage "
|
|
319
|
+
<< message->DebugString();
|
|
320
|
+
stream->call.SpawnPushMessage(std::move(message));
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
324
|
+
<< "Http2ClientTransport ProcessHttp2DataFrame While Break";
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// TODO(tjagtap) : [PH2][P2] : List of Tests:
|
|
329
|
+
// 1. Data frame with unknown stream ID
|
|
330
|
+
// 2. Data frame with only half a message and then end stream
|
|
331
|
+
// 3. One data frame with a full message
|
|
332
|
+
// 4. Three data frames with one full message
|
|
333
|
+
// 5. One data frame with three full messages. All messages should be pushed.
|
|
334
|
+
// Will need to mock the call_handler object and test this along with the
|
|
335
|
+
// Header reading code. Because we need a stream in place for the lookup to
|
|
336
|
+
// work.
|
|
337
|
+
return Http2Status::Ok();
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
Http2Status Http2ClientTransport::ProcessHttp2HeaderFrame(
|
|
341
|
+
Http2HeaderFrame frame) {
|
|
342
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-headers
|
|
343
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
344
|
+
<< "Http2ClientTransport ProcessHttp2HeaderFrame Promise { stream_id="
|
|
345
|
+
<< frame.stream_id << ", end_headers=" << frame.end_headers
|
|
346
|
+
<< ", end_stream=" << frame.end_stream
|
|
347
|
+
<< ", payload=" << MaybeTruncatePayload(frame.payload) << " }";
|
|
348
|
+
// State update MUST happen before processing the frame.
|
|
349
|
+
incoming_headers_.OnHeaderReceived(frame);
|
|
350
|
+
|
|
351
|
+
ping_manager_->ReceivedDataFrame();
|
|
352
|
+
|
|
353
|
+
RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
|
|
354
|
+
if (stream == nullptr) {
|
|
355
|
+
// TODO(tjagtap) : [PH2][P3] : Implement this.
|
|
356
|
+
// RFC9113 : The identifier of a newly established stream MUST be
|
|
357
|
+
// numerically greater than all streams that the initiating endpoint has
|
|
358
|
+
// opened or reserved. This governs streams that are opened using a HEADERS
|
|
359
|
+
// frame and streams that are reserved using PUSH_PROMISE. An endpoint that
|
|
360
|
+
// receives an unexpected stream identifier MUST respond with a connection
|
|
361
|
+
// error (Section 5.4.1) of type PROTOCOL_ERROR.
|
|
362
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
363
|
+
<< "Http2ClientTransport ProcessHttp2HeaderFrame Promise { stream_id="
|
|
364
|
+
<< frame.stream_id << "} Lookup Failed";
|
|
365
|
+
return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
|
|
366
|
+
/*stream=*/nullptr, Http2Status::Ok());
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (stream->IsStreamHalfClosedRemote()) {
|
|
370
|
+
return ParseAndDiscardHeaders(
|
|
371
|
+
std::move(frame.payload), frame.end_headers, stream,
|
|
372
|
+
Http2Status::Http2StreamError(
|
|
373
|
+
Http2ErrorCode::kStreamClosed,
|
|
374
|
+
std::string(RFC9113::kHalfClosedRemoteState)));
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if (incoming_headers_.ClientReceivedDuplicateMetadata(
|
|
378
|
+
stream->did_receive_initial_metadata,
|
|
379
|
+
stream->did_receive_trailing_metadata)) {
|
|
380
|
+
return ParseAndDiscardHeaders(
|
|
381
|
+
std::move(frame.payload), frame.end_headers, stream,
|
|
382
|
+
Http2Status::Http2StreamError(
|
|
383
|
+
Http2ErrorCode::kInternalError,
|
|
384
|
+
std::string(GrpcErrors::kTooManyMetadata)));
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
Http2Status append_result = stream->header_assembler.AppendHeaderFrame(frame);
|
|
388
|
+
if (!append_result.IsOk()) {
|
|
389
|
+
// Frame payload is not consumed if AppendHeaderFrame returns a non-OK
|
|
390
|
+
// status. We need to process it to keep our in consistent state.
|
|
391
|
+
return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
|
|
392
|
+
stream, std::move(append_result));
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
Http2Status status = ProcessMetadata(stream);
|
|
396
|
+
if (!status.IsOk()) {
|
|
397
|
+
// Frame payload has been moved to the HeaderAssembler. So calling
|
|
398
|
+
// ParseAndDiscardHeaders with an empty buffer.
|
|
399
|
+
return ParseAndDiscardHeaders(SliceBuffer(), frame.end_headers, stream,
|
|
400
|
+
std::move(status));
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// Frame payload has either been processed or moved to the HeaderAssembler.
|
|
404
|
+
return Http2Status::Ok();
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
Http2Status Http2ClientTransport::ProcessMetadata(
|
|
408
|
+
RefCountedPtr<Stream> stream) {
|
|
409
|
+
HeaderAssembler& assembler = stream->header_assembler;
|
|
410
|
+
CallHandler call = stream->call;
|
|
411
|
+
|
|
412
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessMetadata";
|
|
413
|
+
if (assembler.IsReady()) {
|
|
414
|
+
ValueOrHttp2Status<ServerMetadataHandle> read_result =
|
|
415
|
+
assembler.ReadMetadata(parser_, !incoming_headers_.HeaderHasEndStream(),
|
|
416
|
+
/*is_client=*/true,
|
|
417
|
+
/*max_header_list_size_soft_limit=*/
|
|
418
|
+
incoming_headers_.soft_limit(),
|
|
419
|
+
/*max_header_list_size_hard_limit=*/
|
|
420
|
+
settings_->acked().max_header_list_size());
|
|
421
|
+
if (read_result.IsOk()) {
|
|
422
|
+
ServerMetadataHandle metadata = TakeValue(std::move(read_result));
|
|
423
|
+
if (incoming_headers_.HeaderHasEndStream()) {
|
|
424
|
+
// TODO(tjagtap) : [PH2][P1] : Is this the right way to differentiate
|
|
425
|
+
// between initial and trailing metadata?
|
|
426
|
+
stream->MarkHalfClosedRemote();
|
|
427
|
+
stream->did_receive_trailing_metadata = true;
|
|
428
|
+
BeginCloseStream(stream, /*reset_stream_error_code=*/std::nullopt,
|
|
429
|
+
std::move(metadata));
|
|
430
|
+
} else {
|
|
431
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessMetadata "
|
|
432
|
+
"SpawnPushServerInitialMetadata";
|
|
433
|
+
stream->did_receive_initial_metadata = true;
|
|
434
|
+
call.SpawnPushServerInitialMetadata(std::move(metadata));
|
|
435
|
+
}
|
|
436
|
+
return Http2Status::Ok();
|
|
437
|
+
}
|
|
438
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessMetadata Failed";
|
|
439
|
+
return ValueOrHttp2Status<Arena::PoolPtr<grpc_metadata_batch>>::TakeStatus(
|
|
440
|
+
std::move(read_result));
|
|
441
|
+
}
|
|
442
|
+
return Http2Status::Ok();
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
Http2Status Http2ClientTransport::ProcessHttp2RstStreamFrame(
|
|
446
|
+
Http2RstStreamFrame frame) {
|
|
447
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-rst_stream
|
|
448
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
449
|
+
<< "Http2ClientTransport ProcessHttp2RstStreamFrame { stream_id="
|
|
450
|
+
<< frame.stream_id << ", error_code=" << frame.error_code << " }";
|
|
451
|
+
|
|
452
|
+
Http2ErrorCode error_code = FrameErrorCodeToHttp2ErrorCode(frame.error_code);
|
|
453
|
+
absl::Status status = absl::Status(ErrorCodeToAbslStatusCode(error_code),
|
|
454
|
+
"Reset stream frame received.");
|
|
455
|
+
RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
|
|
456
|
+
if (stream != nullptr) {
|
|
457
|
+
stream->MarkHalfClosedRemote();
|
|
458
|
+
BeginCloseStream(stream, /*reset_stream_error_code=*/std::nullopt,
|
|
459
|
+
CancelledServerMetadataFromStatus(status));
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// In case of stream error, we do not want the Read Loop to be broken. Hence
|
|
463
|
+
// returning an ok status.
|
|
464
|
+
return Http2Status::Ok();
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
Http2Status Http2ClientTransport::ProcessHttp2SettingsFrame(
|
|
468
|
+
Http2SettingsFrame frame) {
|
|
469
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-settings
|
|
470
|
+
|
|
471
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
472
|
+
<< "Http2ClientTransport ProcessHttp2SettingsFrame { ack=" << frame.ack
|
|
473
|
+
<< ", settings length=" << frame.settings.size() << "}";
|
|
474
|
+
|
|
475
|
+
if (!frame.ack) {
|
|
476
|
+
Http2Status status = ValidateSettingsValues(frame.settings);
|
|
477
|
+
if (!status.IsOk()) {
|
|
478
|
+
return status;
|
|
479
|
+
}
|
|
480
|
+
settings_->BufferPeerSettings(std::move(frame.settings));
|
|
481
|
+
SpawnGuardedTransportParty("SettingsAck", TriggerWriteCycle());
|
|
482
|
+
if (GPR_UNLIKELY(!settings_->IsFirstPeerSettingsApplied())) {
|
|
483
|
+
// Apply the first settings before we read any other frames.
|
|
484
|
+
reader_state_.SetPauseReadLoop();
|
|
485
|
+
}
|
|
486
|
+
} else {
|
|
487
|
+
if (settings_->OnSettingsAckReceived()) {
|
|
488
|
+
parser_.hpack_table()->SetMaxBytes(
|
|
489
|
+
settings_->acked().header_table_size());
|
|
490
|
+
ActOnFlowControlAction(flow_control_.SetAckedInitialWindow(
|
|
491
|
+
settings_->acked().initial_window_size()),
|
|
492
|
+
/*stream=*/nullptr);
|
|
493
|
+
} else {
|
|
494
|
+
// TODO(tjagtap) [PH2][P4] : The RFC does not say anything about what
|
|
495
|
+
// should happen if we receive an unsolicited SETTINGS ACK. Decide if we
|
|
496
|
+
// want to respond with any error or just proceed.
|
|
497
|
+
LOG(ERROR) << "Settings ack received without sending settings";
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
return Http2Status::Ok();
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
auto Http2ClientTransport::ProcessHttp2PingFrame(Http2PingFrame frame) {
|
|
505
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-ping
|
|
506
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2PingFrame { ack="
|
|
507
|
+
<< frame.ack << ", opaque=" << frame.opaque << " }";
|
|
508
|
+
return AssertResultType<Http2Status>(If(
|
|
509
|
+
frame.ack,
|
|
510
|
+
[self = RefAsSubclass<Http2ClientTransport>(), opaque = frame.opaque]() {
|
|
511
|
+
// Received a ping ack.
|
|
512
|
+
return self->AckPing(opaque);
|
|
513
|
+
},
|
|
514
|
+
[self = RefAsSubclass<Http2ClientTransport>(), opaque = frame.opaque]() {
|
|
515
|
+
return If(
|
|
516
|
+
self->test_only_ack_pings_,
|
|
517
|
+
[self, opaque]() {
|
|
518
|
+
// TODO(akshitpatel) : [PH2][P2] : Have a counter to track number
|
|
519
|
+
// of pending induced frames (Ping/Settings Ack). This is to
|
|
520
|
+
// ensure that if write is taking a long time, we can stop reads
|
|
521
|
+
// and prioritize writes. RFC9113: PING responses SHOULD be given
|
|
522
|
+
// higher priority than any other frame.
|
|
523
|
+
self->ping_manager_->AddPendingPingAck(opaque);
|
|
524
|
+
// TODO(akshitpatel) : [PH2][P2] : This is done assuming that the
|
|
525
|
+
// other ProcessFrame promises may return stream or connection
|
|
526
|
+
// failures. If this does not turn out to be true, consider
|
|
527
|
+
// returning absl::Status here.
|
|
528
|
+
return Map(self->TriggerWriteCycle(), [](absl::Status status) {
|
|
529
|
+
return ToHttpOkOrConnError(status);
|
|
530
|
+
});
|
|
531
|
+
},
|
|
532
|
+
[]() {
|
|
533
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
534
|
+
<< "Http2ClientTransport ProcessHttp2PingFrame "
|
|
535
|
+
"test_only_ack_pings_ is false. Ignoring the ping "
|
|
536
|
+
"request.";
|
|
537
|
+
return Immediate(Http2Status::Ok());
|
|
538
|
+
});
|
|
539
|
+
}));
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
Http2Status Http2ClientTransport::ProcessHttp2GoawayFrame(
|
|
543
|
+
Http2GoawayFrame frame) {
|
|
544
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-goaway
|
|
545
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
546
|
+
<< "Http2ClientTransport ProcessHttp2GoawayFrame Promise { "
|
|
547
|
+
"last_stream_id="
|
|
548
|
+
<< frame.last_stream_id << ", error_code=" << frame.error_code
|
|
549
|
+
<< ", debug_data=" << frame.debug_data.as_string_view() << "}";
|
|
550
|
+
LOG_IF(ERROR,
|
|
551
|
+
frame.error_code != static_cast<uint32_t>(Http2ErrorCode::kNoError))
|
|
552
|
+
<< "Received GOAWAY frame with error code: " << frame.error_code
|
|
553
|
+
<< " and debug data: " << frame.debug_data.as_string_view();
|
|
554
|
+
|
|
555
|
+
uint32_t last_stream_id = 0;
|
|
556
|
+
absl::Status status(ErrorCodeToAbslStatusCode(
|
|
557
|
+
FrameErrorCodeToHttp2ErrorCode(frame.error_code)),
|
|
558
|
+
frame.debug_data.as_string_view());
|
|
559
|
+
if (frame.error_code == static_cast<uint32_t>(Http2ErrorCode::kNoError) &&
|
|
560
|
+
frame.last_stream_id == RFC9113::kMaxStreamId31Bit) {
|
|
561
|
+
const uint32_t next_stream_id = PeekNextStreamId();
|
|
562
|
+
last_stream_id = (next_stream_id > 1) ? next_stream_id - 2 : 0;
|
|
563
|
+
} else {
|
|
564
|
+
last_stream_id = frame.last_stream_id;
|
|
565
|
+
}
|
|
566
|
+
SetMaxAllowedStreamId(last_stream_id);
|
|
567
|
+
|
|
568
|
+
bool close_transport = false;
|
|
569
|
+
{
|
|
570
|
+
MutexLock lock(&transport_mutex_);
|
|
571
|
+
if (CanCloseTransportLocked()) {
|
|
572
|
+
close_transport = true;
|
|
573
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2GoawayFrame "
|
|
574
|
+
"stream_list_ is empty";
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
StateWatcher::DisconnectInfo disconnect_info;
|
|
579
|
+
disconnect_info.reason = Transport::StateWatcher::kGoaway;
|
|
580
|
+
disconnect_info.http2_error_code =
|
|
581
|
+
static_cast<Http2ErrorCode>(frame.error_code);
|
|
582
|
+
|
|
583
|
+
// Throttle keepalive time if the server sends a GOAWAY with error code
|
|
584
|
+
// ENHANCE_YOUR_CALM and debug data equal to "too_many_pings". This will
|
|
585
|
+
// apply to any new transport created on by any subchannel of this channel.
|
|
586
|
+
if (GPR_UNLIKELY(frame.error_code == static_cast<uint32_t>(
|
|
587
|
+
Http2ErrorCode::kEnhanceYourCalm) &&
|
|
588
|
+
frame.debug_data == "too_many_pings")) {
|
|
589
|
+
LOG(ERROR) << ": Received a GOAWAY with error code ENHANCE_YOUR_CALM and "
|
|
590
|
+
"debug data equal to \"too_many_pings\". Current keepalive "
|
|
591
|
+
"time (before throttling): "
|
|
592
|
+
<< keepalive_time_.ToString();
|
|
593
|
+
constexpr int max_keepalive_time_millis =
|
|
594
|
+
INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
|
595
|
+
uint64_t throttled_keepalive_time =
|
|
596
|
+
keepalive_time_.millis() > max_keepalive_time_millis
|
|
597
|
+
? INT_MAX
|
|
598
|
+
: keepalive_time_.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
|
599
|
+
if (!IsTransportStateWatcherEnabled()) {
|
|
600
|
+
status.SetPayload(kKeepaliveThrottlingKey,
|
|
601
|
+
absl::Cord(std::to_string(throttled_keepalive_time)));
|
|
602
|
+
}
|
|
603
|
+
disconnect_info.keepalive_time =
|
|
604
|
+
Duration::Milliseconds(throttled_keepalive_time);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
if (close_transport) {
|
|
608
|
+
// TODO(akshitpatel) : [PH2][P3] : Ideally the error here should be
|
|
609
|
+
// kNoError. However, Http2Status does not support kNoError. We should
|
|
610
|
+
// revisit this and update the error code.
|
|
611
|
+
MaybeSpawnCloseTransport(Http2Status::Http2ConnectionError(
|
|
612
|
+
FrameErrorCodeToHttp2ErrorCode((
|
|
613
|
+
frame.error_code ==
|
|
614
|
+
Http2ErrorCodeToFrameErrorCode(Http2ErrorCode::kNoError)
|
|
615
|
+
? Http2ErrorCodeToFrameErrorCode(Http2ErrorCode::kInternalError)
|
|
616
|
+
: frame.error_code)),
|
|
617
|
+
std::string(frame.debug_data.as_string_view())));
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
// lie: use transient failure from the transport to indicate goaway has been
|
|
621
|
+
// received.
|
|
622
|
+
ReportDisconnection(status, disconnect_info, "got_goaway");
|
|
623
|
+
return Http2Status::Ok();
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
Http2Status Http2ClientTransport::ProcessHttp2WindowUpdateFrame(
|
|
627
|
+
Http2WindowUpdateFrame frame) {
|
|
628
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-window_update
|
|
629
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
630
|
+
<< "Http2ClientTransport ProcessHttp2WindowUpdateFrame Promise { "
|
|
631
|
+
" stream_id="
|
|
632
|
+
<< frame.stream_id << ", increment=" << frame.increment << "}";
|
|
633
|
+
|
|
634
|
+
RefCountedPtr<Stream> stream = nullptr;
|
|
635
|
+
if (frame.stream_id != 0) {
|
|
636
|
+
stream = LookupStream(frame.stream_id);
|
|
637
|
+
}
|
|
638
|
+
if (stream != nullptr) {
|
|
639
|
+
StreamWritabilityUpdate update =
|
|
640
|
+
stream->ReceivedFlowControlWindowUpdate(frame.increment);
|
|
641
|
+
if (update.became_writable) {
|
|
642
|
+
absl::Status status = writable_stream_list_.EnqueueWrapper(
|
|
643
|
+
stream, update.priority, AreTransportFlowControlTokensAvailable());
|
|
644
|
+
if (!status.ok()) {
|
|
645
|
+
return ToHttpOkOrConnError(status);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
const bool should_trigger_write =
|
|
651
|
+
ProcessIncomingWindowUpdateFrameFlowControl(frame, flow_control_, stream);
|
|
652
|
+
if (should_trigger_write) {
|
|
653
|
+
SpawnGuardedTransportParty("TransportTokensAvailable", TriggerWriteCycle());
|
|
654
|
+
}
|
|
655
|
+
return Http2Status::Ok();
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
Http2Status Http2ClientTransport::ProcessHttp2ContinuationFrame(
|
|
659
|
+
Http2ContinuationFrame frame) {
|
|
660
|
+
// https://www.rfc-editor.org/rfc/rfc9113.html#name-continuation
|
|
661
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
662
|
+
<< "Http2ClientTransport ProcessHttp2ContinuationFrame Promise { "
|
|
663
|
+
"stream_id="
|
|
664
|
+
<< frame.stream_id << ", end_headers=" << frame.end_headers
|
|
665
|
+
<< ", payload=" << MaybeTruncatePayload(frame.payload) << " }";
|
|
666
|
+
|
|
667
|
+
// State update MUST happen before processing the frame.
|
|
668
|
+
incoming_headers_.OnContinuationReceived(frame);
|
|
669
|
+
|
|
670
|
+
RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
|
|
671
|
+
if (stream == nullptr) {
|
|
672
|
+
// TODO(tjagtap) : [PH2][P3] : Implement this.
|
|
673
|
+
// RFC9113 : The identifier of a newly established stream MUST be
|
|
674
|
+
// numerically greater than all streams that the initiating endpoint has
|
|
675
|
+
// opened or reserved. This governs streams that are opened using a HEADERS
|
|
676
|
+
// frame and streams that are reserved using PUSH_PROMISE. An endpoint that
|
|
677
|
+
// receives an unexpected stream identifier MUST respond with a connection
|
|
678
|
+
// error (Section 5.4.1) of type PROTOCOL_ERROR.
|
|
679
|
+
return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
|
|
680
|
+
nullptr, Http2Status::Ok());
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
if (stream->IsStreamHalfClosedRemote()) {
|
|
684
|
+
return ParseAndDiscardHeaders(
|
|
685
|
+
std::move(frame.payload), frame.end_headers, stream,
|
|
686
|
+
Http2Status::Http2StreamError(
|
|
687
|
+
Http2ErrorCode::kStreamClosed,
|
|
688
|
+
std::string(RFC9113::kHalfClosedRemoteState)));
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
Http2Status append_result =
|
|
692
|
+
stream->header_assembler.AppendContinuationFrame(frame);
|
|
693
|
+
if (!append_result.IsOk()) {
|
|
694
|
+
// Frame payload is not consumed if AppendContinuationFrame returns a
|
|
695
|
+
// non-OK status. We need to process it to keep our in consistent state.
|
|
696
|
+
return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
|
|
697
|
+
stream, std::move(append_result));
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
Http2Status status = ProcessMetadata(stream);
|
|
701
|
+
if (!status.IsOk()) {
|
|
702
|
+
// Frame payload is consumed by HeaderAssembler. So passing an empty
|
|
703
|
+
// SliceBuffer to ParseAndDiscardHeaders.
|
|
704
|
+
return ParseAndDiscardHeaders(SliceBuffer(), frame.end_headers, stream,
|
|
705
|
+
std::move(status));
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
// Frame payload has either been processed or moved to the HeaderAssembler.
|
|
709
|
+
return Http2Status::Ok();
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
Http2Status Http2ClientTransport::ProcessHttp2SecurityFrame(
|
|
713
|
+
Http2SecurityFrame frame) {
|
|
714
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2SecurityFrame "
|
|
715
|
+
"{ payload.Length="
|
|
716
|
+
<< frame.payload.Length() << " }";
|
|
717
|
+
if (settings_->IsSecurityFrameExpected()) {
|
|
718
|
+
// TODO(tjagtap) : [PH2][P3] : Add handling of Security frame
|
|
719
|
+
// Just the frame.payload needs to be passed to the endpoint_ object.
|
|
720
|
+
// Refer usage of TransportFramingEndpointExtension.
|
|
721
|
+
}
|
|
722
|
+
// Ignore the Security frame if it is not expected.
|
|
723
|
+
return Http2Status::Ok();
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
auto Http2ClientTransport::ProcessOneFrame(Http2Frame frame) {
|
|
727
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessOneFrame Factory";
|
|
728
|
+
return AssertResultType<Http2Status>(MatchPromise(
|
|
729
|
+
std::move(frame),
|
|
730
|
+
[self = RefAsSubclass<Http2ClientTransport>()](Http2DataFrame frame) {
|
|
731
|
+
return self->ProcessHttp2DataFrame(std::move(frame));
|
|
732
|
+
},
|
|
733
|
+
[self = RefAsSubclass<Http2ClientTransport>()](Http2HeaderFrame frame) {
|
|
734
|
+
return self->ProcessHttp2HeaderFrame(std::move(frame));
|
|
735
|
+
},
|
|
736
|
+
[self =
|
|
737
|
+
RefAsSubclass<Http2ClientTransport>()](Http2RstStreamFrame frame) {
|
|
738
|
+
return self->ProcessHttp2RstStreamFrame(frame);
|
|
739
|
+
},
|
|
740
|
+
[self = RefAsSubclass<Http2ClientTransport>()](Http2SettingsFrame frame) {
|
|
741
|
+
return self->ProcessHttp2SettingsFrame(std::move(frame));
|
|
742
|
+
},
|
|
743
|
+
[self = RefAsSubclass<Http2ClientTransport>()](Http2PingFrame frame) {
|
|
744
|
+
return self->ProcessHttp2PingFrame(frame);
|
|
745
|
+
},
|
|
746
|
+
[self = RefAsSubclass<Http2ClientTransport>()](Http2GoawayFrame frame) {
|
|
747
|
+
return self->ProcessHttp2GoawayFrame(std::move(frame));
|
|
748
|
+
},
|
|
749
|
+
[self = RefAsSubclass<Http2ClientTransport>()](
|
|
750
|
+
Http2WindowUpdateFrame frame) {
|
|
751
|
+
return self->ProcessHttp2WindowUpdateFrame(frame);
|
|
752
|
+
},
|
|
753
|
+
[self = RefAsSubclass<Http2ClientTransport>()](
|
|
754
|
+
Http2ContinuationFrame frame) {
|
|
755
|
+
return self->ProcessHttp2ContinuationFrame(std::move(frame));
|
|
756
|
+
},
|
|
757
|
+
[self = RefAsSubclass<Http2ClientTransport>()](Http2SecurityFrame frame) {
|
|
758
|
+
return self->ProcessHttp2SecurityFrame(std::move(frame));
|
|
759
|
+
},
|
|
760
|
+
[](GRPC_UNUSED Http2UnknownFrame frame) {
|
|
761
|
+
// RFC9113: Implementations MUST ignore and discard frames of
|
|
762
|
+
// unknown types.
|
|
763
|
+
return Http2Status::Ok();
|
|
764
|
+
},
|
|
765
|
+
[](GRPC_UNUSED Http2EmptyFrame frame) {
|
|
766
|
+
LOG(DFATAL)
|
|
767
|
+
<< "ParseFramePayload should never return a Http2EmptyFrame";
|
|
768
|
+
return Http2Status::Ok();
|
|
769
|
+
}));
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
Http2Status Http2ClientTransport::ParseAndDiscardHeaders(
|
|
773
|
+
SliceBuffer&& buffer, const bool is_end_headers,
|
|
774
|
+
const RefCountedPtr<Stream> stream, Http2Status&& original_status,
|
|
775
|
+
DebugLocation whence) {
|
|
776
|
+
const bool is_initial_metadata = !incoming_headers_.HeaderHasEndStream();
|
|
777
|
+
const uint32_t incoming_stream_id = incoming_headers_.GetStreamId();
|
|
778
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
779
|
+
<< "Http2ClientTransport ParseAndDiscardHeaders buffer "
|
|
780
|
+
"size: "
|
|
781
|
+
<< buffer.Length() << " is_initial_metadata: " << is_initial_metadata
|
|
782
|
+
<< " is_end_headers: " << is_end_headers
|
|
783
|
+
<< " incoming_stream_id: " << incoming_stream_id
|
|
784
|
+
<< " stream_id: " << (stream == nullptr ? 0 : stream->GetStreamId())
|
|
785
|
+
<< " original_status: " << original_status.DebugString()
|
|
786
|
+
<< " whence: " << whence.file() << ":" << whence.line();
|
|
787
|
+
|
|
788
|
+
return http2::ParseAndDiscardHeaders(
|
|
789
|
+
parser_, std::move(buffer),
|
|
790
|
+
HeaderAssembler::ParseHeaderArgs{
|
|
791
|
+
/*is_initial_metadata=*/is_initial_metadata,
|
|
792
|
+
/*is_end_headers=*/is_end_headers,
|
|
793
|
+
/*is_client=*/true,
|
|
794
|
+
/*max_header_list_size_soft_limit=*/
|
|
795
|
+
incoming_headers_.soft_limit(),
|
|
796
|
+
/*max_header_list_size_hard_limit=*/
|
|
797
|
+
settings_->acked().max_header_list_size(),
|
|
798
|
+
/*stream_id=*/incoming_stream_id,
|
|
799
|
+
},
|
|
800
|
+
stream, std::move(original_status));
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
804
|
+
// Read Related Promises and Promise Factories
|
|
805
|
+
auto Http2ClientTransport::EndpointReadSlice(const size_t num_bytes) {
|
|
806
|
+
return Map(
|
|
807
|
+
endpoint_.ReadSlice(num_bytes),
|
|
808
|
+
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
809
|
+
num_bytes](absl::StatusOr<Slice> status) {
|
|
810
|
+
if (status.ok()) {
|
|
811
|
+
self->keepalive_manager_->GotData();
|
|
812
|
+
self->ztrace_collector_->Append(PromiseEndpointReadTrace{num_bytes});
|
|
813
|
+
}
|
|
814
|
+
return status;
|
|
815
|
+
});
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
auto Http2ClientTransport::EndpointRead(const size_t num_bytes) {
|
|
819
|
+
return Map(
|
|
820
|
+
endpoint_.Read(num_bytes),
|
|
821
|
+
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
822
|
+
num_bytes](absl::StatusOr<SliceBuffer> status) {
|
|
823
|
+
if (status.ok()) {
|
|
824
|
+
self->keepalive_manager_->GotData();
|
|
825
|
+
self->ztrace_collector_->Append(PromiseEndpointReadTrace{num_bytes});
|
|
826
|
+
}
|
|
827
|
+
return status;
|
|
828
|
+
});
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
auto Http2ClientTransport::ReadAndProcessOneFrame() {
|
|
832
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
833
|
+
<< "Http2ClientTransport ReadAndProcessOneFrame Factory";
|
|
834
|
+
return AssertResultType<absl::Status>(TrySeq(
|
|
835
|
+
// Fetch the first kFrameHeaderSize bytes of the Frame, these contain
|
|
836
|
+
// the frame header.
|
|
837
|
+
EndpointReadSlice(kFrameHeaderSize),
|
|
838
|
+
// Parse the frame header.
|
|
839
|
+
[](Slice header_bytes) -> Http2FrameHeader {
|
|
840
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
841
|
+
<< "Http2ClientTransport ReadAndProcessOneFrame Parse "
|
|
842
|
+
<< header_bytes.as_string_view();
|
|
843
|
+
return Http2FrameHeader::Parse(header_bytes.begin());
|
|
844
|
+
},
|
|
845
|
+
// Validate the incoming frame as per the current state of the transport
|
|
846
|
+
[self = RefAsSubclass<Http2ClientTransport>()](Http2FrameHeader header) {
|
|
847
|
+
Http2Status status = ValidateFrameHeader(
|
|
848
|
+
/*max_frame_size_setting*/ self->settings_->acked()
|
|
849
|
+
.max_frame_size(),
|
|
850
|
+
/*incoming_header_in_progress*/
|
|
851
|
+
self->incoming_headers_.IsWaitingForContinuationFrame(),
|
|
852
|
+
/*incoming_header_stream_id*/
|
|
853
|
+
self->incoming_headers_.GetStreamId(),
|
|
854
|
+
/*current_frame_header*/ header,
|
|
855
|
+
/*last_stream_id=*/self->GetLastStreamId(),
|
|
856
|
+
/*is_client=*/true, /*is_first_settings_processed=*/
|
|
857
|
+
self->settings_->IsFirstPeerSettingsApplied());
|
|
858
|
+
|
|
859
|
+
if (GPR_UNLIKELY(!status.IsOk())) {
|
|
860
|
+
GRPC_DCHECK(status.GetType() ==
|
|
861
|
+
Http2Status::Http2ErrorType::kConnectionError);
|
|
862
|
+
return self->HandleError(std::nullopt, std::move(status));
|
|
863
|
+
}
|
|
864
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ReadAndProcessOneFrame "
|
|
865
|
+
"Validated Frame Header:"
|
|
866
|
+
<< header.ToString();
|
|
867
|
+
self->current_frame_header_ = header;
|
|
868
|
+
return absl::OkStatus();
|
|
869
|
+
},
|
|
870
|
+
// Read the payload of the frame.
|
|
871
|
+
[self = RefAsSubclass<Http2ClientTransport>()]() {
|
|
872
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
873
|
+
<< "Http2ClientTransport ReadAndProcessOneFrame Read Frame ";
|
|
874
|
+
return AssertResultType<absl::StatusOr<SliceBuffer>>(
|
|
875
|
+
self->EndpointRead(self->current_frame_header_.length));
|
|
876
|
+
},
|
|
877
|
+
// Parse the payload of the frame based on frame type.
|
|
878
|
+
[self = RefAsSubclass<Http2ClientTransport>()](
|
|
879
|
+
SliceBuffer payload) -> absl::StatusOr<Http2Frame> {
|
|
880
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
881
|
+
<< "Http2ClientTransport ReadAndProcessOneFrame ParseFramePayload "
|
|
882
|
+
<< MaybeTruncatePayload(payload);
|
|
883
|
+
ValueOrHttp2Status<Http2Frame> frame =
|
|
884
|
+
ParseFramePayload(self->current_frame_header_, std::move(payload));
|
|
885
|
+
if (!frame.IsOk()) {
|
|
886
|
+
return self->HandleError(
|
|
887
|
+
self->current_frame_header_.stream_id,
|
|
888
|
+
ValueOrHttp2Status<Http2Frame>::TakeStatus(std::move(frame)));
|
|
889
|
+
}
|
|
890
|
+
return TakeValue(std::move(frame));
|
|
891
|
+
},
|
|
892
|
+
[self = RefAsSubclass<Http2ClientTransport>()](
|
|
893
|
+
GRPC_UNUSED Http2Frame frame) {
|
|
894
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
895
|
+
<< "Http2ClientTransport ReadAndProcessOneFrame ProcessOneFrame";
|
|
896
|
+
return AssertResultType<absl::Status>(Map(
|
|
897
|
+
self->ProcessOneFrame(std::move(frame)),
|
|
898
|
+
[self](Http2Status status) {
|
|
899
|
+
if (!status.IsOk()) {
|
|
900
|
+
return self->HandleError(self->current_frame_header_.stream_id,
|
|
901
|
+
std::move(status));
|
|
902
|
+
}
|
|
903
|
+
return absl::OkStatus();
|
|
904
|
+
}));
|
|
905
|
+
},
|
|
906
|
+
[self = RefAsSubclass<Http2ClientTransport>()]() -> Poll<absl::Status> {
|
|
907
|
+
return self->reader_state_.MaybePauseReadLoop();
|
|
908
|
+
}));
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
auto Http2ClientTransport::ReadLoop() {
|
|
912
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ReadLoop Factory";
|
|
913
|
+
return AssertResultType<absl::Status>(
|
|
914
|
+
Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
|
|
915
|
+
return TrySeq(self->ReadAndProcessOneFrame(),
|
|
916
|
+
[]() -> LoopCtl<absl::Status> {
|
|
917
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
918
|
+
<< "Http2ClientTransport ReadLoop Continue";
|
|
919
|
+
return Continue();
|
|
920
|
+
});
|
|
921
|
+
}));
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
925
|
+
// Flow Control for the Transport
|
|
926
|
+
|
|
927
|
+
auto Http2ClientTransport::FlowControlPeriodicUpdateLoop() {
|
|
928
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport PeriodicUpdateLoop Factory";
|
|
929
|
+
return AssertResultType<absl::Status>(
|
|
930
|
+
Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
|
|
931
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
932
|
+
<< "Http2ClientTransport FlowControlPeriodicUpdateLoop Loop";
|
|
933
|
+
return TrySeq(
|
|
934
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this static sleep when the
|
|
935
|
+
// BDP code is done.
|
|
936
|
+
Sleep(chttp2::kFlowControlPeriodicUpdateTimer),
|
|
937
|
+
[self]() -> Poll<absl::Status> {
|
|
938
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
939
|
+
<< "Http2ClientTransport FlowControl PeriodicUpdate()";
|
|
940
|
+
chttp2::FlowControlAction action =
|
|
941
|
+
self->flow_control_.PeriodicUpdate();
|
|
942
|
+
bool is_action_empty = action == chttp2::FlowControlAction();
|
|
943
|
+
// This may trigger a write cycle
|
|
944
|
+
self->ActOnFlowControlAction(action, nullptr);
|
|
945
|
+
if (is_action_empty) {
|
|
946
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is
|
|
947
|
+
// done. We must continue to do PeriodicUpdate once BDP is in
|
|
948
|
+
// place.
|
|
949
|
+
MutexLock lock(&self->transport_mutex_);
|
|
950
|
+
if (self->GetActiveStreamCountLocked() == 0) {
|
|
951
|
+
self->AddPeriodicUpdatePromiseWaker();
|
|
952
|
+
return Pending{};
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
return absl::OkStatus();
|
|
956
|
+
},
|
|
957
|
+
[self]() -> LoopCtl<absl::Status> { return Continue{}; });
|
|
958
|
+
}));
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// Equivalent to grpc_chttp2_act_on_flowctl_action in chttp2_transport.cc
|
|
962
|
+
void Http2ClientTransport::ActOnFlowControlAction(
|
|
963
|
+
const chttp2::FlowControlAction& action, RefCountedPtr<Stream> stream) {
|
|
964
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::ActOnFlowControlAction"
|
|
965
|
+
<< action.DebugString();
|
|
966
|
+
if (action.send_stream_update() != kNoActionNeeded) {
|
|
967
|
+
if (GPR_LIKELY(stream != nullptr)) {
|
|
968
|
+
GRPC_DCHECK_GT(stream->GetStreamId(), 0u);
|
|
969
|
+
if (stream->CanSendWindowUpdateFrames()) {
|
|
970
|
+
window_update_list_.insert(stream->GetStreamId());
|
|
971
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
972
|
+
<< "Http2ClientTransport::ActOnFlowControlAction "
|
|
973
|
+
"added stream "
|
|
974
|
+
<< stream->GetStreamId() << " to window_update_list_";
|
|
975
|
+
}
|
|
976
|
+
} else {
|
|
977
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
978
|
+
<< "Http2ClientTransport::ActOnFlowControlAction stream is null";
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
ActOnFlowControlActionSettings(
|
|
983
|
+
action, settings_->mutable_local(),
|
|
984
|
+
enable_preferred_rx_crypto_frame_advertisement_);
|
|
985
|
+
|
|
986
|
+
if (action.AnyUpdateImmediately()) {
|
|
987
|
+
// Prioritize sending flow control updates over reading data. If we
|
|
988
|
+
// continue reading while urgent flow control updates are pending, we might
|
|
989
|
+
// exhaust the flow control window. This prevents us from sending window
|
|
990
|
+
// updates to the peer, causing the peer to block unnecessarily while
|
|
991
|
+
// waiting for flow control tokens.
|
|
992
|
+
reader_state_.SetPauseReadLoop();
|
|
993
|
+
SpawnGuardedTransportParty("SendControlFrames", TriggerWriteCycle());
|
|
994
|
+
GRPC_HTTP2_CLIENT_DLOG << "Update Immediately : "
|
|
995
|
+
<< action.ImmediateUpdateReasons();
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1000
|
+
// Write Related Promises and Promise Factories
|
|
1001
|
+
|
|
1002
|
+
auto Http2ClientTransport::ProcessAndWriteControlFrames() {
|
|
1003
|
+
SliceBuffer output_buf;
|
|
1004
|
+
if (is_first_write_) {
|
|
1005
|
+
// RFC9113: That is, the connection preface starts with the string
|
|
1006
|
+
// "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
|
1007
|
+
// This sequence MUST be followed by a SETTINGS frame, which MAY be empty.
|
|
1008
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport WriteControlFrames "
|
|
1009
|
+
"GRPC_CHTTP2_CLIENT_CONNECT_STRING";
|
|
1010
|
+
output_buf.Append(
|
|
1011
|
+
Slice::FromCopiedString(GRPC_CHTTP2_CLIENT_CONNECT_STRING));
|
|
1012
|
+
settings_->MaybeGetSettingsAndSettingsAckFrames(flow_control_, output_buf);
|
|
1013
|
+
// TODO(tjagtap) [PH2][P2][Server] : This will be opposite for server. We
|
|
1014
|
+
// must read before we write for the server. So the ReadLoop will be Spawned
|
|
1015
|
+
// just after the constructor, and the write loop should be spawned only
|
|
1016
|
+
// after the first SETTINGS frame is completely received.
|
|
1017
|
+
//
|
|
1018
|
+
// Because the client is expected to write before it reads, we spawn the
|
|
1019
|
+
// ReadLoop of the client only after the first write is queued.
|
|
1020
|
+
SpawnGuardedTransportParty("ReadLoop", UntilTransportClosed(ReadLoop()));
|
|
1021
|
+
is_first_write_ = false;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
// Order of Control Frames is important.
|
|
1025
|
+
// 1. GOAWAY - This is first because if this is the final GoAway, then we may
|
|
1026
|
+
// not need to send anything else to the peer.
|
|
1027
|
+
// 2. SETTINGS and SETTINGS ACK
|
|
1028
|
+
// 3. PING and PING acks.
|
|
1029
|
+
// 4. WINDOW_UPDATE
|
|
1030
|
+
// 5. Custom gRPC security frame
|
|
1031
|
+
|
|
1032
|
+
goaway_manager_.MaybeGetSerializedGoawayFrame(output_buf);
|
|
1033
|
+
http2::Http2ErrorCode apply_status =
|
|
1034
|
+
settings_->MaybeReportAndApplyBufferedPeerSettings(event_engine_.get());
|
|
1035
|
+
if (!goaway_manager_.IsImmediateGoAway() &&
|
|
1036
|
+
apply_status == http2::Http2ErrorCode::kNoError) {
|
|
1037
|
+
EnforceLatestIncomingSettings();
|
|
1038
|
+
settings_->MaybeGetSettingsAndSettingsAckFrames(flow_control_, output_buf);
|
|
1039
|
+
ping_manager_->MaybeGetSerializedPingFrames(output_buf,
|
|
1040
|
+
NextAllowedPingInterval());
|
|
1041
|
+
MaybeGetWindowUpdateFrames(output_buf);
|
|
1042
|
+
}
|
|
1043
|
+
const uint64_t buffer_length = output_buf.Length();
|
|
1044
|
+
ztrace_collector_->Append(PromiseEndpointWriteTrace{buffer_length});
|
|
1045
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport WriteControlFrames Size : "
|
|
1046
|
+
<< buffer_length;
|
|
1047
|
+
return AssertResultType<absl::Status>(
|
|
1048
|
+
If((buffer_length > 0 && apply_status == http2::Http2ErrorCode::kNoError),
|
|
1049
|
+
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
1050
|
+
output_buf = std::move(output_buf)]() mutable {
|
|
1051
|
+
return self->endpoint_.Write(std::move(output_buf),
|
|
1052
|
+
GetWriteArgs(self->settings_->peer()));
|
|
1053
|
+
},
|
|
1054
|
+
[self = RefAsSubclass<Http2ClientTransport>(), apply_status]() {
|
|
1055
|
+
if (apply_status != http2::Http2ErrorCode::kNoError) {
|
|
1056
|
+
return self->HandleError(
|
|
1057
|
+
std::nullopt,
|
|
1058
|
+
Http2Status::Http2ConnectionError(
|
|
1059
|
+
apply_status, "Failed to apply incoming settings"));
|
|
1060
|
+
}
|
|
1061
|
+
return absl::OkStatus();
|
|
1062
|
+
}));
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
void Http2ClientTransport::NotifyControlFramesWriteDone() {
|
|
1066
|
+
// Notify Control modules that we have sent the frames.
|
|
1067
|
+
// All notifications are expected to be synchronous.
|
|
1068
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport NotifyControlFramesWriteDone";
|
|
1069
|
+
reader_state_.ResumeReadLoopIfPaused();
|
|
1070
|
+
ping_manager_->NotifyPingSent();
|
|
1071
|
+
goaway_manager_.NotifyGoawaySent();
|
|
1072
|
+
MaybeSpawnWaitForSettingsTimeout();
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
auto Http2ClientTransport::SerializeAndWrite(std::vector<Http2Frame>&& frames) {
|
|
1076
|
+
SliceBuffer output_buf;
|
|
1077
|
+
should_reset_ping_clock_ =
|
|
1078
|
+
Serialize(absl::Span<Http2Frame>(frames), output_buf)
|
|
1079
|
+
.should_reset_ping_clock;
|
|
1080
|
+
size_t output_buf_length = output_buf.Length();
|
|
1081
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport SerializeAndWrite Write "
|
|
1082
|
+
"output_buf.length() = "
|
|
1083
|
+
<< output_buf_length;
|
|
1084
|
+
return AssertResultType<absl::Status>(If(
|
|
1085
|
+
output_buf_length > 0,
|
|
1086
|
+
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
1087
|
+
output_buf = std::move(output_buf)]() mutable {
|
|
1088
|
+
return self->endpoint_.Write(std::move(output_buf),
|
|
1089
|
+
GetWriteArgs(self->settings_->peer()));
|
|
1090
|
+
},
|
|
1091
|
+
[]() { return absl::OkStatus(); }));
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
absl::StatusOr<std::vector<Http2Frame>>
|
|
1095
|
+
Http2ClientTransport::DequeueStreamFrames(RefCountedPtr<Stream> stream) {
|
|
1096
|
+
// write_bytes_remaining_ is passed as an upper bound on the max
|
|
1097
|
+
// number of tokens that can be dequeued to prevent dequeuing huge
|
|
1098
|
+
// data frames when write_bytes_remaining_ is very low. As the
|
|
1099
|
+
// available transport tokens can only range from 0 to 2^31 - 1,
|
|
1100
|
+
// we are clamping the write_bytes_remaining_ to that range.
|
|
1101
|
+
const uint32_t tokens =
|
|
1102
|
+
GetMaxPermittedDequeue(flow_control_, stream->flow_control,
|
|
1103
|
+
write_bytes_remaining_, settings_->peer());
|
|
1104
|
+
const uint32_t stream_flow_control_tokens = static_cast<uint32_t>(
|
|
1105
|
+
GetStreamFlowControlTokens(stream->flow_control, settings_->peer()));
|
|
1106
|
+
stream->flow_control.ReportIfStalled(
|
|
1107
|
+
/*is_client=*/true, stream->GetStreamId(), settings_->peer());
|
|
1108
|
+
StreamDataQueue<ClientMetadataHandle>::DequeueResult result =
|
|
1109
|
+
stream->DequeueFrames(tokens, stream_flow_control_tokens,
|
|
1110
|
+
settings_->peer().max_frame_size(), encoder_);
|
|
1111
|
+
ProcessOutgoingDataFrameFlowControl(stream->flow_control,
|
|
1112
|
+
result.flow_control_tokens_consumed);
|
|
1113
|
+
if (result.is_writable) {
|
|
1114
|
+
// Stream is still writable. Enqueue it back to the writable
|
|
1115
|
+
// stream list.
|
|
1116
|
+
absl::Status status = writable_stream_list_.EnqueueWrapper(
|
|
1117
|
+
stream, result.priority, AreTransportFlowControlTokensAvailable());
|
|
1118
|
+
|
|
1119
|
+
if (GPR_UNLIKELY(!status.ok())) {
|
|
1120
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1121
|
+
<< "Http2ClientTransport DequeueStreamFrames Failed to "
|
|
1122
|
+
"enqueue stream "
|
|
1123
|
+
<< stream->GetStreamId() << " with status: " << status;
|
|
1124
|
+
// Close transport if we fail to enqueue stream.
|
|
1125
|
+
return HandleError(std::nullopt, ToHttpOkOrConnError(status));
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
// If the stream is aborted before initial metadata is dequeued, we will
|
|
1130
|
+
// not dequeue any frames from the stream data queue (including RST_STREAM).
|
|
1131
|
+
// Because of this, we will add the stream to the stream_list only when
|
|
1132
|
+
// we are guaranteed to send initial metadata on the wire. If the above
|
|
1133
|
+
// mentioned scenario occurs, the stream ref will be dropped by the
|
|
1134
|
+
// multiplexer loop as the stream will never be writable again. Additionally,
|
|
1135
|
+
// the other two stream refs, CallHandler OnDone and OutboundLoop will be
|
|
1136
|
+
// dropped by Callv3 triggering cleaning up the stream object.
|
|
1137
|
+
if (result.InitialMetadataDequeued()) {
|
|
1138
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1139
|
+
<< "Http2ClientTransport DequeueStreamFrames InitialMetadataDequeued "
|
|
1140
|
+
"stream_id = "
|
|
1141
|
+
<< stream->GetStreamId();
|
|
1142
|
+
stream->SentInitialMetadata();
|
|
1143
|
+
// After this point, initial metadata is guaranteed to be sent out.
|
|
1144
|
+
AddToStreamList(stream);
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
if (result.HalfCloseDequeued()) {
|
|
1148
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1149
|
+
<< "Http2ClientTransport DequeueStreamFrames HalfCloseDequeued "
|
|
1150
|
+
"stream_id = "
|
|
1151
|
+
<< stream->GetStreamId();
|
|
1152
|
+
stream->MarkHalfClosedLocal();
|
|
1153
|
+
CloseStream(
|
|
1154
|
+
stream,
|
|
1155
|
+
CloseStreamArgs{/*close_reads=*/stream->did_receive_trailing_metadata,
|
|
1156
|
+
/*close_writes=*/true});
|
|
1157
|
+
}
|
|
1158
|
+
if (result.ResetStreamDequeued()) {
|
|
1159
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1160
|
+
<< "Http2ClientTransport DequeueStreamFrames ResetStreamDequeued "
|
|
1161
|
+
"stream_id = "
|
|
1162
|
+
<< stream->GetStreamId();
|
|
1163
|
+
stream->MarkHalfClosedLocal();
|
|
1164
|
+
CloseStream(stream, CloseStreamArgs{/*close_reads=*/true,
|
|
1165
|
+
/*close_writes=*/true});
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
// Update the write_bytes_remaining_ based on the bytes consumed
|
|
1169
|
+
// in the current dequeue.
|
|
1170
|
+
write_bytes_remaining_ =
|
|
1171
|
+
(write_bytes_remaining_ >= result.total_bytes_consumed)
|
|
1172
|
+
? (write_bytes_remaining_ - result.total_bytes_consumed)
|
|
1173
|
+
: 0;
|
|
1174
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport DequeueStreamFrames "
|
|
1175
|
+
"write_bytes_remaining_ after dequeue = "
|
|
1176
|
+
<< write_bytes_remaining_ << " total_bytes_consumed = "
|
|
1177
|
+
<< result.total_bytes_consumed
|
|
1178
|
+
<< " stream_id = " << stream->GetStreamId()
|
|
1179
|
+
<< " is_writable = " << result.is_writable
|
|
1180
|
+
<< " stream_priority = "
|
|
1181
|
+
<< static_cast<uint8_t>(result.priority)
|
|
1182
|
+
<< " number of frames = " << result.frames.size();
|
|
1183
|
+
return std::move(result.frames);
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
// This MultiplexerLoop promise is responsible for Multiplexing multiple gRPC
|
|
1187
|
+
// Requests (HTTP2 Streams) and writing them into one common endpoint.
|
|
1188
|
+
auto Http2ClientTransport::MultiplexerLoop() {
|
|
1189
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport MultiplexerLoop Factory";
|
|
1190
|
+
return AssertResultType<
|
|
1191
|
+
absl::Status>(Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
|
|
1192
|
+
self->write_bytes_remaining_ = self->GetMaxWriteSize();
|
|
1193
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport MultiplexerLoop "
|
|
1194
|
+
<< " max_write_size_=" << self->GetMaxWriteSize();
|
|
1195
|
+
return TrySeq(
|
|
1196
|
+
self->writable_stream_list_.WaitForReady(
|
|
1197
|
+
self->AreTransportFlowControlTokensAvailable()),
|
|
1198
|
+
[self]() {
|
|
1199
|
+
// TODO(akshitpatel) : [PH2][P2] : Return an `important` tag from
|
|
1200
|
+
// WriteControlFrames() to indicate if we should do a separate write
|
|
1201
|
+
// for the queued control frames or send the queued frames with the
|
|
1202
|
+
// data frames(if any).
|
|
1203
|
+
return Map(
|
|
1204
|
+
self->ProcessAndWriteControlFrames(),
|
|
1205
|
+
[self](absl::Status status) {
|
|
1206
|
+
if (GPR_UNLIKELY(!status.ok())) {
|
|
1207
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1208
|
+
<< "Http2ClientTransport MultiplexerLoop Failed to "
|
|
1209
|
+
"write control frames with status: "
|
|
1210
|
+
<< status;
|
|
1211
|
+
return status;
|
|
1212
|
+
}
|
|
1213
|
+
self->NotifyControlFramesWriteDone();
|
|
1214
|
+
return absl::OkStatus();
|
|
1215
|
+
});
|
|
1216
|
+
},
|
|
1217
|
+
[self]() -> absl::StatusOr<std::vector<Http2Frame>> {
|
|
1218
|
+
std::vector<Http2Frame> frames;
|
|
1219
|
+
// Drain all the writable streams till we have written
|
|
1220
|
+
// max_write_size_ bytes of data or there is no more data to send. In
|
|
1221
|
+
// some cases, we may write more than max_write_size_ bytes(like
|
|
1222
|
+
// writing metadata).
|
|
1223
|
+
while (self->write_bytes_remaining_ > 0) {
|
|
1224
|
+
std::optional<RefCountedPtr<Stream>> optional_stream =
|
|
1225
|
+
self->writable_stream_list_.ImmediateNext(
|
|
1226
|
+
self->AreTransportFlowControlTokensAvailable());
|
|
1227
|
+
if (!optional_stream.has_value()) {
|
|
1228
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1229
|
+
<< "Http2ClientTransport MultiplexerLoop "
|
|
1230
|
+
"No writable streams available, write_bytes_remaining_ = "
|
|
1231
|
+
<< self->write_bytes_remaining_;
|
|
1232
|
+
break;
|
|
1233
|
+
}
|
|
1234
|
+
RefCountedPtr<Stream> stream = std::move(optional_stream.value());
|
|
1235
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1236
|
+
<< "Http2ClientTransport MultiplexerLoop "
|
|
1237
|
+
"Next writable stream id = "
|
|
1238
|
+
<< stream->GetStreamId()
|
|
1239
|
+
<< " is_closed_for_writes = " << stream->IsClosedForWrites();
|
|
1240
|
+
|
|
1241
|
+
if (stream->GetStreamId() == kInvalidStreamId) {
|
|
1242
|
+
GRPC_DCHECK(stream->IsStreamIdle());
|
|
1243
|
+
// TODO(akshitpatel) : [PH2][P5] : We will waste a stream id in
|
|
1244
|
+
// the rare scenario where the stream is aborted before it can be
|
|
1245
|
+
// written to. This is a possible area to optimize in future.
|
|
1246
|
+
absl::Status status = self->InitializeStream(stream);
|
|
1247
|
+
if (!status.ok()) {
|
|
1248
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1249
|
+
<< "Http2ClientTransport MultiplexerLoop "
|
|
1250
|
+
"Failed to assign stream id and add to stream list for "
|
|
1251
|
+
"stream: "
|
|
1252
|
+
<< stream.get() << " closing this stream.";
|
|
1253
|
+
self->BeginCloseStream(
|
|
1254
|
+
stream, /*reset_stream_error_code=*/std::nullopt,
|
|
1255
|
+
CancelledServerMetadataFromStatus(status));
|
|
1256
|
+
continue;
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
if (GPR_LIKELY(!stream->IsClosedForWrites())) {
|
|
1261
|
+
absl::StatusOr<std::vector<Http2Frame>> stream_frames =
|
|
1262
|
+
self->DequeueStreamFrames(stream);
|
|
1263
|
+
if (GPR_UNLIKELY(!stream_frames.ok())) {
|
|
1264
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1265
|
+
<< "Http2ClientTransport MultiplexerLoop "
|
|
1266
|
+
"Failed to dequeue stream frames with status: "
|
|
1267
|
+
<< stream_frames.status();
|
|
1268
|
+
return stream_frames.status();
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
frames.reserve(frames.size() + stream_frames.value().size());
|
|
1272
|
+
frames.insert(
|
|
1273
|
+
frames.end(),
|
|
1274
|
+
std::make_move_iterator(stream_frames.value().begin()),
|
|
1275
|
+
std::make_move_iterator(stream_frames.value().end()));
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1280
|
+
<< "Http2ClientTransport MultiplexerLoop "
|
|
1281
|
+
"write_bytes_remaining_ after draining all writable streams = "
|
|
1282
|
+
<< self->write_bytes_remaining_;
|
|
1283
|
+
|
|
1284
|
+
return std::move(frames);
|
|
1285
|
+
},
|
|
1286
|
+
[self](std::vector<Http2Frame> frames) {
|
|
1287
|
+
return self->SerializeAndWrite(std::move(frames));
|
|
1288
|
+
},
|
|
1289
|
+
[self]() -> LoopCtl<absl::Status> {
|
|
1290
|
+
if (self->should_reset_ping_clock_) {
|
|
1291
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1292
|
+
<< "Http2ClientTransport MultiplexerLoop ResetPingClock";
|
|
1293
|
+
self->ping_manager_->ResetPingClock(/*is_client=*/true);
|
|
1294
|
+
self->should_reset_ping_clock_ = false;
|
|
1295
|
+
}
|
|
1296
|
+
return Continue();
|
|
1297
|
+
});
|
|
1298
|
+
}));
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
absl::Status Http2ClientTransport::InitializeStream(
|
|
1302
|
+
RefCountedPtr<Stream> stream) {
|
|
1303
|
+
absl::StatusOr<uint32_t> next_stream_id = NextStreamId();
|
|
1304
|
+
if (!next_stream_id.ok()) {
|
|
1305
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport InitializeStream "
|
|
1306
|
+
"Failed to get next stream id for stream: "
|
|
1307
|
+
<< stream.get();
|
|
1308
|
+
return std::move(next_stream_id).status();
|
|
1309
|
+
}
|
|
1310
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport InitializeStream "
|
|
1311
|
+
"Assigned stream id: "
|
|
1312
|
+
<< next_stream_id.value()
|
|
1313
|
+
<< " to stream: " << stream.get()
|
|
1314
|
+
<< ", allow_true_binary_metadata:"
|
|
1315
|
+
<< settings_->peer().allow_true_binary_metadata();
|
|
1316
|
+
stream->InitializeStream(next_stream_id.value(),
|
|
1317
|
+
settings_->peer().allow_true_binary_metadata(),
|
|
1318
|
+
settings_->acked().allow_true_binary_metadata());
|
|
1319
|
+
return absl::OkStatus();
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
void Http2ClientTransport::AddToStreamList(RefCountedPtr<Stream> stream) {
|
|
1323
|
+
bool should_wake_periodic_updates = false;
|
|
1324
|
+
{
|
|
1325
|
+
MutexLock lock(&transport_mutex_);
|
|
1326
|
+
GRPC_DCHECK(stream != nullptr) << "stream is null";
|
|
1327
|
+
GRPC_DCHECK_GT(stream->GetStreamId(), 0u) << "stream id is invalid";
|
|
1328
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1329
|
+
<< "Http2ClientTransport AddToStreamList for stream id: "
|
|
1330
|
+
<< stream->GetStreamId();
|
|
1331
|
+
stream_list_.emplace(stream->GetStreamId(), stream);
|
|
1332
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
1333
|
+
if (GetActiveStreamCountLocked() == 1) {
|
|
1334
|
+
should_wake_periodic_updates = true;
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
1338
|
+
if (should_wake_periodic_updates) {
|
|
1339
|
+
// Release the lock before you wake up another promise on the party.
|
|
1340
|
+
WakeupPeriodicUpdatePromise();
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1345
|
+
// Settings and Window Update Management
|
|
1346
|
+
|
|
1347
|
+
void Http2ClientTransport::EnforceLatestIncomingSettings() {
|
|
1348
|
+
encoder_.SetMaxTableSize(settings_->peer().header_table_size());
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
auto Http2ClientTransport::WaitForSettingsTimeoutOnDone() {
|
|
1352
|
+
return [self = RefAsSubclass<Http2ClientTransport>()](absl::Status status) {
|
|
1353
|
+
if (!status.ok()) {
|
|
1354
|
+
GRPC_UNUSED absl::Status result = self->HandleError(
|
|
1355
|
+
std::nullopt, Http2Status::Http2ConnectionError(
|
|
1356
|
+
Http2ErrorCode::kProtocolError,
|
|
1357
|
+
std::string(RFC9113::kSettingsTimeout)));
|
|
1358
|
+
}
|
|
1359
|
+
};
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
void Http2ClientTransport::MaybeSpawnWaitForSettingsTimeout() {
|
|
1363
|
+
if (settings_->ShouldSpawnWaitForSettingsTimeout()) {
|
|
1364
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1365
|
+
<< "Http2ClientTransport::MaybeSpawnWaitForSettingsTimeout Spawning";
|
|
1366
|
+
general_party_->Spawn("WaitForSettingsTimeout",
|
|
1367
|
+
settings_->WaitForSettingsTimeout(),
|
|
1368
|
+
WaitForSettingsTimeoutOnDone());
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
void Http2ClientTransport::MaybeGetWindowUpdateFrames(SliceBuffer& output_buf) {
|
|
1373
|
+
std::vector<Http2Frame> frames;
|
|
1374
|
+
frames.reserve(window_update_list_.size() + 1);
|
|
1375
|
+
uint32_t window_size =
|
|
1376
|
+
flow_control_.DesiredAnnounceSize(/*writing_anyway=*/true);
|
|
1377
|
+
if (window_size > 0) {
|
|
1378
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1379
|
+
<< "Http2ClientTransport::MaybeGetWindowUpdateFrames Transport Window "
|
|
1380
|
+
"Update : "
|
|
1381
|
+
<< window_size;
|
|
1382
|
+
frames.emplace_back(Http2WindowUpdateFrame{/*stream_id=*/0, window_size});
|
|
1383
|
+
flow_control_.SentUpdate(window_size);
|
|
1384
|
+
}
|
|
1385
|
+
for (const uint32_t stream_id : window_update_list_) {
|
|
1386
|
+
RefCountedPtr<Stream> stream = LookupStream(stream_id);
|
|
1387
|
+
MaybeAddStreamWindowUpdateFrame(stream, frames);
|
|
1388
|
+
}
|
|
1389
|
+
window_update_list_.clear();
|
|
1390
|
+
if (!frames.empty()) {
|
|
1391
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1392
|
+
<< "Http2ClientTransport::MaybeGetWindowUpdateFrames Total Window "
|
|
1393
|
+
"Update Frames : "
|
|
1394
|
+
<< frames.size();
|
|
1395
|
+
Serialize(absl::Span<Http2Frame>(frames), output_buf);
|
|
1396
|
+
}
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1400
|
+
// Constructor Destructor
|
|
1401
|
+
|
|
1402
|
+
Http2ClientTransport::Http2ClientTransport(
|
|
1403
|
+
PromiseEndpoint endpoint, GRPC_UNUSED const ChannelArgs& channel_args,
|
|
1404
|
+
std::shared_ptr<EventEngine> event_engine,
|
|
1405
|
+
absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> on_receive_settings)
|
|
1406
|
+
: channelz::DataSource(http2::CreateChannelzSocketNode(
|
|
1407
|
+
endpoint.GetEventEngineEndpoint(), channel_args)),
|
|
1408
|
+
event_engine_(std::move(event_engine)),
|
|
1409
|
+
endpoint_(std::move(endpoint)),
|
|
1410
|
+
settings_(MakeRefCounted<SettingsPromiseManager>(
|
|
1411
|
+
std::move(on_receive_settings))),
|
|
1412
|
+
next_stream_id_(/*Initial Stream ID*/ 1),
|
|
1413
|
+
should_reset_ping_clock_(false),
|
|
1414
|
+
is_first_write_(true),
|
|
1415
|
+
max_write_size_(kMaxWriteSize),
|
|
1416
|
+
ping_manager_(std::nullopt),
|
|
1417
|
+
keepalive_manager_(std::nullopt),
|
|
1418
|
+
goaway_manager_(GoawayInterfaceImpl::Make(this)),
|
|
1419
|
+
memory_owner_(channel_args.GetObject<ResourceQuota>()
|
|
1420
|
+
->memory_quota()
|
|
1421
|
+
->CreateMemoryOwner()),
|
|
1422
|
+
flow_control_(
|
|
1423
|
+
"PH2_Client",
|
|
1424
|
+
channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
|
|
1425
|
+
&memory_owner_),
|
|
1426
|
+
ztrace_collector_(std::make_shared<PromiseHttp2ZTraceCollector>()) {
|
|
1427
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Constructor Begin";
|
|
1428
|
+
// Initialize the general party and write party.
|
|
1429
|
+
RefCountedPtr<Arena> party_arena = SimpleArenaAllocator(0)->MakeArena();
|
|
1430
|
+
party_arena->SetContext<EventEngine>(event_engine_.get());
|
|
1431
|
+
general_party_ = Party::Make(std::move(party_arena));
|
|
1432
|
+
|
|
1433
|
+
InitLocalSettings(settings_->mutable_local(), /*is_client=*/true);
|
|
1434
|
+
TransportChannelArgs args;
|
|
1435
|
+
ReadChannelArgs(channel_args, args);
|
|
1436
|
+
|
|
1437
|
+
ping_manager_.emplace(channel_args, args.ping_timeout,
|
|
1438
|
+
PingSystemInterfaceImpl::Make(this), event_engine_);
|
|
1439
|
+
|
|
1440
|
+
// The keepalive loop is only spawned if the keepalive time is not infinity.
|
|
1441
|
+
keepalive_manager_.emplace(
|
|
1442
|
+
KeepAliveInterfaceImpl::Make(this),
|
|
1443
|
+
((args.keepalive_timeout < args.ping_timeout) ? args.keepalive_timeout
|
|
1444
|
+
: Duration::Infinity()),
|
|
1445
|
+
args.keepalive_time, general_party_.get());
|
|
1446
|
+
|
|
1447
|
+
if (settings_->local().allow_security_frame()) {
|
|
1448
|
+
// TODO(tjagtap) : [PH2][P3] : Setup the plumbing to pass the security frame
|
|
1449
|
+
// to the endpoing via TransportFramingEndpointExtension.
|
|
1450
|
+
// Also decide if this plumbing is done here, or when the peer sends
|
|
1451
|
+
// allow_security_frame too.
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
GRPC_DCHECK(ping_manager_.has_value());
|
|
1455
|
+
GRPC_DCHECK(keepalive_manager_.has_value());
|
|
1456
|
+
SourceConstructed();
|
|
1457
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Constructor End";
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
void Http2ClientTransport::SpawnTransportLoops() {
|
|
1461
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::SpawnTransportLoops Begin";
|
|
1462
|
+
SpawnGuardedTransportParty(
|
|
1463
|
+
"FlowControlPeriodicUpdateLoop",
|
|
1464
|
+
UntilTransportClosed(FlowControlPeriodicUpdateLoop()));
|
|
1465
|
+
|
|
1466
|
+
SpawnGuardedTransportParty("FlushInitialFrames", TriggerWriteCycle());
|
|
1467
|
+
SpawnGuardedTransportParty("MultiplexerLoop",
|
|
1468
|
+
UntilTransportClosed(MultiplexerLoop()));
|
|
1469
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::SpawnTransportLoops End";
|
|
1470
|
+
}
|
|
1471
|
+
|
|
1472
|
+
void Http2ClientTransport::ReadChannelArgs(const ChannelArgs& channel_args,
|
|
1473
|
+
TransportChannelArgs& args) {
|
|
1474
|
+
http2::ReadChannelArgs(channel_args, args, settings_->mutable_local(),
|
|
1475
|
+
flow_control_,
|
|
1476
|
+
/*is_client=*/true);
|
|
1477
|
+
|
|
1478
|
+
// Assign the channel args to the member variables.
|
|
1479
|
+
keepalive_time_ = args.keepalive_time;
|
|
1480
|
+
incoming_headers_.set_soft_limit(args.max_header_list_size_soft_limit);
|
|
1481
|
+
keepalive_permit_without_calls_ = args.keepalive_permit_without_calls;
|
|
1482
|
+
enable_preferred_rx_crypto_frame_advertisement_ =
|
|
1483
|
+
args.enable_preferred_rx_crypto_frame_advertisement;
|
|
1484
|
+
test_only_ack_pings_ = args.test_only_ack_pings;
|
|
1485
|
+
|
|
1486
|
+
if (args.initial_sequence_number > 0) {
|
|
1487
|
+
next_stream_id_ = args.initial_sequence_number;
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1490
|
+
settings_->SetSettingsTimeout(args.settings_timeout);
|
|
1491
|
+
if (args.max_usable_hpack_table_size >= 0) {
|
|
1492
|
+
encoder_.SetMaxUsableSize(args.max_usable_hpack_table_size);
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
// This function MUST be idempotent. This function MUST be called from the
|
|
1497
|
+
// transport party.
|
|
1498
|
+
void Http2ClientTransport::CloseStream(RefCountedPtr<Stream> stream,
|
|
1499
|
+
CloseStreamArgs args,
|
|
1500
|
+
DebugLocation whence) {
|
|
1501
|
+
std::optional<Http2Status> close_transport_error;
|
|
1502
|
+
|
|
1503
|
+
{
|
|
1504
|
+
// TODO(akshitpatel) : [PH2][P3] : Measure the impact of holding mutex
|
|
1505
|
+
// throughout this function.
|
|
1506
|
+
MutexLock lock(&transport_mutex_);
|
|
1507
|
+
GRPC_DCHECK(stream != nullptr) << "stream is null";
|
|
1508
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1509
|
+
<< "Http2ClientTransport::CloseStream for stream id: "
|
|
1510
|
+
<< stream->GetStreamId() << " close_reads=" << args.close_reads
|
|
1511
|
+
<< " close_writes=" << args.close_writes
|
|
1512
|
+
<< " incoming_headers_=" << incoming_headers_.DebugString()
|
|
1513
|
+
<< " location=" << whence.file() << ":" << whence.line();
|
|
1514
|
+
|
|
1515
|
+
if (args.close_writes) {
|
|
1516
|
+
stream->SetWriteClosed();
|
|
1517
|
+
}
|
|
1518
|
+
|
|
1519
|
+
if (args.close_reads) {
|
|
1520
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1521
|
+
<< "Http2ClientTransport::CloseStream for stream id: "
|
|
1522
|
+
<< stream->GetStreamId() << " closing stream for reads.";
|
|
1523
|
+
// If the stream is closed while reading HEADER/CONTINUATION frames, we
|
|
1524
|
+
// should still parse the enqueued buffer to maintain HPACK state between
|
|
1525
|
+
// peers.
|
|
1526
|
+
if (incoming_headers_.IsWaitingForContinuationFrame()) {
|
|
1527
|
+
Http2Status result = http2::ParseAndDiscardHeaders(
|
|
1528
|
+
parser_, SliceBuffer(),
|
|
1529
|
+
HeaderAssembler::ParseHeaderArgs{
|
|
1530
|
+
/*is_initial_metadata=*/!incoming_headers_.HeaderHasEndStream(),
|
|
1531
|
+
/*is_end_headers=*/false,
|
|
1532
|
+
/*is_client=*/true,
|
|
1533
|
+
/*max_header_list_size_soft_limit=*/
|
|
1534
|
+
incoming_headers_.soft_limit(),
|
|
1535
|
+
/*max_header_list_size_hard_limit=*/
|
|
1536
|
+
settings_->acked().max_header_list_size(),
|
|
1537
|
+
/*stream_id=*/incoming_headers_.GetStreamId(),
|
|
1538
|
+
},
|
|
1539
|
+
stream, /*original_status=*/Http2Status::Ok());
|
|
1540
|
+
if (result.GetType() == Http2Status::Http2ErrorType::kConnectionError) {
|
|
1541
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1542
|
+
<< "Http2ClientTransport::CloseStream for stream id: "
|
|
1543
|
+
<< stream->GetStreamId()
|
|
1544
|
+
<< " failed to partially process header: "
|
|
1545
|
+
<< result.DebugString();
|
|
1546
|
+
close_transport_error.emplace(std::move(result));
|
|
1547
|
+
}
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1550
|
+
stream_list_.erase(stream->GetStreamId());
|
|
1551
|
+
if (!close_transport_error.has_value() && CanCloseTransportLocked()) {
|
|
1552
|
+
// TODO(akshitpatel) : [PH2][P3] : Is kInternalError the right error
|
|
1553
|
+
// code to use here? IMO it should be kNoError.
|
|
1554
|
+
close_transport_error.emplace(Http2Status::Http2ConnectionError(
|
|
1555
|
+
Http2ErrorCode::kInternalError,
|
|
1556
|
+
std::string(RFC9113::kLastStreamClosed)));
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
if (close_transport_error.has_value()) {
|
|
1562
|
+
GRPC_UNUSED absl::Status status = HandleError(
|
|
1563
|
+
/*stream_id=*/std::nullopt, std::move(*close_transport_error));
|
|
1564
|
+
}
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
// This function is idempotent and MUST be called from the transport party.
|
|
1568
|
+
// All the scenarios that can lead to this function being called are:
|
|
1569
|
+
// 1. Reading a RST stream frame: In this case, the stream is immediately
|
|
1570
|
+
// closed for reads and writes and removed from the stream_list_.
|
|
1571
|
+
// 2. Reading a Trailing Metadata frame: There are two possible scenarios:
|
|
1572
|
+
// a. The stream is closed for writes: Close the stream for reads and writes
|
|
1573
|
+
// and remove the stream from the stream_list_.
|
|
1574
|
+
// b. The stream is NOT closed for writes: Stream is kept open for reads and
|
|
1575
|
+
// writes. CallHandler OnDone will trigger sending a half close frame. If
|
|
1576
|
+
// before the multiplexer loop triggers sending a half close a RST stream
|
|
1577
|
+
// is read, the stream is closed for reads and writes immediately and the
|
|
1578
|
+
// half close is discarded. If no RST stream is read, the stream is closed
|
|
1579
|
+
// for reads and writes upon sending the half close frame from the
|
|
1580
|
+
// multiplexer loop.
|
|
1581
|
+
// 3. Hitting error condition in the transport: In this case, RST stream is
|
|
1582
|
+
// enqueued and the stream is closed for reads immediately. This implies we
|
|
1583
|
+
// reduce the number of active streams inline. When multiplexer loop
|
|
1584
|
+
// processes the RST stream frame, the stream ref will dropped. The other
|
|
1585
|
+
// stream ref will be dropped when CallHandler's OnDone is executed causing
|
|
1586
|
+
// the stream to be destroyed. CallHandlers OnDone also tries to enqueue a
|
|
1587
|
+
// RST stream frame. This is a no-op at this point.
|
|
1588
|
+
// 4. Application abort: In this case, CallHandler OnDone will enqueue RST
|
|
1589
|
+
// stream frame to the stream data queue. The multiplexer loop will send the
|
|
1590
|
+
// reset stream frame and close the stream from reads and writes.
|
|
1591
|
+
// 5. Transport close: This takes up the same path as case 3.
|
|
1592
|
+
// In all the above cases, trailing metadata is pushed to the call spine.
|
|
1593
|
+
// Note: The stream ref is held in atmost 3 places:
|
|
1594
|
+
// 1. stream_list_ : This is released when the stream is closed for reads.
|
|
1595
|
+
// 2. CallHandler OnDone : This is released when Trailing Metadata is pushed to
|
|
1596
|
+
// the call spine.
|
|
1597
|
+
// 3. List of writable streams : This is released after the final frame is
|
|
1598
|
+
// dequeued from the StreamDataQueue.
|
|
1599
|
+
void Http2ClientTransport::BeginCloseStream(
|
|
1600
|
+
RefCountedPtr<Stream> stream,
|
|
1601
|
+
std::optional<uint32_t> reset_stream_error_code,
|
|
1602
|
+
ServerMetadataHandle&& metadata, DebugLocation whence) {
|
|
1603
|
+
if (stream == nullptr) {
|
|
1604
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::BeginCloseStream stream "
|
|
1605
|
+
"is null reset_stream_error_code="
|
|
1606
|
+
<< (reset_stream_error_code.has_value()
|
|
1607
|
+
? absl::StrCat(*reset_stream_error_code)
|
|
1608
|
+
: "nullopt")
|
|
1609
|
+
<< " metadata=" << metadata->DebugString();
|
|
1610
|
+
return;
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1614
|
+
<< "Http2ClientTransport::BeginCloseStream for stream id: "
|
|
1615
|
+
<< stream->GetStreamId() << " error_code="
|
|
1616
|
+
<< (reset_stream_error_code.has_value()
|
|
1617
|
+
? absl::StrCat(*reset_stream_error_code)
|
|
1618
|
+
: "nullopt")
|
|
1619
|
+
<< " ServerMetadata=" << metadata->DebugString()
|
|
1620
|
+
<< " location=" << whence.file() << ":" << whence.line();
|
|
1621
|
+
|
|
1622
|
+
bool close_reads = false;
|
|
1623
|
+
bool close_writes = false;
|
|
1624
|
+
if (metadata->get(GrpcCallWasCancelled())) {
|
|
1625
|
+
if (!reset_stream_error_code) {
|
|
1626
|
+
// Callers taking this path:
|
|
1627
|
+
// 1. Reading a RST stream frame (will not send any frame out).
|
|
1628
|
+
// 2. Closing a stream before initial metadata is sent.
|
|
1629
|
+
close_reads = true;
|
|
1630
|
+
close_writes = true;
|
|
1631
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1632
|
+
<< "Http2ClientTransport::BeginCloseStream for stream id: "
|
|
1633
|
+
<< stream->GetStreamId() << " close_reads= " << close_reads
|
|
1634
|
+
<< " close_writes= " << close_writes;
|
|
1635
|
+
} else {
|
|
1636
|
+
// Callers taking this path:
|
|
1637
|
+
// 1. Processing Error in transport (will send reset stream from here).
|
|
1638
|
+
absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
|
|
1639
|
+
stream->EnqueueResetStream(reset_stream_error_code.value());
|
|
1640
|
+
GRPC_HTTP2_CLIENT_DLOG << "Enqueued ResetStream with error code="
|
|
1641
|
+
<< reset_stream_error_code.value()
|
|
1642
|
+
<< " status=" << enqueue_result.status();
|
|
1643
|
+
if (enqueue_result.ok()) {
|
|
1644
|
+
GRPC_UNUSED absl::Status status =
|
|
1645
|
+
MaybeAddStreamToWritableStreamList(stream, enqueue_result.value());
|
|
1646
|
+
}
|
|
1647
|
+
close_reads = true;
|
|
1648
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1649
|
+
<< "Http2ClientTransport::BeginCloseStream for stream id: "
|
|
1650
|
+
<< stream->GetStreamId() << " close_reads= " << close_reads
|
|
1651
|
+
<< " close_writes= " << close_writes;
|
|
1652
|
+
}
|
|
1653
|
+
} else {
|
|
1654
|
+
// Callers taking this path:
|
|
1655
|
+
// 1. Reading Trailing Metadata (MAY send half close from OnDone).
|
|
1656
|
+
if (stream->IsClosedForWrites()) {
|
|
1657
|
+
close_reads = true;
|
|
1658
|
+
close_writes = true;
|
|
1659
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1660
|
+
<< "Http2ClientTransport::BeginCloseStream for stream id: "
|
|
1661
|
+
<< stream->GetStreamId() << " close_reads= " << close_reads
|
|
1662
|
+
<< " close_writes= " << close_writes;
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1665
|
+
|
|
1666
|
+
if (close_reads || close_writes) {
|
|
1667
|
+
CloseStream(stream, CloseStreamArgs{close_reads, close_writes}, whence);
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
// If the call was cancelled, the stream MUST be closed for reads.
|
|
1671
|
+
GRPC_DCHECK(metadata->get(GrpcCallWasCancelled()) ? close_reads : true);
|
|
1672
|
+
|
|
1673
|
+
// This maybe called multiple times while closing a stream. In CallV3, the
|
|
1674
|
+
// flow for pushing server trailing metadata is idempotent. However, there is
|
|
1675
|
+
// a subtle difference. When we push server trailing metadata with a cancelled
|
|
1676
|
+
// status PushServerTrailingMetadata is spawned inline on the Call party
|
|
1677
|
+
// whereas for the non-cancelled status, PushServerTrailingMetadata is
|
|
1678
|
+
// spawned in the server_to_client spawn serializer. Because of this, in
|
|
1679
|
+
// case when the server pushes trailing metadata (non-cancelled) followed by a
|
|
1680
|
+
// RST stream with cancelled status, it is possible that the cancelled
|
|
1681
|
+
// trailing metadata (for RST stream) is processed before. This would result
|
|
1682
|
+
// in losing the actual status/message pushed by the server.
|
|
1683
|
+
// To address this, we push the server trailing metadata to the stream only
|
|
1684
|
+
// if it is not pushed already.
|
|
1685
|
+
stream->MaybePushServerTrailingMetadata(std::move(metadata));
|
|
1686
|
+
}
|
|
1687
|
+
|
|
1688
|
+
void Http2ClientTransport::CloseTransport() {
|
|
1689
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CloseTransport";
|
|
1690
|
+
|
|
1691
|
+
transport_closed_latch_.Set();
|
|
1692
|
+
settings_->HandleTransportShutdown(event_engine_.get());
|
|
1693
|
+
|
|
1694
|
+
MutexLock lock(&transport_mutex_);
|
|
1695
|
+
// This is the only place where the general_party_ is reset.
|
|
1696
|
+
general_party_.reset();
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
void Http2ClientTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
|
|
1700
|
+
DebugLocation whence) {
|
|
1701
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::MaybeSpawnCloseTransport "
|
|
1702
|
+
"status="
|
|
1703
|
+
<< http2_status << " location=" << whence.file() << ":"
|
|
1704
|
+
<< whence.line();
|
|
1705
|
+
|
|
1706
|
+
// Free up the stream_list at this point. This would still allow the frames
|
|
1707
|
+
// in the MPSC to be drained and block any additional frames from being
|
|
1708
|
+
// enqueued. Additionally this also prevents additional frames with non-zero
|
|
1709
|
+
// stream_ids from being processed by the read loop.
|
|
1710
|
+
ReleasableMutexLock lock(&transport_mutex_);
|
|
1711
|
+
if (is_transport_closed_) {
|
|
1712
|
+
lock.Release();
|
|
1713
|
+
return;
|
|
1714
|
+
}
|
|
1715
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::MaybeSpawnCloseTransport "
|
|
1716
|
+
"Initiating transport close";
|
|
1717
|
+
is_transport_closed_ = true;
|
|
1718
|
+
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list =
|
|
1719
|
+
std::move(stream_list_);
|
|
1720
|
+
stream_list_.clear();
|
|
1721
|
+
ReportDisconnectionLocked(
|
|
1722
|
+
http2_status.GetAbslConnectionError(), {},
|
|
1723
|
+
absl::StrCat("Transport closed: ", http2_status.DebugString()).c_str());
|
|
1724
|
+
lock.Release();
|
|
1725
|
+
|
|
1726
|
+
SpawnInfallibleTransportParty(
|
|
1727
|
+
"CloseTransport", [self = RefAsSubclass<Http2ClientTransport>(),
|
|
1728
|
+
stream_list = std::move(stream_list),
|
|
1729
|
+
http2_status = std::move(http2_status)]() mutable {
|
|
1730
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1731
|
+
<< "Http2ClientTransport::CloseTransport Cleaning up call stacks";
|
|
1732
|
+
// Clean up the call stacks for all active streams.
|
|
1733
|
+
for (const auto& pair : stream_list) {
|
|
1734
|
+
// There is no merit in transitioning the stream to
|
|
1735
|
+
// closed state here as the subsequent lookups would
|
|
1736
|
+
// fail. Also, as this is running on the transport
|
|
1737
|
+
// party, there would not be concurrent access to the stream.
|
|
1738
|
+
auto& stream = pair.second;
|
|
1739
|
+
self->BeginCloseStream(stream,
|
|
1740
|
+
Http2ErrorCodeToFrameErrorCode(
|
|
1741
|
+
http2_status.GetConnectionErrorCode()),
|
|
1742
|
+
CancelledServerMetadataFromStatus(
|
|
1743
|
+
http2_status.GetAbslConnectionError()));
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1746
|
+
// RFC9113 : A GOAWAY frame might not immediately precede closing of
|
|
1747
|
+
// the connection; a receiver of a GOAWAY that has no more use for the
|
|
1748
|
+
// connection SHOULD still send a GOAWAY frame before terminating the
|
|
1749
|
+
// connection.
|
|
1750
|
+
return Map(
|
|
1751
|
+
// TODO(akshitpatel) : [PH2][P4] : This is creating a copy of
|
|
1752
|
+
// the debug data. Verify if this is causing a performance
|
|
1753
|
+
// issue.
|
|
1754
|
+
Race(AssertResultType<absl::Status>(
|
|
1755
|
+
self->goaway_manager_.RequestGoaway(
|
|
1756
|
+
http2_status.GetConnectionErrorCode(),
|
|
1757
|
+
/*debug_data=*/
|
|
1758
|
+
Slice::FromCopiedString(
|
|
1759
|
+
http2_status.GetAbslConnectionError().message()),
|
|
1760
|
+
kLastIncomingStreamIdClient, /*immediate=*/true)),
|
|
1761
|
+
// Failsafe to close the transport if goaway is not
|
|
1762
|
+
// sent within kGoawaySendTimeoutSeconds seconds.
|
|
1763
|
+
Sleep(Duration::Seconds(kGoawaySendTimeoutSeconds))),
|
|
1764
|
+
[self](auto) mutable {
|
|
1765
|
+
self->CloseTransport();
|
|
1766
|
+
return Empty{};
|
|
1767
|
+
});
|
|
1768
|
+
;
|
|
1769
|
+
});
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
bool Http2ClientTransport::CanCloseTransportLocked() const {
|
|
1773
|
+
// If there are no more streams and next stream id is greater than the
|
|
1774
|
+
// max allowed stream id, then no more streams can be created and it is
|
|
1775
|
+
// safe to close the transport.
|
|
1776
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CanCloseTransportLocked "
|
|
1777
|
+
"GetActiveStreamCountLocked="
|
|
1778
|
+
<< GetActiveStreamCountLocked()
|
|
1779
|
+
<< " PeekNextStreamId=" << PeekNextStreamId()
|
|
1780
|
+
<< " GetMaxAllowedStreamId="
|
|
1781
|
+
<< GetMaxAllowedStreamId();
|
|
1782
|
+
return GetActiveStreamCountLocked() == 0 &&
|
|
1783
|
+
PeekNextStreamId() > GetMaxAllowedStreamId();
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
Http2ClientTransport::~Http2ClientTransport() {
|
|
1787
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Destructor Begin";
|
|
1788
|
+
GRPC_DCHECK(stream_list_.empty());
|
|
1789
|
+
GRPC_DCHECK(general_party_ == nullptr);
|
|
1790
|
+
memory_owner_.Reset();
|
|
1791
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Destructor End";
|
|
1792
|
+
}
|
|
1793
|
+
|
|
1794
|
+
void Http2ClientTransport::SpawnAddChannelzData(RefCountedPtr<Party> party,
|
|
1795
|
+
channelz::DataSink sink) {
|
|
1796
|
+
SpawnInfallible(
|
|
1797
|
+
std::move(party), "AddData",
|
|
1798
|
+
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
1799
|
+
sink = std::move(sink)]() mutable {
|
|
1800
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::AddData Promise";
|
|
1801
|
+
sink.AddData(
|
|
1802
|
+
"Http2ClientTransport",
|
|
1803
|
+
channelz::PropertyList()
|
|
1804
|
+
.Set("keepalive_time", self->keepalive_time_)
|
|
1805
|
+
.Set("keepalive_permit_without_calls",
|
|
1806
|
+
self->keepalive_permit_without_calls_)
|
|
1807
|
+
.Set("settings", self->settings_->ChannelzProperties())
|
|
1808
|
+
.Set("flow_control",
|
|
1809
|
+
self->flow_control_.stats().ChannelzProperties()));
|
|
1810
|
+
self->general_party_->ExportToChannelz("Http2ClientTransport Party",
|
|
1811
|
+
sink);
|
|
1812
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::AddData End";
|
|
1813
|
+
return Empty{};
|
|
1814
|
+
});
|
|
1815
|
+
}
|
|
1816
|
+
|
|
1817
|
+
void Http2ClientTransport::AddData(channelz::DataSink sink) {
|
|
1818
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::AddData Begin";
|
|
1819
|
+
|
|
1820
|
+
event_engine_->Run([self = RefAsSubclass<Http2ClientTransport>(),
|
|
1821
|
+
sink = std::move(sink)]() mutable {
|
|
1822
|
+
bool is_party_null = false;
|
|
1823
|
+
{
|
|
1824
|
+
// Apart from CloseTransport, this is the only place where a lock is taken
|
|
1825
|
+
// to access general_party_. All other access to general_party_ happens
|
|
1826
|
+
// on the general party itself and hence do not race with CloseTransport.
|
|
1827
|
+
// TODO(akshitpatel) : [PH2][P4] : Check if a new mutex is needed to
|
|
1828
|
+
// protect general_party_. Curently transport_mutex_ can is used in
|
|
1829
|
+
// these places:
|
|
1830
|
+
// 1. In promises running on the transport party
|
|
1831
|
+
// 2. In AddData promise
|
|
1832
|
+
// 3. In Orphan function.
|
|
1833
|
+
// 4. Stream creation (this will be removed soon).
|
|
1834
|
+
// Given that #1 is already serialized (guaranteed by party), #2 is on
|
|
1835
|
+
// demand and #3 happens once for the lifetime of the transport while
|
|
1836
|
+
// closing the transport, the contention should be minimal.
|
|
1837
|
+
MutexLock lock(&self->transport_mutex_);
|
|
1838
|
+
// TODO(akshitpatel) : [PH2][P2] : There is still a potential for a race
|
|
1839
|
+
// here where the general_party_ is reset between the lock being
|
|
1840
|
+
// released and the spawn. We cannot just do a spawn inside the mutex as
|
|
1841
|
+
// that may result in deadlock.
|
|
1842
|
+
// Potential fix to hold a ref to the party inside the mutex and do a
|
|
1843
|
+
// spawn outside the mutex. The only side effect is that this introduces
|
|
1844
|
+
// an additional ref to the party other the transport's copy.
|
|
1845
|
+
if (GPR_UNLIKELY(self->general_party_ == nullptr)) {
|
|
1846
|
+
is_party_null = true;
|
|
1847
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1848
|
+
<< "Http2ClientTransport::AddData general_party_ is "
|
|
1849
|
+
"null. Transport is closed.";
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
ExecCtx exec_ctx;
|
|
1854
|
+
if (!is_party_null) {
|
|
1855
|
+
self->SpawnAddChannelzData(self->general_party_, std::move(sink));
|
|
1856
|
+
}
|
|
1857
|
+
self.reset(); // Cleanup with exec_ctx in scope
|
|
1858
|
+
});
|
|
1859
|
+
}
|
|
1860
|
+
|
|
1861
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1862
|
+
// Stream Related Operations
|
|
1863
|
+
|
|
1864
|
+
RefCountedPtr<Stream> Http2ClientTransport::LookupStream(uint32_t stream_id) {
|
|
1865
|
+
MutexLock lock(&transport_mutex_);
|
|
1866
|
+
auto it = stream_list_.find(stream_id);
|
|
1867
|
+
if (it == stream_list_.end()) {
|
|
1868
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1869
|
+
<< "Http2ClientTransport::LookupStream Stream not found stream_id="
|
|
1870
|
+
<< stream_id;
|
|
1871
|
+
return nullptr;
|
|
1872
|
+
}
|
|
1873
|
+
return it->second;
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
bool Http2ClientTransport::SetOnDone(CallHandler call_handler,
|
|
1877
|
+
RefCountedPtr<Stream> stream) {
|
|
1878
|
+
return call_handler.OnDone(
|
|
1879
|
+
[self = RefAsSubclass<Http2ClientTransport>(), stream,
|
|
1880
|
+
stream_id = stream->GetStreamId()](bool cancelled) {
|
|
1881
|
+
GRPC_HTTP2_CLIENT_DLOG << "PH2: Client call " << self.get()
|
|
1882
|
+
<< " id=" << stream_id
|
|
1883
|
+
<< " done: cancelled=" << cancelled;
|
|
1884
|
+
absl::StatusOr<StreamWritabilityUpdate> enqueue_result;
|
|
1885
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1886
|
+
<< "PH2: Client call " << self.get() << " id=" << stream_id
|
|
1887
|
+
<< " done: stream=" << stream.get() << " cancelled=" << cancelled;
|
|
1888
|
+
if (cancelled) {
|
|
1889
|
+
// In most of the cases, EnqueueResetStream would be a no-op as
|
|
1890
|
+
// BeginCloseStream would have already enqueued the reset stream.
|
|
1891
|
+
// Currently only Aborts from application will actually enqueue
|
|
1892
|
+
// the reset stream here.
|
|
1893
|
+
enqueue_result = stream->EnqueueResetStream(
|
|
1894
|
+
static_cast<uint32_t>(Http2ErrorCode::kCancel));
|
|
1895
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1896
|
+
<< "Enqueued ResetStream with error code="
|
|
1897
|
+
<< static_cast<uint32_t>(Http2ErrorCode::kCancel)
|
|
1898
|
+
<< " status=" << enqueue_result.status();
|
|
1899
|
+
} else {
|
|
1900
|
+
enqueue_result = stream->EnqueueHalfClosed();
|
|
1901
|
+
GRPC_HTTP2_CLIENT_DLOG << "Enqueued HalfClosed with result="
|
|
1902
|
+
<< enqueue_result.status();
|
|
1903
|
+
}
|
|
1904
|
+
|
|
1905
|
+
if (enqueue_result.ok()) {
|
|
1906
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1907
|
+
<< "Http2ClientTransport::SetOnDone "
|
|
1908
|
+
"MaybeAddStreamToWritableStreamList for stream= "
|
|
1909
|
+
<< stream->GetStreamId() << " enqueue_result={became_writable="
|
|
1910
|
+
<< enqueue_result.value().became_writable << ", priority="
|
|
1911
|
+
<< static_cast<uint8_t>(enqueue_result.value().priority) << "}";
|
|
1912
|
+
GRPC_UNUSED absl::Status status =
|
|
1913
|
+
self->MaybeAddStreamToWritableStreamList(stream,
|
|
1914
|
+
enqueue_result.value());
|
|
1915
|
+
}
|
|
1916
|
+
});
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
std::optional<RefCountedPtr<Stream>> Http2ClientTransport::MakeStream(
|
|
1920
|
+
CallHandler call_handler) {
|
|
1921
|
+
// https://datatracker.ietf.org/doc/html/rfc9113#name-stream-identifiers
|
|
1922
|
+
RefCountedPtr<Stream> stream;
|
|
1923
|
+
{
|
|
1924
|
+
// TODO(akshitpatel) : [PH2][P3] : Remove this mutex once settings is in
|
|
1925
|
+
// place.
|
|
1926
|
+
MutexLock lock(&transport_mutex_);
|
|
1927
|
+
stream = MakeRefCounted<Stream>(call_handler, flow_control_);
|
|
1928
|
+
}
|
|
1929
|
+
const bool on_done_added = SetOnDone(call_handler, stream);
|
|
1930
|
+
if (!on_done_added) return std::nullopt;
|
|
1931
|
+
return stream;
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
uint32_t Http2ClientTransport::GetMaxAllowedStreamId() const {
|
|
1935
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport GetMaxAllowedStreamId "
|
|
1936
|
+
<< max_allowed_stream_id_;
|
|
1937
|
+
return max_allowed_stream_id_;
|
|
1938
|
+
}
|
|
1939
|
+
|
|
1940
|
+
void Http2ClientTransport::SetMaxAllowedStreamId(
|
|
1941
|
+
const uint32_t max_allowed_stream_id) {
|
|
1942
|
+
const uint32_t old_max_allowed_stream_id = GetMaxAllowedStreamId();
|
|
1943
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport SetMaxAllowedStreamId "
|
|
1944
|
+
<< " max_allowed_stream_id: " << max_allowed_stream_id
|
|
1945
|
+
<< " old_allowed_max_stream_id: "
|
|
1946
|
+
<< old_max_allowed_stream_id;
|
|
1947
|
+
// RFC9113 : Endpoints MUST NOT increase the value they send in the last
|
|
1948
|
+
// stream identifier, since the peers might already have retried unprocessed
|
|
1949
|
+
// requests on another connection.
|
|
1950
|
+
if (GPR_LIKELY(max_allowed_stream_id <= old_max_allowed_stream_id)) {
|
|
1951
|
+
max_allowed_stream_id_ = max_allowed_stream_id;
|
|
1952
|
+
} else {
|
|
1953
|
+
LOG_IF(ERROR, max_allowed_stream_id > old_max_allowed_stream_id)
|
|
1954
|
+
<< "Endpoints MUST NOT increase the value they send in the last "
|
|
1955
|
+
"stream "
|
|
1956
|
+
"identifier";
|
|
1957
|
+
GRPC_DCHECK_LE(max_allowed_stream_id, old_max_allowed_stream_id)
|
|
1958
|
+
<< "Endpoints MUST NOT increase the value they send in the last "
|
|
1959
|
+
"stream "
|
|
1960
|
+
"identifier";
|
|
1961
|
+
}
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1965
|
+
// Call Spine related operations
|
|
1966
|
+
|
|
1967
|
+
auto Http2ClientTransport::CallOutboundLoop(CallHandler call_handler,
|
|
1968
|
+
RefCountedPtr<Stream> stream,
|
|
1969
|
+
ClientMetadataHandle metadata) {
|
|
1970
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport CallOutboundLoop";
|
|
1971
|
+
GRPC_DCHECK(stream != nullptr);
|
|
1972
|
+
|
|
1973
|
+
auto send_message = [self = RefAsSubclass<Http2ClientTransport>(),
|
|
1974
|
+
stream](MessageHandle&& message) mutable {
|
|
1975
|
+
return TrySeq(stream->EnqueueMessage(std::move(message)),
|
|
1976
|
+
[self, stream](const StreamWritabilityUpdate result) mutable {
|
|
1977
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
1978
|
+
<< "Http2ClientTransport CallOutboundLoop "
|
|
1979
|
+
"Enqueued Message";
|
|
1980
|
+
return self->MaybeAddStreamToWritableStreamList(
|
|
1981
|
+
std::move(stream), result);
|
|
1982
|
+
});
|
|
1983
|
+
};
|
|
1984
|
+
|
|
1985
|
+
auto send_initial_metadata = [self = RefAsSubclass<Http2ClientTransport>(),
|
|
1986
|
+
stream,
|
|
1987
|
+
metadata = std::move(metadata)]() mutable {
|
|
1988
|
+
return TrySeq(
|
|
1989
|
+
[stream, metadata = std::move(metadata)]() mutable {
|
|
1990
|
+
return stream->EnqueueInitialMetadata(std::move(metadata));
|
|
1991
|
+
},
|
|
1992
|
+
[self, stream](const StreamWritabilityUpdate result) mutable {
|
|
1993
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport CallOutboundLoop "
|
|
1994
|
+
"Enqueued Initial Metadata";
|
|
1995
|
+
return self->MaybeAddStreamToWritableStreamList(std::move(stream),
|
|
1996
|
+
result);
|
|
1997
|
+
});
|
|
1998
|
+
};
|
|
1999
|
+
|
|
2000
|
+
auto send_half_closed = [self = RefAsSubclass<Http2ClientTransport>(),
|
|
2001
|
+
stream]() mutable {
|
|
2002
|
+
return TrySeq([stream]() { return stream->EnqueueHalfClosed(); },
|
|
2003
|
+
[self, stream](const StreamWritabilityUpdate result) mutable {
|
|
2004
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
2005
|
+
<< "Http2ClientTransport CallOutboundLoop "
|
|
2006
|
+
"Enqueued Half Closed";
|
|
2007
|
+
return self->MaybeAddStreamToWritableStreamList(
|
|
2008
|
+
std::move(stream), result);
|
|
2009
|
+
});
|
|
2010
|
+
};
|
|
2011
|
+
return GRPC_LATENT_SEE_PROMISE(
|
|
2012
|
+
"Ph2CallOutboundLoop",
|
|
2013
|
+
TrySeq(
|
|
2014
|
+
send_initial_metadata(),
|
|
2015
|
+
[call_handler, send_message]() {
|
|
2016
|
+
// The lock will be released once the promise is constructed from
|
|
2017
|
+
// this factory. ForEach will be polled after the lock is
|
|
2018
|
+
// released.
|
|
2019
|
+
return ForEach(MessagesFrom(call_handler), send_message);
|
|
2020
|
+
},
|
|
2021
|
+
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
2022
|
+
send_half_closed = std::move(send_half_closed)]() mutable {
|
|
2023
|
+
return send_half_closed();
|
|
2024
|
+
},
|
|
2025
|
+
[call_handler]() mutable {
|
|
2026
|
+
return Map(call_handler.WasCancelled(), [](bool cancelled) {
|
|
2027
|
+
GRPC_HTTP2_CLIENT_DLOG
|
|
2028
|
+
<< "Http2ClientTransport PH2CallOutboundLoop End with "
|
|
2029
|
+
"cancelled="
|
|
2030
|
+
<< cancelled;
|
|
2031
|
+
return (cancelled) ? absl::CancelledError() : absl::OkStatus();
|
|
2032
|
+
});
|
|
2033
|
+
}));
|
|
2034
|
+
}
|
|
2035
|
+
|
|
2036
|
+
void Http2ClientTransport::StartCall(CallHandler call_handler) {
|
|
2037
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport StartCall Begin";
|
|
2038
|
+
call_handler.SpawnGuarded(
|
|
2039
|
+
"OutboundLoop",
|
|
2040
|
+
TrySeq(call_handler.PullClientInitialMetadata(),
|
|
2041
|
+
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
2042
|
+
call_handler](ClientMetadataHandle metadata) mutable {
|
|
2043
|
+
// For a gRPC Client, we only need to check the
|
|
2044
|
+
// MAX_CONCURRENT_STREAMS setting compliance at the time of
|
|
2045
|
+
// sending (that is write path). A gRPC Client will never
|
|
2046
|
+
// receive a stream initiated by a server, so we dont have to
|
|
2047
|
+
// check MAX_CONCURRENT_STREAMS compliance on the Read-Path.
|
|
2048
|
+
//
|
|
2049
|
+
// TODO(tjagtap) : [PH2][P1] Check for MAX_CONCURRENT_STREAMS
|
|
2050
|
+
// sent by peer before making a stream. Decide behaviour if we
|
|
2051
|
+
// are crossing this threshold.
|
|
2052
|
+
//
|
|
2053
|
+
// TODO(tjagtap) : [PH2][P1] : For a server we will have to do
|
|
2054
|
+
// this for incoming streams only. If a server receives more
|
|
2055
|
+
// streams from a client than is allowed by the clients settings,
|
|
2056
|
+
// whether or not we should fail is debatable.
|
|
2057
|
+
std::optional<RefCountedPtr<Stream>> stream =
|
|
2058
|
+
self->MakeStream(call_handler);
|
|
2059
|
+
return If(
|
|
2060
|
+
stream.has_value(),
|
|
2061
|
+
[self, call_handler, stream,
|
|
2062
|
+
initial_metadata = std::move(metadata)]() mutable {
|
|
2063
|
+
return Map(
|
|
2064
|
+
self->CallOutboundLoop(call_handler, stream.value(),
|
|
2065
|
+
std::move(initial_metadata)),
|
|
2066
|
+
[](absl::Status status) { return status; });
|
|
2067
|
+
},
|
|
2068
|
+
[]() {
|
|
2069
|
+
return absl::InternalError("Failed to make stream");
|
|
2070
|
+
});
|
|
2071
|
+
}));
|
|
2072
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport StartCall End";
|
|
2073
|
+
}
|
|
2074
|
+
|
|
2075
|
+
} // namespace http2
|
|
2076
|
+
} // namespace grpc_core
|