grpc 1.78.0 → 1.80.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +22 -8
- data/include/grpc/credentials.h +47 -37
- data/include/grpc/credentials_cpp.h +39 -0
- data/include/grpc/event_engine/event_engine.h +8 -3
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/impl/call.h +9 -0
- data/include/grpc/impl/channel_arg_names.h +7 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/private_key_signer.h +104 -0
- data/include/grpc/support/port_platform.h +6 -0
- data/src/core/call/call_filters.h +101 -78
- data/src/core/call/call_spine.h +91 -68
- data/src/core/call/call_state.h +60 -4
- data/src/core/call/client_call.cc +9 -9
- data/src/core/call/client_call.h +1 -1
- data/src/core/call/metadata_batch.cc +2 -0
- data/src/core/call/metadata_batch.h +48 -1
- data/src/core/call/metadata_info.cc +35 -0
- data/src/core/call/metadata_info.h +2 -0
- data/src/core/call/simple_slice_based_metadata.h +2 -1
- data/src/core/channelz/channelz.cc +9 -6
- data/src/core/channelz/channelz.h +7 -4
- data/src/core/channelz/property_list.h +5 -0
- data/src/core/channelz/v2tov1/convert.cc +1 -1
- data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
- data/src/core/client_channel/buffered_call.cc +7 -3
- data/src/core/client_channel/buffered_call.h +11 -5
- data/src/core/client_channel/client_channel.cc +106 -44
- data/src/core/client_channel/client_channel.h +3 -6
- data/src/core/client_channel/client_channel_filter.cc +90 -64
- data/src/core/client_channel/client_channel_filter.h +3 -6
- data/src/core/client_channel/client_channel_internal.h +5 -0
- data/src/core/client_channel/config_selector.h +17 -12
- data/src/core/client_channel/dynamic_filters.cc +8 -7
- data/src/core/client_channel/dynamic_filters.h +7 -5
- data/src/core/client_channel/retry_filter.cc +1 -1
- data/src/core/client_channel/retry_filter.h +2 -2
- data/src/core/client_channel/subchannel.cc +1682 -266
- data/src/core/client_channel/subchannel.h +411 -134
- data/src/core/client_channel/subchannel_stream_client.cc +22 -18
- data/src/core/client_channel/subchannel_stream_client.h +8 -9
- data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
- data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
- data/src/core/config/config_vars.cc +9 -1
- data/src/core/config/config_vars.h +6 -0
- data/src/core/credentials/call/call_creds_registry.h +51 -22
- data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
- data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
- data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
- data/src/core/credentials/transport/channel_creds_registry.h +71 -20
- data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
- data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
- data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
- data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
- data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
- data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
- data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
- data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
- data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
- data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
- data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
- data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
- data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
- data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
- data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
- data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
- data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
- data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
- data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
- data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
- data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
- data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +6 -3
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
- data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
- data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
- data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
- data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
- data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
- data/src/core/filter/filter_chain.h +95 -0
- data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
- data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
- data/src/core/handshaker/security/secure_endpoint.cc +282 -68
- data/src/core/handshaker/security/secure_endpoint.h +0 -7
- data/src/core/lib/channel/channel_args.h +1 -1
- data/src/core/lib/channel/promise_based_filter.cc +17 -4
- data/src/core/lib/channel/promise_based_filter.h +3 -2
- data/src/core/lib/debug/trace_flags.cc +2 -0
- data/src/core/lib/debug/trace_flags.h +1 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
- data/src/core/lib/event_engine/event_engine.cc +9 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
- data/src/core/lib/experiments/experiments.cc +309 -201
- data/src/core/lib/experiments/experiments.h +141 -80
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
- data/src/core/lib/iomgr/resolve_address.h +0 -2
- data/src/core/lib/iomgr/resolved_address.h +0 -2
- data/src/core/lib/iomgr/tcp_posix.cc +13 -5
- data/src/core/lib/iomgr/tcp_server.cc +0 -5
- data/src/core/lib/iomgr/tcp_server.h +0 -7
- data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
- data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
- data/src/core/lib/promise/all_ok.h +17 -12
- data/src/core/lib/promise/cancel_callback.h +12 -13
- data/src/core/lib/promise/detail/join_state.h +626 -0
- data/src/core/lib/promise/detail/promise_factory.h +14 -14
- data/src/core/lib/promise/for_each.h +32 -8
- data/src/core/lib/promise/if.h +9 -7
- data/src/core/lib/promise/loop.h +18 -16
- data/src/core/lib/promise/map.h +54 -47
- data/src/core/lib/promise/mpsc.h +11 -10
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.h +25 -19
- data/src/core/lib/promise/poll.h +5 -5
- data/src/core/lib/promise/prioritized_race.h +10 -7
- data/src/core/lib/promise/promise.h +16 -11
- data/src/core/lib/promise/race.h +6 -5
- data/src/core/lib/promise/seq.h +109 -74
- data/src/core/lib/promise/try_join.h +14 -6
- data/src/core/lib/promise/try_seq.h +76 -60
- data/src/core/lib/resource_quota/api.cc +7 -0
- data/src/core/lib/resource_quota/arena.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +4 -1
- data/src/core/lib/resource_quota/resource_quota.cc +2 -1
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/resource_quota/stream_quota.cc +77 -1
- data/src/core/lib/resource_quota/stream_quota.h +64 -1
- data/src/core/lib/resource_quota/telemetry.h +1 -1
- data/src/core/lib/surface/call.cc +13 -0
- data/src/core/lib/surface/call_utils.h +58 -43
- data/src/core/lib/surface/channel.h +1 -4
- data/src/core/lib/surface/completion_queue.cc +13 -6
- data/src/core/lib/surface/validate_metadata.cc +20 -15
- data/src/core/lib/surface/validate_metadata.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +1 -1
- data/src/core/lib/transport/promise_endpoint.h +1 -1
- data/src/core/lib/transport/transport.h +5 -0
- data/src/core/load_balancing/health_check_client.cc +1 -15
- data/src/core/load_balancing/health_check_client_internal.h +0 -2
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
- data/src/core/resolver/xds/xds_resolver.cc +162 -116
- data/src/core/server/server.cc +18 -1
- data/src/core/server/server.h +2 -0
- data/src/core/server/xds_server_config_fetcher.cc +4 -4
- data/src/core/telemetry/call_tracer.cc +87 -2
- data/src/core/telemetry/call_tracer.h +46 -8
- data/src/core/telemetry/instrument.cc +102 -40
- data/src/core/telemetry/instrument.h +246 -65
- data/src/core/tsi/fake_transport_security.cc +3 -1
- data/src/core/tsi/ssl_transport_security.cc +516 -137
- data/src/core/tsi/ssl_transport_security.h +28 -22
- data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
- data/src/core/tsi/ssl_transport_security_utils.h +2 -2
- data/src/core/util/bitset.h +6 -0
- data/src/core/util/function_signature.h +3 -1
- data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
- data/src/core/util/json/json_reader.cc +0 -4
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
- data/src/core/xds/grpc/certificate_provider_store.h +3 -17
- data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
- data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
- data/src/core/xds/grpc/xds_client_grpc.h +10 -7
- data/src/core/xds/grpc/xds_cluster.cc +18 -4
- data/src/core/xds/grpc/xds_cluster.h +17 -2
- data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
- data/src/core/xds/grpc/xds_common_types.cc +45 -0
- data/src/core/xds/grpc/xds_common_types.h +31 -0
- data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
- data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
- data/src/core/xds/grpc/xds_http_filter.cc +38 -0
- data/src/core/xds/grpc/xds_http_filter.h +70 -47
- data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
- data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
- data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
- data/src/core/xds/grpc/xds_listener.cc +4 -1
- data/src/core/xds/grpc/xds_listener.h +10 -2
- data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
- data/src/core/xds/grpc/xds_matcher.cc +40 -5
- data/src/core/xds/grpc/xds_matcher.h +13 -0
- data/src/core/xds/grpc/xds_matcher_action.h +1 -1
- data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
- data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
- data/src/core/xds/grpc/xds_route_config.cc +12 -1
- data/src/core/xds/grpc/xds_route_config.h +15 -2
- data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
- data/src/core/xds/grpc/xds_routing.cc +181 -6
- data/src/core/xds/grpc/xds_routing.h +57 -0
- data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
- data/src/core/xds/grpc/xds_server_grpc.h +13 -6
- data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
- data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
- data/src/ruby/lib/grpc/grpc.rb +7 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +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
- metadata +64 -14
- data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
|
@@ -17,15 +17,245 @@
|
|
|
17
17
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H
|
|
18
18
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H
|
|
19
19
|
|
|
20
|
-
#include <grpc/
|
|
21
|
-
#include <
|
|
20
|
+
#include <grpc/event_engine/event_engine.h>
|
|
21
|
+
#include <grpc/support/port_platform.h>
|
|
22
22
|
|
|
23
|
+
#include <cstdint>
|
|
24
|
+
#include <memory>
|
|
25
|
+
#include <string>
|
|
26
|
+
#include <utility>
|
|
27
|
+
|
|
28
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
29
|
+
#include "src/core/ext/transport/chttp2/transport/write_cycle.h"
|
|
30
|
+
#include "src/core/lib/debug/trace.h"
|
|
31
|
+
#include "src/core/lib/event_engine/query_extensions.h"
|
|
32
|
+
#include "src/core/lib/promise/activity.h"
|
|
33
|
+
#include "src/core/lib/promise/context.h"
|
|
34
|
+
#include "src/core/lib/promise/poll.h"
|
|
23
35
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
24
36
|
#include "src/core/lib/transport/transport_framing_endpoint_extension.h"
|
|
37
|
+
#include "src/core/util/grpc_check.h"
|
|
38
|
+
#include "src/core/util/ref_counted.h"
|
|
39
|
+
#include "src/core/util/sync.h"
|
|
40
|
+
#include "absl/base/thread_annotations.h"
|
|
41
|
+
#include "absl/log/log.h"
|
|
42
|
+
#include "absl/strings/str_format.h"
|
|
25
43
|
|
|
26
44
|
namespace grpc_core {
|
|
27
45
|
|
|
28
|
-
|
|
46
|
+
#define GRPC_HTTP2_SECURITY_FRAME_DLOG \
|
|
47
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
48
|
+
|
|
49
|
+
// Manages sending and receiving HTTP2 security frames (type 0x08).
|
|
50
|
+
// It bridges HTTP2 Transport and TransportFramingEndpointExtension.
|
|
51
|
+
class SecurityFrameHandler final : public RefCounted<SecurityFrameHandler> {
|
|
52
|
+
public:
|
|
53
|
+
SecurityFrameHandler() = default;
|
|
54
|
+
~SecurityFrameHandler() override {
|
|
55
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG << "SecurityFrameHandler::Destructor";
|
|
56
|
+
};
|
|
57
|
+
SecurityFrameHandler(const SecurityFrameHandler&) = delete;
|
|
58
|
+
SecurityFrameHandler& operator=(const SecurityFrameHandler&) = delete;
|
|
59
|
+
SecurityFrameHandler(SecurityFrameHandler&&) = delete;
|
|
60
|
+
SecurityFrameHandler& operator=(SecurityFrameHandler&&) = delete;
|
|
61
|
+
|
|
62
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
63
|
+
// Initialization
|
|
64
|
+
|
|
65
|
+
// SendFrameCallbackFactory is called from the Transport Party.
|
|
66
|
+
// But the callback that it returns is run on some other thread.
|
|
67
|
+
auto SendFrameCallbackFactory(
|
|
68
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
|
69
|
+
event_engine) {
|
|
70
|
+
return [self = this->Ref(), event_engine](SliceBuffer* data) {
|
|
71
|
+
event_engine->Run([self, data = std::move(*data)]() mutable {
|
|
72
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG << "SecurityFrameHandler::Callback";
|
|
73
|
+
bool call_wakeup = false;
|
|
74
|
+
{
|
|
75
|
+
MutexLock lock(&self->mutex_);
|
|
76
|
+
// In the rare possibility that we receive 2 quick callbacks in
|
|
77
|
+
// succession before the transport is able to read the payload_
|
|
78
|
+
// then we will apply the latest key and discard the old key.
|
|
79
|
+
self->payload_.Clear();
|
|
80
|
+
if (!self->transport_closed_) {
|
|
81
|
+
self->payload_.Swap(&data);
|
|
82
|
+
call_wakeup = true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (call_wakeup) {
|
|
86
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG
|
|
87
|
+
<< "SecurityFrameHandler::Callback Wakeup";
|
|
88
|
+
self->waker_.Wakeup();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
struct EndpointExtensionState {
|
|
95
|
+
bool is_set = false;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// Only run on the Transport Party
|
|
99
|
+
GRPC_MUST_USE_RESULT EndpointExtensionState Initialize(
|
|
100
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
|
101
|
+
event_engine) {
|
|
102
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG << "SecurityFrameHandler::Initialize";
|
|
103
|
+
endpoint_extension_ = grpc_event_engine::experimental::QueryExtension<
|
|
104
|
+
TransportFramingEndpointExtension>(event_engine.get());
|
|
105
|
+
if (endpoint_extension_ != nullptr) {
|
|
106
|
+
endpoint_extension_->SetSendFrameCallback(
|
|
107
|
+
SendFrameCallbackFactory(event_engine));
|
|
108
|
+
return EndpointExtensionState{true};
|
|
109
|
+
}
|
|
110
|
+
LOG(ERROR) << "SecurityFrameHandler::Initialize could not initialize "
|
|
111
|
+
"TransportFramingEndpointExtension";
|
|
112
|
+
return EndpointExtensionState{false};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
116
|
+
// When a Security Frame is received by the Transport
|
|
117
|
+
|
|
118
|
+
// Only run on the Transport Party
|
|
119
|
+
void ProcessPayload(SliceBuffer&& payload) {
|
|
120
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG << "SecurityFrameHandler::ProcessPayload";
|
|
121
|
+
if (endpoint_extension_ != nullptr) {
|
|
122
|
+
MutexLock lock(&mutex_);
|
|
123
|
+
if (!transport_closed_) {
|
|
124
|
+
endpoint_extension_->ReceiveFrame(std::move(payload));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
130
|
+
// When a Security Frame needs to be sent by the Transport
|
|
131
|
+
|
|
132
|
+
enum class SleepState : uint8_t {
|
|
133
|
+
kWaitingForFrame, // Sleep until we have a security frame to send
|
|
134
|
+
kWriteOneFrame,
|
|
135
|
+
kScheduledWrite,
|
|
136
|
+
kTransportClosed,
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// Only run on the Transport Party - From SecurityFrameLoop Promise
|
|
140
|
+
auto WaitForSecurityFrameSending() {
|
|
141
|
+
GRPC_DCHECK(endpoint_extension_ != nullptr);
|
|
142
|
+
return [self = this->Ref()]() -> Poll<Empty> {
|
|
143
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG
|
|
144
|
+
<< "SecurityFrameHandler::WaitForSecurityFrameSending";
|
|
145
|
+
if (self->sleep_state_ == SleepState::kTransportClosed) {
|
|
146
|
+
return Empty{};
|
|
147
|
+
} else if (self->sleep_state_ == SleepState::kWaitingForFrame) {
|
|
148
|
+
MutexLock lock(&self->mutex_);
|
|
149
|
+
if (self->payload_.Length() > 0) {
|
|
150
|
+
self->sleep_state_ = SleepState::kWriteOneFrame;
|
|
151
|
+
return Empty{};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG
|
|
155
|
+
<< "SecurityFrameHandler::WaitForSecurityFrameSending Add Waker";
|
|
156
|
+
self->waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
157
|
+
return Pending{};
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
struct TerminateSecurityFrameLoop {
|
|
162
|
+
bool terminate = false;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// Only run on the Transport Party - From SecurityFrameLoop Promise
|
|
166
|
+
TerminateSecurityFrameLoop TriggerWriteSecurityFrame() {
|
|
167
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG
|
|
168
|
+
<< "SecurityFrameHandler::TriggerWriteSecurityFrame";
|
|
169
|
+
GRPC_DCHECK(endpoint_extension_ != nullptr);
|
|
170
|
+
GRPC_DCHECK(sleep_state_ == SleepState::kWriteOneFrame ||
|
|
171
|
+
sleep_state_ == SleepState::kTransportClosed);
|
|
172
|
+
if (sleep_state_ == SleepState::kWriteOneFrame) {
|
|
173
|
+
sleep_state_ = SleepState::kScheduledWrite;
|
|
174
|
+
}
|
|
175
|
+
return TerminateSecurityFrameLoop{
|
|
176
|
+
(sleep_state_ == SleepState::kTransportClosed)};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// TODO(tjagtap) [PH2][P5] Simplify WaitForSecurityFrameSending and
|
|
180
|
+
// TriggerWriteSecurityFrame by merging the two.
|
|
181
|
+
|
|
182
|
+
// Only run on the Transport Party - From MultiplexerLoop Promise
|
|
183
|
+
void MaybeAppendSecurityFrame(http2::FrameSender& frame_sender) {
|
|
184
|
+
GRPC_DCHECK(sleep_state_ != SleepState::kWriteOneFrame);
|
|
185
|
+
if (sleep_state_ == SleepState::kScheduledWrite &&
|
|
186
|
+
endpoint_extension_ != nullptr) {
|
|
187
|
+
Http2Frame frame = Http2SecurityFrame();
|
|
188
|
+
{
|
|
189
|
+
MutexLock lock(&mutex_);
|
|
190
|
+
GRPC_DCHECK(payload_.Length() != 0);
|
|
191
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG
|
|
192
|
+
<< "SecurityFrameHandler::MaybeAppendSecurityFrame Write Frame "
|
|
193
|
+
"Length "
|
|
194
|
+
<< payload_.Length();
|
|
195
|
+
std::get<Http2SecurityFrame>(frame).payload.Swap(&payload_);
|
|
196
|
+
GRPC_DCHECK(payload_.Length() == 0);
|
|
197
|
+
}
|
|
198
|
+
frame_sender.AddRegularFrame(std::move(frame));
|
|
199
|
+
sleep_state_ = SleepState::kWaitingForFrame;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
204
|
+
// Cleanup
|
|
205
|
+
|
|
206
|
+
// Only run on the Transport Party
|
|
207
|
+
void OnTransportClosed() {
|
|
208
|
+
GRPC_HTTP2_SECURITY_FRAME_DLOG << "SecurityFrameHandler::OnTransportClosed";
|
|
209
|
+
MutexLock lock(&mutex_);
|
|
210
|
+
transport_closed_ = true;
|
|
211
|
+
sleep_state_ = SleepState::kTransportClosed;
|
|
212
|
+
payload_.Clear();
|
|
213
|
+
waker_.Wakeup(); // To terminate the SecurityFrameLoop
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
SleepState TestOnlySleepState() { return sleep_state_; }
|
|
217
|
+
|
|
218
|
+
std::string TestOnlyDebugString() {
|
|
219
|
+
std::string sleep_state_str;
|
|
220
|
+
switch (sleep_state_) {
|
|
221
|
+
case SleepState::kWaitingForFrame:
|
|
222
|
+
sleep_state_str = "kWaitingForFrame";
|
|
223
|
+
break;
|
|
224
|
+
case SleepState::kWriteOneFrame:
|
|
225
|
+
sleep_state_str = "kWriteOneFrame";
|
|
226
|
+
break;
|
|
227
|
+
case SleepState::kScheduledWrite:
|
|
228
|
+
sleep_state_str = "kScheduledWrite";
|
|
229
|
+
break;
|
|
230
|
+
case SleepState::kTransportClosed:
|
|
231
|
+
sleep_state_str = "kTransportClosed";
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
MutexLock lock(&mutex_);
|
|
235
|
+
// Do not ever LOG the payload. It has a security key.
|
|
236
|
+
return absl::StrFormat(
|
|
237
|
+
"SecurityFrameHandler{endpoint_extension_=%s, sleep_state_=%s, "
|
|
238
|
+
"payload_length=%d, transport_closed_=%s}",
|
|
239
|
+
endpoint_extension_ == nullptr ? "null" : "non-null", sleep_state_str,
|
|
240
|
+
payload_.Length(), transport_closed_ ? "true" : "false");
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private:
|
|
244
|
+
// Only access endpoint_extension_ from the transport party
|
|
245
|
+
TransportFramingEndpointExtension* endpoint_extension_ = nullptr;
|
|
246
|
+
|
|
247
|
+
// Initialized on the transport party and woken up by some other thread.
|
|
248
|
+
Waker waker_;
|
|
249
|
+
|
|
250
|
+
Mutex mutex_;
|
|
251
|
+
// Written/Cleared by the other thread, Read and Cleared by transport party.
|
|
252
|
+
SliceBuffer payload_ ABSL_GUARDED_BY(mutex_);
|
|
253
|
+
// Written by transport party, read by both threads.
|
|
254
|
+
bool transport_closed_ ABSL_GUARDED_BY(mutex_) = false;
|
|
255
|
+
|
|
256
|
+
// Only access sleep_state_ from the transport party
|
|
257
|
+
SleepState sleep_state_ = SleepState::kWaitingForFrame;
|
|
258
|
+
};
|
|
29
259
|
|
|
30
260
|
} // namespace grpc_core
|
|
31
261
|
|
|
@@ -21,10 +21,11 @@
|
|
|
21
21
|
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
|
23
23
|
|
|
24
|
+
#include <atomic>
|
|
24
25
|
#include <cstdint>
|
|
25
|
-
#include <limits>
|
|
26
26
|
#include <string>
|
|
27
27
|
#include <utility>
|
|
28
|
+
#include <variant>
|
|
28
29
|
|
|
29
30
|
#include "src/core/call/call_spine.h"
|
|
30
31
|
#include "src/core/call/message.h"
|
|
@@ -36,6 +37,7 @@
|
|
|
36
37
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
37
38
|
#include "src/core/ext/transport/chttp2/transport/message_assembler.h"
|
|
38
39
|
#include "src/core/ext/transport/chttp2/transport/stream_data_queue.h"
|
|
40
|
+
#include "src/core/ext/transport/chttp2/transport/write_cycle.h"
|
|
39
41
|
#include "src/core/util/grpc_check.h"
|
|
40
42
|
#include "src/core/util/ref_counted.h"
|
|
41
43
|
#include "src/core/util/ref_counted_ptr.h"
|
|
@@ -60,20 +62,42 @@ enum class HttpStreamState : uint8_t {
|
|
|
60
62
|
};
|
|
61
63
|
|
|
62
64
|
// Managing the streams
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
class Stream : public RefCounted<Stream> {
|
|
66
|
+
public:
|
|
67
|
+
explicit Stream(CallHandler call_handler,
|
|
65
68
|
chttp2::TransportFlowControl& transport_flow_control)
|
|
66
|
-
:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
: header_assembler_(/*is_client*/ true),
|
|
70
|
+
flow_control_(&transport_flow_control),
|
|
71
|
+
call_(std::move(call_handler)),
|
|
72
|
+
is_write_closed_(false),
|
|
73
|
+
stream_id_(kInvalidStreamId),
|
|
74
|
+
stream_state_(HttpStreamState::kIdle),
|
|
75
|
+
did_receive_initial_metadata_(false),
|
|
76
|
+
did_receive_trailing_metadata_(false),
|
|
77
|
+
did_push_server_trailing_metadata_(false),
|
|
78
|
+
data_queue_(MakeRefCounted<StreamDataQueue<ClientMetadataHandle>>(
|
|
79
|
+
std::get<CallHandler>(call_).arena(), /*is_client*/ true,
|
|
80
|
+
/*queue_size*/ kStreamQueueSize)) {}
|
|
81
|
+
|
|
82
|
+
explicit Stream(CallInitiator call_initiator,
|
|
83
|
+
chttp2::TransportFlowControl& transport_flow_control)
|
|
84
|
+
: header_assembler_(/*is_client*/ false),
|
|
85
|
+
flow_control_(&transport_flow_control),
|
|
86
|
+
call_(std::move(call_initiator)),
|
|
87
|
+
is_write_closed_(false),
|
|
88
|
+
stream_id_(kInvalidStreamId),
|
|
89
|
+
stream_state_(HttpStreamState::kIdle),
|
|
90
|
+
did_receive_initial_metadata_(false),
|
|
91
|
+
did_receive_trailing_metadata_(false),
|
|
92
|
+
did_push_server_trailing_metadata_(false),
|
|
93
|
+
data_queue_(MakeRefCounted<StreamDataQueue<ClientMetadataHandle>>(
|
|
94
|
+
std::get<CallInitiator>(call_).arena(), /*is_client*/ false,
|
|
95
|
+
/*queue_size*/ kStreamQueueSize)) {}
|
|
96
|
+
|
|
97
|
+
Stream(const Stream&) = delete;
|
|
98
|
+
Stream(Stream&&) = delete;
|
|
99
|
+
Stream& operator=(const Stream&) = delete;
|
|
100
|
+
Stream& operator=(Stream&&) = delete;
|
|
77
101
|
|
|
78
102
|
// TODO(akshitpatel) : [PH2][P4] : SetStreamId can be avoided if we pass the
|
|
79
103
|
// stream id as a parameter to the dequeue function. The only downside here
|
|
@@ -84,13 +108,13 @@ struct Stream : public RefCounted<Stream> {
|
|
|
84
108
|
const bool allow_true_binary_metadata_peer,
|
|
85
109
|
const bool allow_true_binary_metadata_acked) {
|
|
86
110
|
GRPC_DCHECK_NE(stream_id, 0u);
|
|
87
|
-
GRPC_DCHECK_EQ(this->
|
|
111
|
+
GRPC_DCHECK_EQ(this->stream_id_, 0u);
|
|
88
112
|
GRPC_HTTP2_STREAM_LOG << "Stream::InitializeStream stream_id=" << stream_id;
|
|
89
|
-
if (GPR_LIKELY(this->
|
|
90
|
-
this->
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
113
|
+
if (GPR_LIKELY(this->stream_id_ == 0)) {
|
|
114
|
+
this->stream_id_ = stream_id;
|
|
115
|
+
header_assembler_.InitializeStream(stream_id,
|
|
116
|
+
allow_true_binary_metadata_acked);
|
|
117
|
+
data_queue_->SetStreamId(stream_id, allow_true_binary_metadata_peer);
|
|
94
118
|
}
|
|
95
119
|
}
|
|
96
120
|
|
|
@@ -100,12 +124,12 @@ struct Stream : public RefCounted<Stream> {
|
|
|
100
124
|
|
|
101
125
|
auto EnqueueInitialMetadata(ClientMetadataHandle&& metadata) {
|
|
102
126
|
GRPC_HTTP2_STREAM_LOG << "Stream::EnqueueInitialMetadata";
|
|
103
|
-
return
|
|
127
|
+
return data_queue_->EnqueueInitialMetadata(std::move(metadata));
|
|
104
128
|
}
|
|
105
129
|
|
|
106
130
|
auto EnqueueTrailingMetadata(ClientMetadataHandle&& metadata) {
|
|
107
131
|
GRPC_HTTP2_STREAM_LOG << "Stream::EnqueueTrailingMetadata";
|
|
108
|
-
return
|
|
132
|
+
return data_queue_->EnqueueTrailingMetadata(std::move(metadata));
|
|
109
133
|
}
|
|
110
134
|
|
|
111
135
|
auto EnqueueMessage(MessageHandle&& message) {
|
|
@@ -113,36 +137,37 @@ struct Stream : public RefCounted<Stream> {
|
|
|
113
137
|
<< " with payload size = "
|
|
114
138
|
<< message->payload()->Length()
|
|
115
139
|
<< " and flags = " << message->flags();
|
|
116
|
-
return
|
|
140
|
+
return data_queue_->EnqueueMessage(std::move(message));
|
|
117
141
|
}
|
|
118
142
|
|
|
119
143
|
auto EnqueueHalfClosed() {
|
|
120
144
|
GRPC_HTTP2_STREAM_LOG << "Stream::EnqueueHalfClosed";
|
|
121
|
-
return
|
|
145
|
+
return data_queue_->EnqueueHalfClosed();
|
|
122
146
|
}
|
|
123
147
|
|
|
124
148
|
auto EnqueueResetStream(const uint32_t error_code) {
|
|
125
149
|
GRPC_HTTP2_STREAM_LOG << "Stream::EnqueueResetStream"
|
|
126
150
|
<< " with error_code = " << error_code;
|
|
127
|
-
return
|
|
151
|
+
return data_queue_->EnqueueResetStream(error_code);
|
|
128
152
|
}
|
|
129
153
|
|
|
130
154
|
// Called from the transport party
|
|
131
155
|
auto DequeueFrames(const uint32_t tokens,
|
|
132
156
|
const uint32_t stream_flow_control_tokens,
|
|
133
|
-
const uint32_t max_frame_length,
|
|
134
|
-
|
|
135
|
-
HttpStreamState state =
|
|
157
|
+
const uint32_t max_frame_length, HPackCompressor& encoder,
|
|
158
|
+
FrameSender& frame_sender) {
|
|
159
|
+
HttpStreamState state = stream_state_;
|
|
136
160
|
// Reset stream MUST not be sent if the stream is idle or closed.
|
|
137
|
-
return
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
161
|
+
return data_queue_->DequeueFrames(tokens, max_frame_length,
|
|
162
|
+
stream_flow_control_tokens, encoder,
|
|
163
|
+
frame_sender,
|
|
164
|
+
/*can_send_reset_stream=*/
|
|
165
|
+
!(state == HttpStreamState::kIdle ||
|
|
166
|
+
state == HttpStreamState::kClosed));
|
|
142
167
|
}
|
|
143
168
|
|
|
144
169
|
auto ReceivedFlowControlWindowUpdate(const uint32_t stream_fc_tokens) {
|
|
145
|
-
return
|
|
170
|
+
return data_queue_->ReceivedFlowControlWindowUpdate(stream_fc_tokens);
|
|
146
171
|
}
|
|
147
172
|
|
|
148
173
|
////////////////////////////////////////////////////////////////////////////
|
|
@@ -156,78 +181,90 @@ struct Stream : public RefCounted<Stream> {
|
|
|
156
181
|
// kHalfClosedLocal/kHalfClosedRemote -> kClosed
|
|
157
182
|
// kClosed -> kClosed
|
|
158
183
|
void SentInitialMetadata() {
|
|
159
|
-
GRPC_DCHECK(
|
|
160
|
-
|
|
184
|
+
GRPC_DCHECK(stream_state_ == HttpStreamState::kIdle);
|
|
185
|
+
stream_state_ = HttpStreamState::kOpen;
|
|
161
186
|
}
|
|
162
187
|
|
|
163
188
|
void MarkHalfClosedLocal() {
|
|
164
|
-
switch (
|
|
189
|
+
switch (stream_state_) {
|
|
165
190
|
case HttpStreamState::kIdle:
|
|
166
191
|
GRPC_DCHECK(false) << "MarkHalfClosedLocal called for an idle stream";
|
|
167
192
|
break;
|
|
168
193
|
case HttpStreamState::kOpen:
|
|
169
194
|
GRPC_HTTP2_STREAM_LOG
|
|
170
|
-
<< "Stream::MarkHalfClosedLocal stream_id=" <<
|
|
195
|
+
<< "Stream::MarkHalfClosedLocal stream_id=" << stream_id_
|
|
171
196
|
<< " transitioning to kHalfClosedLocal";
|
|
172
|
-
|
|
197
|
+
stream_state_ = HttpStreamState::kHalfClosedLocal;
|
|
173
198
|
break;
|
|
174
199
|
case HttpStreamState::kHalfClosedRemote:
|
|
175
200
|
GRPC_HTTP2_STREAM_LOG
|
|
176
|
-
<< "Stream::MarkHalfClosedLocal stream_id=" <<
|
|
201
|
+
<< "Stream::MarkHalfClosedLocal stream_id=" << stream_id_
|
|
177
202
|
<< " transitioning to kClosed";
|
|
178
|
-
|
|
203
|
+
stream_state_ = HttpStreamState::kClosed;
|
|
179
204
|
break;
|
|
180
205
|
case HttpStreamState::kHalfClosedLocal:
|
|
181
206
|
break;
|
|
182
207
|
case HttpStreamState::kClosed:
|
|
183
208
|
GRPC_HTTP2_STREAM_LOG
|
|
184
|
-
<< "Stream::MarkHalfClosedLocal stream_id=" <<
|
|
209
|
+
<< "Stream::MarkHalfClosedLocal stream_id=" << stream_id_
|
|
185
210
|
<< " already closed";
|
|
186
211
|
break;
|
|
187
212
|
}
|
|
188
213
|
}
|
|
189
214
|
|
|
190
215
|
void MarkHalfClosedRemote() {
|
|
191
|
-
switch (
|
|
216
|
+
switch (stream_state_) {
|
|
192
217
|
case HttpStreamState::kIdle:
|
|
193
218
|
GRPC_DCHECK(false) << "MarkHalfClosedRemote called for an idle stream";
|
|
194
219
|
break;
|
|
195
220
|
case HttpStreamState::kOpen:
|
|
196
221
|
GRPC_HTTP2_STREAM_LOG
|
|
197
|
-
<< "Stream::MarkHalfClosedRemote stream_id=" <<
|
|
222
|
+
<< "Stream::MarkHalfClosedRemote stream_id=" << stream_id_
|
|
198
223
|
<< " transitioning to kHalfClosedRemote";
|
|
199
|
-
|
|
224
|
+
stream_state_ = HttpStreamState::kHalfClosedRemote;
|
|
200
225
|
break;
|
|
201
226
|
case HttpStreamState::kHalfClosedLocal:
|
|
202
227
|
GRPC_HTTP2_STREAM_LOG
|
|
203
|
-
<< "Stream::MarkHalfClosedRemote stream_id=" <<
|
|
228
|
+
<< "Stream::MarkHalfClosedRemote stream_id=" << stream_id_
|
|
204
229
|
<< " transitioning to kClosed";
|
|
205
|
-
|
|
230
|
+
stream_state_ = HttpStreamState::kClosed;
|
|
206
231
|
break;
|
|
207
232
|
case HttpStreamState::kHalfClosedRemote:
|
|
208
233
|
break;
|
|
209
234
|
case HttpStreamState::kClosed:
|
|
210
235
|
GRPC_HTTP2_STREAM_LOG
|
|
211
|
-
<< "Stream::MarkHalfClosedRemote stream_id=" <<
|
|
236
|
+
<< "Stream::MarkHalfClosedRemote stream_id=" << stream_id_
|
|
212
237
|
<< " already closed";
|
|
213
238
|
break;
|
|
214
239
|
}
|
|
215
240
|
}
|
|
216
241
|
|
|
217
242
|
inline bool IsStreamIdle() const {
|
|
218
|
-
return
|
|
243
|
+
return stream_state_ == HttpStreamState::kIdle;
|
|
219
244
|
}
|
|
220
245
|
inline bool IsStreamHalfClosedRemote() const {
|
|
221
|
-
return
|
|
246
|
+
return stream_state_ == HttpStreamState::kHalfClosedRemote;
|
|
247
|
+
}
|
|
248
|
+
inline bool IsHalfClosedLocal() const {
|
|
249
|
+
return stream_state_ == HttpStreamState::kHalfClosedLocal;
|
|
222
250
|
}
|
|
223
|
-
inline
|
|
251
|
+
inline bool IsStreamClosed() const {
|
|
252
|
+
return stream_state_ == HttpStreamState::kClosed;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
inline uint32_t GetStreamId() const { return stream_id_; }
|
|
224
256
|
|
|
225
|
-
inline bool IsClosedForWrites() const {
|
|
226
|
-
|
|
257
|
+
inline bool IsClosedForWrites() const {
|
|
258
|
+
return is_write_closed_.load(std::memory_order_relaxed);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
inline void SetWriteClosed() {
|
|
262
|
+
is_write_closed_.store(true, std::memory_order_relaxed);
|
|
263
|
+
}
|
|
227
264
|
|
|
228
265
|
inline bool CanSendWindowUpdateFrames() const {
|
|
229
|
-
return
|
|
230
|
-
|
|
266
|
+
return stream_state_ == HttpStreamState::kOpen ||
|
|
267
|
+
stream_state_ == HttpStreamState::kHalfClosedLocal;
|
|
231
268
|
}
|
|
232
269
|
|
|
233
270
|
inline Http2Status CanStreamReceiveDataFrames() const {
|
|
@@ -236,7 +273,7 @@ struct Stream : public RefCounted<Stream> {
|
|
|
236
273
|
Http2ErrorCode::kStreamClosed,
|
|
237
274
|
std::string(RFC9113::kHalfClosedRemoteState));
|
|
238
275
|
}
|
|
239
|
-
if (!
|
|
276
|
+
if (!IsInitialMetadataReceived() || IsTrailingMetadataReceived()) {
|
|
240
277
|
return Http2Status::Http2StreamError(
|
|
241
278
|
Http2ErrorCode::kStreamClosed,
|
|
242
279
|
std::string(GrpcErrors::kOutOfOrderDataFrame));
|
|
@@ -245,20 +282,64 @@ struct Stream : public RefCounted<Stream> {
|
|
|
245
282
|
}
|
|
246
283
|
|
|
247
284
|
void MaybePushServerTrailingMetadata(ServerMetadataHandle&& metadata) {
|
|
285
|
+
GRPC_DCHECK(std::holds_alternative<CallHandler>(call_));
|
|
248
286
|
GRPC_HTTP2_STREAM_LOG << "Stream::MaybePushServerTrailingMetadata "
|
|
249
287
|
"stream_id="
|
|
250
|
-
<<
|
|
288
|
+
<< stream_id_
|
|
251
289
|
<< " metadata=" << metadata->DebugString()
|
|
252
290
|
<< " did_push_server_trailing_metadata="
|
|
253
|
-
<<
|
|
291
|
+
<< did_push_server_trailing_metadata_;
|
|
254
292
|
|
|
255
|
-
if (!
|
|
256
|
-
|
|
257
|
-
|
|
293
|
+
if (!did_push_server_trailing_metadata_) {
|
|
294
|
+
did_push_server_trailing_metadata_ = true;
|
|
295
|
+
GetCallHandler().SpawnPushServerTrailingMetadata(std::move(metadata));
|
|
258
296
|
}
|
|
259
297
|
}
|
|
260
298
|
|
|
261
|
-
|
|
299
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION bool IsInitialMetadataReceived() const {
|
|
300
|
+
return did_receive_initial_metadata_;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void SetInitialMetadataReceived() {
|
|
304
|
+
did_receive_initial_metadata_ = true;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION bool IsTrailingMetadataReceived() const {
|
|
308
|
+
return did_receive_trailing_metadata_;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION void SetTrailingMetadataReceived() {
|
|
312
|
+
did_receive_trailing_metadata_ = true;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION CallHandler& GetCallHandler() {
|
|
316
|
+
return std::get<CallHandler>(call_);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION CallInitiator& GetCallInitiator() {
|
|
320
|
+
return std::get<CallInitiator>(call_);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION GrpcMessageAssembler&
|
|
324
|
+
GetGrpcMessageAssembler() {
|
|
325
|
+
return assembler_;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION HeaderAssembler& GetHeaderAssembler() {
|
|
329
|
+
return header_assembler_;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION chttp2::StreamFlowControl&
|
|
333
|
+
GetStreamFlowControl() {
|
|
334
|
+
return flow_control_;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
private:
|
|
338
|
+
GrpcMessageAssembler assembler_;
|
|
339
|
+
HeaderAssembler header_assembler_;
|
|
340
|
+
chttp2::StreamFlowControl flow_control_;
|
|
341
|
+
std::variant<CallInitiator, CallHandler> call_;
|
|
342
|
+
|
|
262
343
|
// This flag is kept separate from the stream_state as the stream_state
|
|
263
344
|
// is inline with the HTTP2 spec, whereas this flag is an implementation
|
|
264
345
|
// detail of the PH2 transport. As far as PH2 is concerned, if a stream is
|
|
@@ -266,19 +347,17 @@ struct Stream : public RefCounted<Stream> {
|
|
|
266
347
|
// Similarly if a stream is closed for reads(this is achieved by removing the
|
|
267
348
|
// stream from the transport map), then all the frames read on that stream
|
|
268
349
|
// will be dropped.
|
|
269
|
-
bool
|
|
350
|
+
std::atomic<bool> is_write_closed_;
|
|
351
|
+
uint32_t stream_id_;
|
|
352
|
+
|
|
270
353
|
// This MUST be accessed from the transport party.
|
|
271
|
-
HttpStreamState
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
bool did_receive_trailing_metadata;
|
|
277
|
-
bool did_push_server_trailing_metadata;
|
|
278
|
-
// TODO(akshitpatel) : [PH2][P3][Server] : This would need to change to
|
|
354
|
+
HttpStreamState stream_state_;
|
|
355
|
+
bool did_receive_initial_metadata_;
|
|
356
|
+
bool did_receive_trailing_metadata_;
|
|
357
|
+
bool did_push_server_trailing_metadata_;
|
|
358
|
+
// TODO(akshitpatel) : [PH2][P0][Server] : This would need to change to
|
|
279
359
|
// accomodate ServerMetadataHandle for the server side.
|
|
280
|
-
RefCountedPtr<StreamDataQueue<ClientMetadataHandle>>
|
|
281
|
-
chttp2::StreamFlowControl flow_control;
|
|
360
|
+
RefCountedPtr<StreamDataQueue<ClientMetadataHandle>> data_queue_;
|
|
282
361
|
};
|
|
283
362
|
|
|
284
363
|
} // namespace http2
|