grpc 1.75.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 +24 -5
- data/include/grpc/credentials.h +27 -6
- data/include/grpc/event_engine/memory_allocator.h +2 -0
- data/include/grpc/event_engine/memory_request.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +5 -0
- data/include/grpc/support/metrics.h +7 -1
- data/src/core/call/call_filters.cc +5 -5
- data/src/core/call/call_filters.h +211 -37
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +54 -32
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +49 -10
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +9 -9
- data/src/core/call/interception_chain.h +7 -6
- 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 +1 -1
- data/src/core/channelz/channel_trace.h +3 -3
- data/src/core/channelz/channelz.cc +25 -29
- data/src/core/channelz/channelz.h +73 -22
- data/src/core/channelz/channelz_registry.cc +2 -2
- data/src/core/channelz/channelz_registry.h +53 -2
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +15 -4
- 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 +17 -6
- data/src/core/channelz/v2tov1/legacy_api.cc +18 -12
- data/src/core/channelz/v2tov1/property_list.cc +2 -1
- data/src/core/channelz/ztrace_collector.h +260 -87
- data/src/core/client_channel/backup_poller.cc +7 -8
- 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 +144 -84
- 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 +424 -686
- data/src/core/client_channel/client_channel_filter.h +57 -150
- data/src/core/client_channel/client_channel_internal.h +8 -5
- 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 +5 -5
- data/src/core/client_channel/connector.h +2 -0
- data/src/core/client_channel/dynamic_filters.cc +5 -5
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +1 -28
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +10 -12
- 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 +2 -2
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +11 -12
- data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
- 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/subchannel.cc +114 -25
- data/src/core/client_channel/subchannel.h +24 -8
- data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
- data/src/core/client_channel/subchannel_pool_interface.h +1 -1
- 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 +38 -3
- data/src/core/config/config_vars.h +26 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +8 -8
- 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 +1 -1
- data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
- 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/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 +7 -7
- 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 +24 -71
- 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 +19 -18
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
- data/src/core/credentials/call/jwt_util.cc +3 -3
- data/src/core/credentials/call/jwt_util.h +1 -1
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +49 -72
- 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 -5
- data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -15
- data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
- 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 +1 -1
- 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 +83 -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 +13 -13
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -8
- 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 +25 -25
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +8 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -5
- 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 +1 -1
- data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
- data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
- data/src/core/credentials/transport/tls/ssl_utils.cc +18 -13
- data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +3 -3
- data/src/core/credentials/transport/tls/tls_security_connector.cc +15 -15
- data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
- 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 -5
- data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
- 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 +6 -4
- 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 +2 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
- 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 +6 -6
- data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
- 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 +11 -11
- data/src/core/ext/filters/http/message_compress/compression_filter.h +24 -5
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- 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 +14 -14
- 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/client/chttp2_connector.cc +58 -44
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +25 -24
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
- 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 +306 -148
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -7
- data/src/core/ext/transport/chttp2/transport/flow_control.h +223 -83
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +175 -27
- data/src/core/ext/transport/chttp2/transport/frame.h +58 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
- 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 +194 -54
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -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 +34 -34
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1475 -632
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +384 -373
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -5
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +337 -30
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +196 -21
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +172 -72
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -19
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
- data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +30 -21
- data/src/core/ext/transport/chttp2/transport/parsing.cc +25 -23
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +70 -28
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +63 -23
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
- 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 +476 -208
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +57 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +202 -84
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
- data/src/core/ext/transport/inproc/inproc_transport.cc +9 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +11 -8
- 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/handshaker.upb.h +87 -55
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
- 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/service.upbdefs.c +129 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
- data/src/core/filter/auth/auth_filters.h +7 -1
- data/src/core/filter/auth/client_auth_filter.cc +2 -2
- 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 +40 -2
- data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
- data/src/core/handshaker/handshaker.cc +8 -8
- data/src/core/handshaker/handshaker.h +2 -2
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +12 -12
- 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 +6 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +38 -15
- data/src/core/handshaker/security/secure_endpoint.cc +31 -11
- data/src/core/handshaker/security/security_handshaker.cc +11 -8
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -6
- 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 +4 -4
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
- data/src/core/lib/channel/channel_args.cc +1 -1
- data/src/core/lib/channel/channel_args.h +2 -2
- data/src/core/lib/channel/channel_stack.cc +29 -25
- data/src/core/lib/channel/channel_stack.h +8 -3
- 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 +1 -1
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/promise_based_filter.cc +132 -72
- data/src/core/lib/channel/promise_based_filter.h +39 -23
- 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 +2 -2
- data/src/core/lib/debug/trace_flags.h +1 -1
- data/src/core/lib/event_engine/ares_resolver.cc +30 -28
- data/src/core/lib/event_engine/ares_resolver.h +4 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
- 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/event_engine.cc +1 -1
- data/src/core/lib/event_engine/extensions/channelz.h +3 -3
- 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 +8 -1
- data/src/core/lib/event_engine/grpc_polled_fd.h +1 -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 +12 -12
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -27
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +175 -177
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +40 -61
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +11 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +9 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
- 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 +8 -11
- data/src/core/lib/event_engine/shim.h +2 -1
- data/src/core/lib/event_engine/slice.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +15 -15
- 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/work_stealing_thread_pool.cc +11 -11
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
- data/src/core/lib/event_engine/utils.cc +3 -3
- data/src/core/lib/event_engine/utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +32 -32
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -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 +16 -16
- data/src/core/lib/event_engine/windows/windows_engine.cc +20 -18
- data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +10 -10
- 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 +255 -42
- data/src/core/lib/experiments/experiments.h +105 -21
- 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 +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -7
- 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 +19 -19
- data/src/core/lib/iomgr/ev_poll_posix.cc +14 -14
- 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 +10 -9
- 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 +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- 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 -1
- 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 +4 -4
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -4
- 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 +7 -7
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +47 -47
- 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 +70 -31
- data/src/core/lib/iomgr/tcp_windows.cc +8 -8
- 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 +11 -10
- data/src/core/lib/promise/all_ok.h +3 -3
- data/src/core/lib/promise/arena_promise.h +47 -6
- 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 +1 -1
- data/src/core/lib/promise/detail/promise_like.h +1 -1
- data/src/core/lib/promise/detail/seq_state.h +16 -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 +1 -1
- data/src/core/lib/promise/inter_activity_latch.h +3 -3
- data/src/core/lib/promise/inter_activity_mutex.h +1 -1
- 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 +2 -2
- data/src/core/lib/promise/map.h +2 -2
- data/src/core/lib/promise/mpsc.cc +31 -30
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.cc +43 -30
- data/src/core/lib/promise/party.h +27 -23
- data/src/core/lib/promise/pipe.h +31 -17
- data/src/core/lib/promise/poll.h +6 -5
- data/src/core/lib/promise/promise.h +2 -4
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +8 -8
- data/src/core/lib/promise/try_join.h +5 -5
- data/src/core/lib/promise/try_seq.h +5 -5
- data/src/core/lib/promise/wait_set.h +2 -2
- 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 +15 -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 +48 -27
- data/src/core/lib/resource_quota/memory_quota.h +56 -20
- data/src/core/lib/resource_quota/periodic_update.h +1 -1
- data/src/core/lib/resource_quota/resource_quota.cc +8 -0
- data/src/core/lib/resource_quota/resource_quota.h +2 -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 +3 -3
- 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 +2 -2
- data/src/core/lib/slice/slice_buffer.cc +1 -1
- 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 +58 -28
- data/src/core/lib/surface/call.h +13 -6
- 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 +12 -8
- data/src/core/lib/surface/channel_create.h +1 -1
- data/src/core/lib/surface/channel_init.cc +84 -27
- data/src/core/lib/surface/channel_init.h +30 -13
- data/src/core/lib/surface/completion_queue.cc +21 -20
- 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 +25 -31
- data/src/core/lib/surface/filter_stack_call.h +6 -7
- data/src/core/lib/surface/init.cc +4 -4
- 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 +10 -10
- data/src/core/lib/surface/legacy_channel.h +1 -1
- 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 +4 -4
- data/src/core/lib/transport/promise_endpoint.h +11 -11
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +3 -3
- data/src/core/lib/transport/transport.h +62 -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 +1 -1
- data/src/core/load_balancing/backend_metric_parser.h +1 -1
- data/src/core/load_balancing/child_policy_handler.cc +8 -8
- data/src/core/load_balancing/child_policy_handler.h +2 -2
- data/src/core/load_balancing/delegating_helper.h +2 -2
- data/src/core/load_balancing/endpoint_list.cc +6 -6
- data/src/core/load_balancing/endpoint_list.h +2 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
- data/src/core/load_balancing/grpclb/grpclb.cc +37 -48
- 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 +13 -9
- data/src/core/load_balancing/health_check_client_internal.h +5 -5
- data/src/core/load_balancing/lb_policy.h +11 -8
- 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 +11 -7
- data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +9 -17
- data/src/core/load_balancing/pick_first/pick_first.cc +62 -32
- 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 +23 -23
- data/src/core/load_balancing/round_robin/round_robin.cc +16 -16
- 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 +42 -41
- data/src/core/load_balancing/weighted_target/weighted_target.cc +14 -14
- data/src/core/load_balancing/xds/cds.cc +81 -37
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +24 -41
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +14 -14
- 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/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 +1 -1
- 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 +35 -35
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +16 -16
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
- 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 +4 -4
- data/src/core/resolver/xds/xds_config.cc +1 -1
- data/src/core/resolver/xds/xds_config.h +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +7 -7
- data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
- data/src/core/resolver/xds/xds_resolver.cc +25 -22
- data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
- data/src/core/server/add_port.cc +2 -2
- data/src/core/server/server.cc +47 -43
- data/src/core/server/server.h +8 -7
- data/src/core/server/server_call_tracer_filter.cc +1 -1
- data/src/core/server/server_call_tracer_filter.h +9 -5
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +5 -5
- 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 +19 -18
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
- data/src/core/service_config/service_config_impl.cc +3 -3
- data/src/core/service_config/service_config_impl.h +4 -4
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +201 -24
- data/src/core/telemetry/default_tcp_tracer.h +3 -3
- 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 +36 -5
- data/src/core/telemetry/stats.h +2 -2
- data/src/core/telemetry/stats_data.cc +1 -20
- data/src/core/telemetry/stats_data.h +2 -21
- data/src/core/transport/auth_context.cc +3 -3
- data/src/core/transport/auth_context.h +2 -1
- data/src/core/transport/auth_context_comparator_registry.h +1 -1
- 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 +81 -48
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +46 -36
- 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 +18 -5
- data/src/core/tsi/fake_transport_security.cc +6 -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 +30 -30
- data/src/core/tsi/ssl_transport_security.h +1 -1
- data/src/core/tsi/ssl_transport_security_utils.cc +10 -10
- data/src/core/tsi/ssl_transport_security_utils.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/alloc.cc +1 -1
- data/src/core/util/backoff.h +1 -1
- data/src/core/util/chunked_vector.h +4 -4
- data/src/core/util/crash.h +1 -1
- data/src/core/util/dual_ref_counted.h +2 -2
- data/src/core/util/event_log.cc +2 -2
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/gcp_metadata_query.cc +7 -7
- 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 +6 -6
- data/src/core/util/http_client/httpcli.h +4 -4
- data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
- 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 +6 -6
- 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 +45 -24
- data/src/core/util/latent_see.h +199 -28
- data/src/core/util/linux/cpu.cc +1 -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 +3 -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 +17 -1
- data/src/core/util/mpscq.h +1 -1
- data/src/core/util/notification.h +1 -1
- 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 +6 -1
- data/src/core/util/ref_counted_string.h +1 -1
- data/src/core/util/single_set_ptr.h +3 -1
- 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 +6 -1
- 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.h +2 -2
- data/src/core/util/windows/directory_reader.cc +1 -1
- data/src/core/util/windows/stat.cc +2 -2
- data/src/core/util/windows/thd.cc +2 -2
- data/src/core/util/windows/time.cc +1 -1
- data/src/core/util/work_serializer.cc +3 -3
- 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 +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -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 +7 -7
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -3
- data/src/core/xds/grpc/xds_certificate_provider.cc +4 -4
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +39 -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 +5 -5
- 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 +3 -3
- data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
- data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
- 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 +2 -2
- data/src/core/xds/grpc/xds_route_config.cc +3 -3
- data/src/core/xds/grpc/xds_route_config_parser.cc +14 -14
- 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 +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +11 -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_client.cc +17 -17
- 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 +14 -12
- data/src/ruby/ext/grpc/rb_call.c +0 -1
- 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_compression_options.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- 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/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/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
- data/src/ruby/spec/spec_helper.rb +1 -1
- data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
- metadata +67 -8
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
//
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2025 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
|
+
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
|
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
|
|
21
|
+
|
|
22
|
+
#include <algorithm>
|
|
23
|
+
#include <cstdint>
|
|
24
|
+
#include <vector>
|
|
25
|
+
|
|
26
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
27
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
28
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
29
|
+
#include "src/core/util/grpc_check.h"
|
|
30
|
+
#include "absl/container/flat_hash_map.h"
|
|
31
|
+
|
|
32
|
+
namespace grpc_core {
|
|
33
|
+
namespace http2 {
|
|
34
|
+
|
|
35
|
+
constexpr chttp2::FlowControlAction::Urgency kNoActionNeeded =
|
|
36
|
+
chttp2::FlowControlAction::Urgency::NO_ACTION_NEEDED;
|
|
37
|
+
constexpr chttp2::FlowControlAction::Urgency kUpdateImmediately =
|
|
38
|
+
chttp2::FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
|
39
|
+
constexpr int64_t kZero = 0;
|
|
40
|
+
|
|
41
|
+
#define GRPC_HTTP2_FLOW_CONTROL_HELPERS \
|
|
42
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
43
|
+
|
|
44
|
+
// Function to update local settings based on FlowControlAction.
|
|
45
|
+
// This function does the settings related tasks equivalent to
|
|
46
|
+
// grpc_chttp2_act_on_flowctl_action in chttp2_transport.cc
|
|
47
|
+
inline void ActOnFlowControlActionSettings(
|
|
48
|
+
const chttp2::FlowControlAction& action, Http2Settings& local_settings,
|
|
49
|
+
const bool enable_preferred_rx_crypto_frame_advertisement) {
|
|
50
|
+
if (action.send_initial_window_update() != kNoActionNeeded) {
|
|
51
|
+
local_settings.SetInitialWindowSize(action.initial_window_size());
|
|
52
|
+
}
|
|
53
|
+
if (action.send_max_frame_size_update() != kNoActionNeeded) {
|
|
54
|
+
local_settings.SetMaxFrameSize(action.max_frame_size());
|
|
55
|
+
}
|
|
56
|
+
if (enable_preferred_rx_crypto_frame_advertisement &&
|
|
57
|
+
action.preferred_rx_crypto_frame_size_update() != kNoActionNeeded) {
|
|
58
|
+
local_settings.SetPreferredReceiveCryptoMessageSize(
|
|
59
|
+
action.preferred_rx_crypto_frame_size());
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// RFC9113 : A sender MUST NOT allow a flow-control window to exceed ((2^31)-1)
|
|
64
|
+
// octets. If a sender receives a WINDOW_UPDATE that causes a flow-control
|
|
65
|
+
// window to exceed this maximum, it MUST terminate either the stream or the
|
|
66
|
+
// connection, as appropriate.
|
|
67
|
+
// While the return value is int64_t for compatibility with CHTTP2 flow control,
|
|
68
|
+
// we dont expect this value to exceed ((2^31)-1) i.e kMaxSize31Bit
|
|
69
|
+
inline int64_t GetStreamFlowControlTokens(
|
|
70
|
+
chttp2::StreamFlowControl& stream_flow_control,
|
|
71
|
+
const Http2Settings& peer_settings) {
|
|
72
|
+
GRPC_DCHECK(stream_flow_control.remote_window_delta() +
|
|
73
|
+
peer_settings.initial_window_size() <=
|
|
74
|
+
RFC9113::kMaxSize31Bit);
|
|
75
|
+
return std::max(kZero, stream_flow_control.remote_window_delta() +
|
|
76
|
+
peer_settings.initial_window_size());
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
inline uint32_t GetMaxPermittedDequeue(
|
|
80
|
+
chttp2::TransportFlowControl& transport_flow_control,
|
|
81
|
+
chttp2::StreamFlowControl& stream_flow_control, const size_t upper_limit,
|
|
82
|
+
const Http2Settings& peer_settings) {
|
|
83
|
+
const int64_t flow_control_tokens =
|
|
84
|
+
std::min(transport_flow_control.remote_window(),
|
|
85
|
+
GetStreamFlowControlTokens(stream_flow_control, peer_settings));
|
|
86
|
+
uint32_t max_dequeue = 0;
|
|
87
|
+
if (flow_control_tokens > 0) {
|
|
88
|
+
max_dequeue = static_cast<uint32_t>(
|
|
89
|
+
std::min({static_cast<size_t>(flow_control_tokens), upper_limit,
|
|
90
|
+
static_cast<size_t>(RFC9113::kMaxSize31Bit - 1)}));
|
|
91
|
+
}
|
|
92
|
+
GRPC_HTTP2_FLOW_CONTROL_HELPERS
|
|
93
|
+
<< "GetFlowControlTokens flow_control_tokens = " << flow_control_tokens
|
|
94
|
+
<< " upper_limit = " << upper_limit << " max_dequeue = " << max_dequeue;
|
|
95
|
+
return max_dequeue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// TODO(tjagtap) [PH2][P4] : Ensure that the total transport flow control window
|
|
99
|
+
// or stream flow control window does not exceed the max permitted limit of
|
|
100
|
+
// 2^31-1
|
|
101
|
+
|
|
102
|
+
} // namespace http2
|
|
103
|
+
} // namespace grpc_core
|
|
104
|
+
|
|
105
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
|
|
@@ -20,14 +20,18 @@
|
|
|
20
20
|
#include <cstdint>
|
|
21
21
|
#include <string>
|
|
22
22
|
#include <utility>
|
|
23
|
+
#include <vector>
|
|
23
24
|
|
|
24
|
-
#include "
|
|
25
|
-
#include "absl/status/status.h"
|
|
26
|
-
#include "absl/strings/str_cat.h"
|
|
25
|
+
#include "src/core/call/message.h"
|
|
27
26
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
27
|
+
#include "src/core/lib/debug/trace_impl.h"
|
|
28
28
|
#include "src/core/lib/slice/slice.h"
|
|
29
29
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
30
30
|
#include "src/core/util/crash.h"
|
|
31
|
+
#include "src/core/util/grpc_check.h"
|
|
32
|
+
#include "src/core/util/memory_usage.h"
|
|
33
|
+
#include "absl/log/log.h"
|
|
34
|
+
#include "absl/strings/str_cat.h"
|
|
31
35
|
|
|
32
36
|
// TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
|
|
33
37
|
// framing code
|
|
@@ -38,6 +42,9 @@ using grpc_core::http2::ValueOrHttp2Status;
|
|
|
38
42
|
|
|
39
43
|
namespace grpc_core {
|
|
40
44
|
|
|
45
|
+
#define GRPC_HTTP2_FRAME_DLOG \
|
|
46
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
47
|
+
|
|
41
48
|
///////////////////////////////////////////////////////////////////////////////
|
|
42
49
|
// Settings Frame Validations
|
|
43
50
|
|
|
@@ -119,7 +126,7 @@ uint16_t Read2b(const uint8_t* input) {
|
|
|
119
126
|
}
|
|
120
127
|
|
|
121
128
|
void Write3b(uint32_t x, uint8_t* output) {
|
|
122
|
-
|
|
129
|
+
GRPC_CHECK_LT(x, 16777216u);
|
|
123
130
|
output[0] = static_cast<uint8_t>(x >> 16);
|
|
124
131
|
output[1] = static_cast<uint8_t>(x >> 8);
|
|
125
132
|
output[2] = static_cast<uint8_t>(x);
|
|
@@ -206,11 +213,18 @@ class SerializeExtraBytesRequired {
|
|
|
206
213
|
|
|
207
214
|
class SerializeHeaderAndPayload {
|
|
208
215
|
public:
|
|
209
|
-
SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out
|
|
216
|
+
SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out,
|
|
217
|
+
SerializeReturn& serialize_return)
|
|
210
218
|
: out_(out),
|
|
211
|
-
extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes))
|
|
219
|
+
extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes)),
|
|
220
|
+
serialize_return_(serialize_return) {}
|
|
212
221
|
|
|
213
222
|
void operator()(Http2DataFrame& frame) {
|
|
223
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
224
|
+
<< "SerializeHeaderAndPayload Http2DataFrame Type:0 { stream_id:"
|
|
225
|
+
<< frame.stream_id << ", end_stream:" << frame.end_stream
|
|
226
|
+
<< ", payload_length:" << frame.payload.Length()
|
|
227
|
+
<< ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
|
|
214
228
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
215
229
|
Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
|
|
216
230
|
static_cast<uint8_t>(FrameType::kData),
|
|
@@ -219,9 +233,16 @@ class SerializeHeaderAndPayload {
|
|
|
219
233
|
.Serialize(hdr.begin());
|
|
220
234
|
out_.AppendIndexed(Slice(std::move(hdr)));
|
|
221
235
|
out_.TakeAndAppend(frame.payload);
|
|
236
|
+
serialize_return_.should_reset_ping_clock = true;
|
|
222
237
|
}
|
|
223
238
|
|
|
224
239
|
void operator()(Http2HeaderFrame& frame) {
|
|
240
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
241
|
+
<< "SerializeHeaderAndPayload Http2HeaderFrame Type:1 { stream_id:"
|
|
242
|
+
<< frame.stream_id << ", end_headers:" << frame.end_headers
|
|
243
|
+
<< ", end_stream:" << frame.end_stream
|
|
244
|
+
<< ", payload_length:" << frame.payload.Length()
|
|
245
|
+
<< ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
|
|
225
246
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
226
247
|
Http2FrameHeader{
|
|
227
248
|
static_cast<uint32_t>(frame.payload.Length()),
|
|
@@ -232,9 +253,17 @@ class SerializeHeaderAndPayload {
|
|
|
232
253
|
.Serialize(hdr.begin());
|
|
233
254
|
out_.AppendIndexed(Slice(std::move(hdr)));
|
|
234
255
|
out_.TakeAndAppend(frame.payload);
|
|
256
|
+
serialize_return_.should_reset_ping_clock = true;
|
|
235
257
|
}
|
|
236
258
|
|
|
237
259
|
void operator()(Http2ContinuationFrame& frame) {
|
|
260
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2ContinuationFrame "
|
|
261
|
+
"Type:9 { stream_id:"
|
|
262
|
+
<< frame.stream_id
|
|
263
|
+
<< ", end_headers:" << frame.end_headers
|
|
264
|
+
<< ", payload_length:" << frame.payload.Length()
|
|
265
|
+
<< ", payload:" << MaybeTruncatePayload(frame.payload)
|
|
266
|
+
<< "}";
|
|
238
267
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
239
268
|
Http2FrameHeader{
|
|
240
269
|
static_cast<uint32_t>(frame.payload.Length()),
|
|
@@ -244,9 +273,13 @@ class SerializeHeaderAndPayload {
|
|
|
244
273
|
.Serialize(hdr.begin());
|
|
245
274
|
out_.AppendIndexed(Slice(std::move(hdr)));
|
|
246
275
|
out_.TakeAndAppend(frame.payload);
|
|
276
|
+
serialize_return_.should_reset_ping_clock = true;
|
|
247
277
|
}
|
|
248
278
|
|
|
249
279
|
void operator()(Http2RstStreamFrame& frame) {
|
|
280
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
281
|
+
<< "SerializeHeaderAndPayload Http2RstStreamFrame Type:3 { stream_id:"
|
|
282
|
+
<< frame.stream_id << ", error_code:" << frame.error_code << "}";
|
|
250
283
|
auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
|
|
251
284
|
Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kRstStream), 0,
|
|
252
285
|
frame.stream_id}
|
|
@@ -256,6 +289,10 @@ class SerializeHeaderAndPayload {
|
|
|
256
289
|
}
|
|
257
290
|
|
|
258
291
|
void operator()(Http2SettingsFrame& frame) {
|
|
292
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
293
|
+
<< "SerializeHeaderAndPayload Http2SettingsFrame Type:4 { ack:"
|
|
294
|
+
<< frame.ack << ", length:" << frame.settings.size() << ", settings:["
|
|
295
|
+
<< DebugStringSettings(frame.settings) << "] }";
|
|
259
296
|
// Six bytes per setting (u16 id, u32 value)
|
|
260
297
|
const size_t payload_size = 6 * frame.settings.size();
|
|
261
298
|
auto hdr_and_payload =
|
|
@@ -274,6 +311,9 @@ class SerializeHeaderAndPayload {
|
|
|
274
311
|
}
|
|
275
312
|
|
|
276
313
|
void operator()(Http2PingFrame& frame) {
|
|
314
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
315
|
+
<< "SerializeHeaderAndPayload Http2PingFrame Type:6 { ack:" << frame.ack
|
|
316
|
+
<< ", opaque:" << frame.opaque << "}";
|
|
277
317
|
auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
|
|
278
318
|
Http2FrameHeader{8, static_cast<uint8_t>(FrameType::kPing),
|
|
279
319
|
MaybeFlag(frame.ack, kFlagAck), 0}
|
|
@@ -283,6 +323,10 @@ class SerializeHeaderAndPayload {
|
|
|
283
323
|
}
|
|
284
324
|
|
|
285
325
|
void operator()(Http2GoawayFrame& frame) {
|
|
326
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
327
|
+
<< "SerializeHeaderAndPayload Http2GoawayFrame Type:7 { last_stream_id:"
|
|
328
|
+
<< frame.last_stream_id << ", error_code:" << frame.error_code
|
|
329
|
+
<< ", debug_data:" << frame.debug_data.as_string_view() << "}";
|
|
286
330
|
auto hdr_and_fixed_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
|
|
287
331
|
Http2FrameHeader{static_cast<uint32_t>(8 + frame.debug_data.length()),
|
|
288
332
|
static_cast<uint8_t>(FrameType::kGoaway), 0, 0}
|
|
@@ -300,6 +344,10 @@ class SerializeHeaderAndPayload {
|
|
|
300
344
|
}
|
|
301
345
|
|
|
302
346
|
void operator()(Http2WindowUpdateFrame& frame) {
|
|
347
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2WindowUpdateFrame "
|
|
348
|
+
"Type:8 { stream_id:"
|
|
349
|
+
<< frame.stream_id
|
|
350
|
+
<< ", increment:" << frame.increment << "}";
|
|
303
351
|
auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
|
|
304
352
|
Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kWindowUpdate), 0,
|
|
305
353
|
frame.stream_id}
|
|
@@ -311,9 +359,13 @@ class SerializeHeaderAndPayload {
|
|
|
311
359
|
}
|
|
312
360
|
Write31bits(frame.increment, hdr_and_payload.begin() + kFrameHeaderSize);
|
|
313
361
|
out_.AppendIndexed(Slice(std::move(hdr_and_payload)));
|
|
362
|
+
serialize_return_.should_reset_ping_clock = true;
|
|
314
363
|
}
|
|
315
364
|
|
|
316
365
|
void operator()(Http2SecurityFrame& frame) {
|
|
366
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2SecurityFrame "
|
|
367
|
+
"Type:200 { payload_length:"
|
|
368
|
+
<< frame.payload.Length() << ", payload: redacted}";
|
|
317
369
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
318
370
|
Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
|
|
319
371
|
static_cast<uint8_t>(FrameType::kCustomSecurity), 0, 0}
|
|
@@ -324,11 +376,24 @@ class SerializeHeaderAndPayload {
|
|
|
324
376
|
|
|
325
377
|
void operator()(Http2UnknownFrame&) { Crash("unreachable"); }
|
|
326
378
|
|
|
327
|
-
void operator()(Http2EmptyFrame&) {
|
|
379
|
+
void operator()(Http2EmptyFrame&) {
|
|
380
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2EmptyFrame {}";
|
|
381
|
+
}
|
|
328
382
|
|
|
329
383
|
private:
|
|
384
|
+
std::string DebugStringSettings(
|
|
385
|
+
const std::vector<Http2SettingsFrame::Setting>& settings) {
|
|
386
|
+
std::string settings_str;
|
|
387
|
+
for (const auto& setting : settings) {
|
|
388
|
+
absl::StrAppend(&settings_str, " {id:", setting.id,
|
|
389
|
+
", value:", setting.value, "}");
|
|
390
|
+
}
|
|
391
|
+
return settings_str;
|
|
392
|
+
}
|
|
393
|
+
|
|
330
394
|
SliceBuffer& out_;
|
|
331
395
|
MutableSlice extra_bytes_;
|
|
396
|
+
SerializeReturn& serialize_return_;
|
|
332
397
|
};
|
|
333
398
|
|
|
334
399
|
Http2Status StripPadding(const Http2FrameHeader& hdr, SliceBuffer& payload) {
|
|
@@ -382,6 +447,8 @@ ValueOrHttp2Status<Http2Frame> ParseDataFrame(const Http2FrameHeader& hdr,
|
|
|
382
447
|
std::move(payload)});
|
|
383
448
|
}
|
|
384
449
|
|
|
450
|
+
// This function MUST NOT return a Http2StreamError. Doing this will cause the
|
|
451
|
+
// HPACK state to be corrupted.
|
|
385
452
|
ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
|
|
386
453
|
SliceBuffer& payload) {
|
|
387
454
|
if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
|
|
@@ -418,6 +485,8 @@ ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
|
|
|
418
485
|
ExtractFlag(hdr.flags, kFlagEndStream), std::move(payload)});
|
|
419
486
|
}
|
|
420
487
|
|
|
488
|
+
// This function MUST NOT return a Http2StreamError. Doing this will cause the
|
|
489
|
+
// HPACK state to be corrupted.
|
|
421
490
|
ValueOrHttp2Status<Http2Frame> ParseContinuationFrame(
|
|
422
491
|
const Http2FrameHeader& hdr, SliceBuffer& payload) {
|
|
423
492
|
if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
|
|
@@ -569,15 +638,14 @@ ValueOrHttp2Status<Http2Frame> ParseWindowUpdateFrame(
|
|
|
569
638
|
payload.CopyToBuffer(buffer);
|
|
570
639
|
const uint32_t window_size_increment = Read31bits(buffer);
|
|
571
640
|
if (GPR_UNLIKELY(window_size_increment == 0)) {
|
|
572
|
-
if
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
}
|
|
641
|
+
// According to RFC9113, if window_size_increment == 0, and (stream id != 0)
|
|
642
|
+
// the receiver MUST treat this as a stream error of type PROTOCOL_ERROR.
|
|
643
|
+
// However we will be treating this too as a connection error
|
|
644
|
+
// 1. To be consistent with CHTTP2 transport
|
|
645
|
+
// 2. To be less lenient as compared to the RFC9113 for security reasons.
|
|
646
|
+
return Http2Status::Http2ConnectionError(
|
|
647
|
+
Http2ErrorCode::kProtocolError,
|
|
648
|
+
absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
|
|
581
649
|
}
|
|
582
650
|
return ValueOrHttp2Status<Http2Frame>(
|
|
583
651
|
Http2WindowUpdateFrame{hdr.stream_id, window_size_increment});
|
|
@@ -642,23 +710,26 @@ std::string Http2FrameHeader::ToString() const {
|
|
|
642
710
|
", length=", length, "}");
|
|
643
711
|
}
|
|
644
712
|
|
|
645
|
-
|
|
713
|
+
SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
|
|
646
714
|
size_t buffer_needed = 0;
|
|
715
|
+
SerializeReturn serialize_return{/*should_reset_ping_clock=*/false};
|
|
647
716
|
for (auto& frame : frames) {
|
|
648
717
|
// Bytes needed for framing
|
|
649
718
|
buffer_needed += kFrameHeaderSize;
|
|
650
719
|
// Bytes needed for frame payload
|
|
651
720
|
buffer_needed += std::visit(SerializeExtraBytesRequired(), frame);
|
|
652
721
|
}
|
|
653
|
-
SerializeHeaderAndPayload serialize(buffer_needed, out);
|
|
722
|
+
SerializeHeaderAndPayload serialize(buffer_needed, out, serialize_return);
|
|
654
723
|
for (auto& frame : frames) {
|
|
655
724
|
std::visit(serialize, frame);
|
|
656
725
|
}
|
|
726
|
+
|
|
727
|
+
return serialize_return;
|
|
657
728
|
}
|
|
658
729
|
|
|
659
730
|
http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
|
660
731
|
const Http2FrameHeader& hdr, SliceBuffer payload) {
|
|
661
|
-
|
|
732
|
+
GRPC_CHECK(payload.Length() == hdr.length);
|
|
662
733
|
|
|
663
734
|
switch (static_cast<FrameType>(hdr.type)) {
|
|
664
735
|
case FrameType::kData:
|
|
@@ -688,9 +759,10 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
|
|
688
759
|
}
|
|
689
760
|
}
|
|
690
761
|
|
|
691
|
-
http2::Http2ErrorCode
|
|
762
|
+
http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(
|
|
763
|
+
const uint32_t error_code) {
|
|
692
764
|
if (GPR_UNLIKELY(error_code > http2::GetMaxHttp2ErrorCode())) {
|
|
693
|
-
LOG(ERROR) << "
|
|
765
|
+
LOG(ERROR) << "FrameErrorCodeToHttp2ErrorCode: Invalid error code "
|
|
694
766
|
"received from RST_STREAM frame: "
|
|
695
767
|
<< error_code;
|
|
696
768
|
return http2::Http2ErrorCode::kInternalError;
|
|
@@ -698,30 +770,86 @@ http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code) {
|
|
|
698
770
|
return static_cast<http2::Http2ErrorCode>(error_code);
|
|
699
771
|
}
|
|
700
772
|
|
|
773
|
+
uint32_t Http2ErrorCodeToFrameErrorCode(
|
|
774
|
+
const http2::Http2ErrorCode error_code) {
|
|
775
|
+
GRPC_DCHECK_LE(static_cast<uint8_t>(error_code),
|
|
776
|
+
http2::GetMaxHttp2ErrorCode());
|
|
777
|
+
return static_cast<uint32_t>(error_code);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
size_t GetFrameMemoryUsage(const Http2Frame& frame) {
|
|
781
|
+
return MemoryUsageOf(frame);
|
|
782
|
+
}
|
|
783
|
+
|
|
701
784
|
///////////////////////////////////////////////////////////////////////////////
|
|
702
785
|
// GRPC Header
|
|
786
|
+
namespace {
|
|
787
|
+
ValueOrHttp2Status<uint32_t> ParseGrpcMessageFlags(const uint8_t flags) {
|
|
788
|
+
switch (flags) {
|
|
789
|
+
case kGrpcMessageHeaderNoFlags:
|
|
790
|
+
return 0u;
|
|
791
|
+
case kGrpcMessageHeaderWriteInternalCompress:
|
|
792
|
+
return GRPC_WRITE_INTERNAL_COMPRESS;
|
|
793
|
+
default:
|
|
794
|
+
LOG(ERROR) << "Invalid gRPC header flags: "
|
|
795
|
+
<< static_cast<uint32_t>(flags);
|
|
796
|
+
return Http2Status::Http2StreamError(
|
|
797
|
+
Http2ErrorCode::kInternalError,
|
|
798
|
+
absl::StrCat("Invalid gRPC header flags: ", flags));
|
|
799
|
+
}
|
|
800
|
+
}
|
|
703
801
|
|
|
704
|
-
|
|
705
|
-
|
|
802
|
+
uint8_t SerializeGrpcMessageFlags(const uint32_t flags) {
|
|
803
|
+
return (flags & GRPC_WRITE_INTERNAL_COMPRESS)
|
|
804
|
+
? kGrpcMessageHeaderWriteInternalCompress
|
|
805
|
+
: kGrpcMessageHeaderNoFlags;
|
|
806
|
+
}
|
|
807
|
+
} // namespace
|
|
808
|
+
|
|
809
|
+
ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(SliceBuffer& payload) {
|
|
810
|
+
GRPC_CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
|
|
706
811
|
uint8_t buffer[kGrpcHeaderSizeInBytes];
|
|
707
812
|
payload.CopyFirstNBytesIntoBuffer(kGrpcHeaderSizeInBytes, buffer);
|
|
708
813
|
GrpcMessageHeader header;
|
|
709
|
-
|
|
814
|
+
ValueOrHttp2Status<uint32_t> message_flags = ParseGrpcMessageFlags(buffer[0]);
|
|
815
|
+
if (!message_flags.IsOk()) {
|
|
816
|
+
return message_flags.TakeStatus(std::move(message_flags));
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
header.flags = message_flags.value();
|
|
710
820
|
header.length = Read4b(buffer + 1);
|
|
711
821
|
return header;
|
|
712
822
|
}
|
|
713
823
|
|
|
714
|
-
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const
|
|
824
|
+
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint32_t flags,
|
|
715
825
|
const uint32_t length) {
|
|
716
826
|
uint8_t* frame_hdr = payload.AddTiny(kGrpcHeaderSizeInBytes);
|
|
717
|
-
frame_hdr[0] = flags;
|
|
827
|
+
frame_hdr[0] = SerializeGrpcMessageFlags(flags);
|
|
718
828
|
Write4b(length, frame_hdr + 1);
|
|
719
829
|
}
|
|
720
830
|
|
|
721
831
|
Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
|
|
722
832
|
const bool incoming_header_in_progress,
|
|
723
833
|
const uint32_t incoming_header_stream_id,
|
|
724
|
-
Http2FrameHeader& current_frame_header
|
|
834
|
+
Http2FrameHeader& current_frame_header,
|
|
835
|
+
const uint32_t last_stream_id,
|
|
836
|
+
const bool is_client,
|
|
837
|
+
const bool is_first_settings_processed) {
|
|
838
|
+
if (GPR_UNLIKELY(!is_first_settings_processed)) {
|
|
839
|
+
// This check works only because we pause the read loop after reading the
|
|
840
|
+
// first SETTINGS frame.
|
|
841
|
+
const bool is_settings_frame =
|
|
842
|
+
(current_frame_header.type ==
|
|
843
|
+
static_cast<uint8_t>(FrameType::kSettings) &&
|
|
844
|
+
!ExtractFlag(current_frame_header.flags, kFlagAck));
|
|
845
|
+
if (GPR_UNLIKELY(!is_settings_frame)) {
|
|
846
|
+
return Http2Status::Http2ConnectionError(
|
|
847
|
+
Http2ErrorCode::kProtocolError,
|
|
848
|
+
std::string(is_client ? RFC9113::kFirstSettingsFrameClient
|
|
849
|
+
: RFC9113::kFirstSettingsFrameServer));
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
|
|
725
853
|
if (GPR_UNLIKELY(current_frame_header.length > max_frame_size_setting)) {
|
|
726
854
|
return Http2Status::Http2ConnectionError(
|
|
727
855
|
Http2ErrorCode::kFrameSizeError,
|
|
@@ -738,8 +866,28 @@ Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
|
|
|
738
866
|
Http2ErrorCode::kProtocolError,
|
|
739
867
|
std::string(RFC9113::kAssemblerContiguousSequenceError));
|
|
740
868
|
}
|
|
869
|
+
// If a frame is received with a stream id larger than the last stream id sent
|
|
870
|
+
// by the transport, it is a protocol error. This condition holds for clients
|
|
871
|
+
// as in gRPC only clients can initiate a stream. last_stream_id is the stream
|
|
872
|
+
// id of the last stream created by the transport. If no streams were created
|
|
873
|
+
// by the transport, last_stream_id is 0.
|
|
874
|
+
// TODO(akshitpatel) : [PH2][P3] : Revisit this for server.
|
|
875
|
+
if (is_client && current_frame_header.stream_id > last_stream_id) {
|
|
876
|
+
return Http2Status::Http2ConnectionError(
|
|
877
|
+
Http2ErrorCode::kProtocolError, std::string(RFC9113::kUnknownStreamId));
|
|
878
|
+
}
|
|
741
879
|
// TODO(tjagtap) : [PH2][P2]:Consider validating MAX_CONCURRENT_STREAMS here
|
|
880
|
+
// for server.
|
|
742
881
|
return Http2Status::Ok();
|
|
743
882
|
}
|
|
744
883
|
|
|
884
|
+
std::string MaybeTruncatePayload(SliceBuffer& payload, const uint32_t length) {
|
|
885
|
+
if (payload.Length() <= length) {
|
|
886
|
+
return payload.JoinIntoString();
|
|
887
|
+
}
|
|
888
|
+
std::string result(length, '\0');
|
|
889
|
+
payload.CopyFirstNBytesIntoBuffer(length, result.data());
|
|
890
|
+
return absl::StrCat(result, "<clipped>");
|
|
891
|
+
}
|
|
892
|
+
|
|
745
893
|
} // namespace grpc_core
|
|
@@ -22,16 +22,20 @@
|
|
|
22
22
|
#include <variant>
|
|
23
23
|
#include <vector>
|
|
24
24
|
|
|
25
|
-
#include "absl/status/statusor.h"
|
|
26
|
-
#include "absl/strings/string_view.h"
|
|
27
|
-
#include "absl/types/span.h"
|
|
28
25
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
29
26
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
30
27
|
#include "src/core/lib/slice/slice.h"
|
|
31
28
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
29
|
+
#include "absl/status/statusor.h"
|
|
30
|
+
#include "absl/strings/string_view.h"
|
|
31
|
+
#include "absl/types/span.h"
|
|
32
32
|
|
|
33
33
|
namespace grpc_core {
|
|
34
34
|
|
|
35
|
+
// Prints the first `length` bytes of the payload. If the payload is longer than
|
|
36
|
+
// `length`, it appends "<clipped>" to the output.
|
|
37
|
+
std::string MaybeTruncatePayload(SliceBuffer& payload, uint32_t length = 15);
|
|
38
|
+
|
|
35
39
|
///////////////////////////////////////////////////////////////////////////////
|
|
36
40
|
// Frame types
|
|
37
41
|
//
|
|
@@ -224,6 +228,10 @@ struct Http2FrameHeader {
|
|
|
224
228
|
///////////////////////////////////////////////////////////////////////////////
|
|
225
229
|
// Parsing & serialization
|
|
226
230
|
|
|
231
|
+
struct SerializeReturn {
|
|
232
|
+
bool should_reset_ping_clock;
|
|
233
|
+
};
|
|
234
|
+
|
|
227
235
|
// Given a frame header and a payload, parse the payload into a frame and
|
|
228
236
|
// return it.
|
|
229
237
|
// If this function returns an error, that should be considered a connection
|
|
@@ -236,27 +244,34 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
|
|
236
244
|
|
|
237
245
|
// Serialize frame and append to out, leaves frames in an unknown state (may
|
|
238
246
|
// move things out of frames)
|
|
239
|
-
|
|
247
|
+
SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
|
|
248
|
+
|
|
249
|
+
http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(uint32_t error_code);
|
|
250
|
+
uint32_t Http2ErrorCodeToFrameErrorCode(http2::Http2ErrorCode error_code);
|
|
240
251
|
|
|
241
|
-
|
|
252
|
+
// Returns approximate memory usage of the frame.
|
|
253
|
+
size_t GetFrameMemoryUsage(const Http2Frame& frame);
|
|
242
254
|
|
|
243
255
|
///////////////////////////////////////////////////////////////////////////////
|
|
244
256
|
// GRPC Header
|
|
245
257
|
|
|
246
258
|
constexpr uint8_t kGrpcHeaderSizeInBytes = 5;
|
|
259
|
+
constexpr uint8_t kGrpcMessageHeaderNoFlags = 0;
|
|
260
|
+
constexpr uint8_t kGrpcMessageHeaderWriteInternalCompress = 1;
|
|
247
261
|
|
|
248
262
|
struct GrpcMessageHeader {
|
|
249
|
-
|
|
263
|
+
uint32_t flags = 0;
|
|
250
264
|
uint32_t length = 0;
|
|
251
265
|
};
|
|
252
266
|
|
|
253
267
|
// If the payload SliceBuffer is too small to hold a gRPC header, this function
|
|
254
268
|
// will crash. The calling function MUST ensure that the payload SliceBuffer
|
|
255
269
|
// has length greater than or equal to the gRPC header.
|
|
256
|
-
GrpcMessageHeader ExtractGrpcHeader(
|
|
270
|
+
http2::ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(
|
|
271
|
+
SliceBuffer& payload);
|
|
257
272
|
|
|
258
|
-
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload,
|
|
259
|
-
|
|
273
|
+
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, uint32_t flags,
|
|
274
|
+
uint32_t length);
|
|
260
275
|
|
|
261
276
|
///////////////////////////////////////////////////////////////////////////////
|
|
262
277
|
// Validations
|
|
@@ -267,7 +282,9 @@ http2::Http2Status ValidateSettingsValues(
|
|
|
267
282
|
http2::Http2Status ValidateFrameHeader(uint32_t max_frame_size_setting,
|
|
268
283
|
bool incoming_header_in_progress,
|
|
269
284
|
uint32_t incoming_header_stream_id,
|
|
270
|
-
Http2FrameHeader& current_frame_header
|
|
285
|
+
Http2FrameHeader& current_frame_header,
|
|
286
|
+
uint32_t last_stream_id, bool is_client,
|
|
287
|
+
bool is_first_settings_processed);
|
|
271
288
|
|
|
272
289
|
///////////////////////////////////////////////////////////////////////////////
|
|
273
290
|
// RFC9113 Related Strings and Consts
|
|
@@ -301,6 +318,9 @@ inline constexpr absl::string_view kSettingsStreamIdMustBeZero =
|
|
|
301
318
|
"RFC9113: If an endpoint receives a SETTINGS frame whose Stream "
|
|
302
319
|
"Identifier field is anything other than 0x00, the endpoint MUST respond "
|
|
303
320
|
"with a connection error";
|
|
321
|
+
inline constexpr absl::string_view kUnknownStreamId =
|
|
322
|
+
"RFC9113: An endpoint that receives an unexpected stream identifier MUST "
|
|
323
|
+
"respond with a connection error";
|
|
304
324
|
|
|
305
325
|
// Frame length related errors
|
|
306
326
|
inline constexpr absl::string_view kRstStreamLength4 =
|
|
@@ -357,13 +377,41 @@ inline constexpr absl::string_view kIncorrectFrameSizeSetting =
|
|
|
357
377
|
"RFC9113: The initial value is 2^14 (16,384) octets. The value advertised"
|
|
358
378
|
" by an endpoint MUST be between this initial value and the maximum allowed"
|
|
359
379
|
" frame size (2^24)-1 or 16,777,215 octets), inclusive. ";
|
|
380
|
+
inline constexpr absl::string_view kSettingsTimeout =
|
|
381
|
+
"Settings timeout. The HTTP2 settings frame was not ACKed within the "
|
|
382
|
+
"timeout. Connection will be closed";
|
|
383
|
+
inline constexpr absl::string_view kLastStreamClosed =
|
|
384
|
+
"Closing last stream and cannot create any more streams.";
|
|
385
|
+
inline constexpr absl::string_view kFirstSettingsFrameClient =
|
|
386
|
+
"RFC9113: The server connection preface consists of a potentially empty "
|
|
387
|
+
"SETTINGS frame that MUST be the first frame the server sends in the "
|
|
388
|
+
"HTTP/2 connection. Clients and servers MUST treat an invalid connection "
|
|
389
|
+
"preface as a connection error of type PROTOCOL_ERROR.";
|
|
390
|
+
inline constexpr absl::string_view kFirstSettingsFrameServer =
|
|
391
|
+
"RFC9113: The client connection preface starts with a sequence of 24 "
|
|
392
|
+
"octets. This sequence is followed by a SETTINGS frame, which MAY be "
|
|
393
|
+
"empty. Clients and servers MUST treat an invalid connection preface as a "
|
|
394
|
+
"connection error of type PROTOCOL_ERROR.";
|
|
360
395
|
|
|
361
396
|
inline constexpr uint32_t kMaxStreamId31Bit = 0x7fffffffu;
|
|
362
397
|
inline constexpr uint32_t kMaxSize31Bit = 0x7fffffffu;
|
|
363
398
|
inline constexpr uint32_t kMinimumFrameSize = 16384;
|
|
364
399
|
inline constexpr uint32_t kMaximumFrameSize = 16777215;
|
|
365
400
|
|
|
401
|
+
// Default Initial Window Size as per RFC 9113 Section 6.5.2
|
|
402
|
+
inline constexpr uint32_t kHttp2InitialWindowSize = 65535u;
|
|
403
|
+
|
|
366
404
|
} // namespace RFC9113
|
|
405
|
+
|
|
406
|
+
namespace GrpcErrors {
|
|
407
|
+
inline constexpr absl::string_view kTooManyMetadata =
|
|
408
|
+
"gRPC Error : A gRPC server can send upto 1 initial metadata followed by "
|
|
409
|
+
"upto 1 trailing metadata.";
|
|
410
|
+
inline constexpr absl::string_view kOutOfOrderDataFrame =
|
|
411
|
+
"gRPC Error : DATA frames must follow initial metadata and precede "
|
|
412
|
+
"trailing metadata.";
|
|
413
|
+
} // namespace GrpcErrors
|
|
414
|
+
|
|
367
415
|
} // namespace grpc_core
|
|
368
416
|
|
|
369
417
|
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H
|
|
@@ -22,9 +22,6 @@
|
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
|
23
23
|
#include <stdlib.h>
|
|
24
24
|
|
|
25
|
-
#include "absl/log/check.h"
|
|
26
|
-
#include "absl/status/status.h"
|
|
27
|
-
#include "absl/strings/str_format.h"
|
|
28
25
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
29
26
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
30
27
|
#include "src/core/lib/experiments/experiments.h"
|
|
@@ -32,7 +29,10 @@
|
|
|
32
29
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
33
30
|
#include "src/core/lib/transport/transport.h"
|
|
34
31
|
#include "src/core/telemetry/stats.h"
|
|
32
|
+
#include "src/core/util/grpc_check.h"
|
|
35
33
|
#include "src/core/util/status_helper.h"
|
|
34
|
+
#include "absl/status/status.h"
|
|
35
|
+
#include "absl/strings/str_format.h"
|
|
36
36
|
|
|
37
37
|
absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
|
|
38
38
|
uint32_t stream_id,
|
|
@@ -63,7 +63,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
|
|
|
63
63
|
|
|
64
64
|
hdr = GRPC_SLICE_MALLOC(header_size);
|
|
65
65
|
p = GRPC_SLICE_START_PTR(hdr);
|
|
66
|
-
|
|
66
|
+
GRPC_CHECK(write_bytes < (1 << 24));
|
|
67
67
|
*p++ = static_cast<uint8_t>(write_bytes >> 16);
|
|
68
68
|
*p++ = static_cast<uint8_t>(write_bytes >> 8);
|
|
69
69
|
*p++ = static_cast<uint8_t>(write_bytes);
|