grpc 1.56.2 → 1.58.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +549 -292
- data/include/grpc/event_engine/event_engine.h +22 -33
- data/include/grpc/event_engine/memory_allocator.h +2 -2
- data/include/grpc/impl/channel_arg_names.h +371 -0
- data/include/grpc/impl/grpc_types.h +1 -350
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/port_platform.h +29 -23
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -11
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +27 -53
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +23 -9
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -35
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +79 -132
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +42 -17
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +22 -6
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +97 -71
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -16
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +152 -101
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +20 -0
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +13 -34
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +6 -7
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +21 -79
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +32 -20
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +12 -4
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +13 -42
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +8 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +31 -74
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +7 -51
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +22 -90
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +16 -50
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -74
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +102 -11
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +9 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +6 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +107 -70
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +10 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +25 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +367 -312
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +17 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +39 -2498
- data/src/core/ext/filters/client_channel/retry_filter.h +92 -1
- data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc +2052 -0
- data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.h +442 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +39 -59
- data/src/core/ext/filters/client_channel/subchannel.cc +9 -5
- data/src/core/ext/filters/client_channel/subchannel.h +11 -5
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +40 -111
- data/src/core/ext/filters/rbac/rbac_filter.h +12 -30
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +4 -7
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +162 -86
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +463 -519
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +6569 -174
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +2278 -441
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -20
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +72 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +7 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +38 -61
- data/src/core/ext/transport/chttp2/transport/parsing.cc +31 -10
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +80 -0
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +55 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +98 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +73 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +82 -91
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -6
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +143 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +0 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +35 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +17 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +85 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +26 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +45 -3
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +4 -3
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +21 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +30 -6
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +180 -0
- data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.c +558 -0
- data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.h +2710 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +30 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +53 -24
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +30 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +110 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +41 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +150 -27
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +93 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +88 -76
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +11 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +162 -160
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +129 -118
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +141 -135
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +19 -12
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +38 -30
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.c +402 -0
- data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.h +111 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +80 -74
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +63 -47
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +315 -293
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -29
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +33 -30
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -13
- data/src/core/ext/xds/xds_client_grpc.cc +12 -6
- data/src/core/ext/xds/xds_client_grpc.h +16 -2
- data/src/core/ext/xds/xds_client_stats.h +10 -0
- data/src/core/ext/xds/xds_cluster.cc +26 -16
- data/src/core/ext/xds/xds_endpoint.cc +4 -7
- data/src/core/ext/xds/xds_health_status.cc +0 -17
- data/src/core/ext/xds/xds_health_status.h +5 -25
- data/src/core/ext/xds/xds_http_fault_filter.cc +1 -2
- data/src/core/ext/xds/xds_http_fault_filter.h +1 -2
- data/src/core/ext/xds/xds_http_filters.h +2 -4
- data/src/core/ext/xds/xds_http_rbac_filter.cc +3 -8
- data/src/core/ext/xds/xds_http_rbac_filter.h +1 -2
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +1 -2
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +1 -2
- data/src/core/ext/xds/xds_lb_policy_registry.cc +36 -0
- data/src/core/ext/xds/xds_route_config.cc +4 -0
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +2 -3
- data/src/core/lib/address_utils/parse_address.cc +63 -1
- data/src/core/lib/address_utils/parse_address.h +8 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +46 -1
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
- data/src/core/lib/avl/avl.h +10 -173
- data/src/core/lib/channel/call_tracer.cc +289 -0
- data/src/core/lib/channel/call_tracer.h +35 -0
- data/src/core/lib/channel/channel_args.cc +98 -82
- data/src/core/lib/channel/channel_args.h +32 -17
- data/src/core/lib/channel/connected_channel.cc +4 -2
- data/src/core/lib/channel/promise_based_filter.cc +4 -1
- data/src/core/lib/channel/promise_based_filter.h +1 -0
- data/src/core/lib/compression/compression_internal.cc +8 -4
- data/src/core/lib/debug/stats_data.cc +93 -21
- data/src/core/lib/debug/stats_data.h +41 -0
- data/src/core/lib/debug/trace.cc +1 -4
- data/src/core/lib/event_engine/ares_resolver.cc +712 -0
- data/src/core/lib/event_engine/ares_resolver.h +150 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +10 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -1
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +229 -0
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +117 -0
- data/src/core/lib/event_engine/event_engine.cc +0 -12
- data/src/core/lib/event_engine/forkable.cc +62 -43
- data/src/core/lib/event_engine/forkable.h +15 -0
- data/src/core/lib/event_engine/grpc_polled_fd.h +73 -0
- data/src/core/lib/event_engine/handle_containers.h +0 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +29 -9
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +10 -1
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +197 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -14
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +49 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +20 -13
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +37 -27
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +43 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +6 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +10 -37
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -0
- data/src/core/lib/event_engine/tcp_socket_utils.cc +67 -7
- data/src/core/lib/event_engine/tcp_socket_utils.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +58 -0
- data/src/core/lib/event_engine/thread_pool/thread_count.h +161 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +7 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +122 -94
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +22 -48
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +12 -21
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +8 -12
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +58 -58
- data/src/core/lib/event_engine/windows/windows_endpoint.h +15 -12
- data/src/core/lib/event_engine/windows/windows_engine.cc +2 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -12
- data/src/core/lib/experiments/config.cc +74 -22
- data/src/core/lib/experiments/config.h +20 -8
- data/src/core/lib/experiments/experiments.cc +206 -91
- data/src/core/lib/experiments/experiments.h +71 -14
- data/src/core/lib/gprpp/dual_ref_counted.h +9 -9
- data/src/core/lib/gprpp/fork.cc +8 -9
- data/src/core/lib/gprpp/fork.h +6 -5
- data/src/core/lib/gprpp/if_list.h +4530 -0
- data/src/core/lib/gprpp/orphanable.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +9 -7
- data/src/core/lib/gprpp/ref_counted_string.cc +44 -0
- data/src/core/lib/gprpp/ref_counted_string.h +146 -0
- data/src/core/lib/gprpp/sorted_pack.h +3 -12
- data/src/core/lib/gprpp/status_helper.h +16 -15
- data/src/core/lib/gprpp/time.h +13 -1
- data/src/core/lib/gprpp/type_list.h +32 -0
- data/src/core/lib/gprpp/work_serializer.cc +36 -0
- data/src/core/lib/gprpp/work_serializer.h +5 -0
- data/src/core/lib/http/httpcli.h +6 -9
- data/src/core/lib/http/httpcli_security_connector.cc +1 -0
- data/src/core/lib/iomgr/buffer_list.cc +2 -0
- data/src/core/lib/iomgr/error.cc +32 -2
- data/src/core/lib/iomgr/error.h +9 -10
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +7 -22
- data/src/core/lib/iomgr/exec_ctx.h +11 -0
- data/src/core/lib/iomgr/pollset.h +4 -5
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.cc +13 -1
- data/src/core/lib/iomgr/resolve_address.h +17 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +7 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -0
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +6 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -1
- data/src/core/lib/iomgr/tcp_posix.cc +24 -7
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -2
- data/src/core/lib/iomgr/tcp_windows.cc +1 -3
- data/src/core/lib/iomgr/vsock.cc +59 -0
- data/src/core/lib/iomgr/vsock.h +38 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -6
- data/src/core/lib/load_balancing/delegating_helper.h +115 -0
- data/src/core/lib/load_balancing/lb_policy.h +20 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +6 -0
- data/src/core/lib/promise/detail/basic_seq.h +1 -372
- data/src/core/lib/promise/detail/seq_state.h +2076 -0
- data/src/core/lib/promise/party.h +1 -1
- data/src/core/lib/promise/seq.h +19 -2
- data/src/core/lib/promise/sleep.h +5 -10
- data/src/core/lib/promise/try_seq.h +34 -2
- data/src/core/lib/resolver/resolver_factory.h +3 -2
- data/src/core/lib/resolver/server_address.cc +9 -94
- data/src/core/lib/resolver/server_address.h +10 -64
- data/src/core/lib/resource_quota/api.cc +1 -0
- data/src/core/lib/resource_quota/arena.cc +2 -0
- data/src/core/lib/resource_quota/arena.h +42 -8
- data/src/core/lib/resource_quota/memory_quota.cc +0 -1
- data/src/core/lib/resource_quota/memory_quota.h +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +51 -27
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +169 -9
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -38
- data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +17 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +4 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +42 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +8 -5
- data/src/core/lib/security/transport/security_handshaker.cc +1 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
- data/src/core/lib/service_config/service_config_call_data.h +5 -0
- data/src/core/lib/slice/slice.h +16 -0
- data/src/core/lib/surface/call.cc +63 -37
- data/src/core/lib/surface/channel.cc +1 -0
- data/src/core/lib/surface/completion_queue.cc +10 -0
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/server.cc +67 -64
- data/src/core/lib/surface/server.h +1 -15
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata_batch.cc +7 -7
- data/src/core/lib/transport/metadata_batch.h +86 -48
- data/src/core/lib/transport/parsed_metadata.h +34 -20
- data/src/core/lib/transport/simple_slice_based_metadata.h +9 -2
- data/src/core/tsi/alts/crypt/aes_gcm.cc +27 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +4 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +39 -7
- data/src/ruby/bin/math_pb.rb +24 -18
- data/src/ruby/ext/grpc/extconf.rb +19 -18
- data/src/ruby/ext/grpc/rb_call.c +62 -39
- data/src/ruby/ext/grpc/rb_call_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_channel.c +109 -84
- data/src/ruby/ext/grpc/rb_channel.h +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +16 -2
- data/src/ruby/ext/grpc/rb_channel_args.h +4 -0
- 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_event_thread.c +22 -6
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -0
- data/src/ruby/ext/grpc/rb_grpc.c +192 -30
- data/src/ruby/ext/grpc/rb_grpc.h +8 -2
- data/src/ruby/ext/grpc/rb_server.c +62 -45
- data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +9 -14
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +24 -13
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +24 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +25 -111
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +25 -2
- data/src/ruby/pb/test/client.rb +16 -0
- data/src/ruby/spec/generic/rpc_server_spec.rb +3 -3
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -2
- data/third_party/abseil-cpp/absl/base/attributes.h +58 -5
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +8 -8
- data/third_party/abseil-cpp/absl/base/config.h +89 -106
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +26 -1
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +50 -39
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +2 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +17 -18
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +32 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +24 -4
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +31 -73
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -8
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +23 -32
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +2 -3
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/policy_checks.h +3 -3
- data/third_party/abseil-cpp/absl/base/prefetch.h +198 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +54 -29
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -1
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +167 -79
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +3 -21
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +46 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +85 -26
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -18
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +70 -29
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +437 -236
- data/third_party/abseil-cpp/absl/crc/crc32c.h +8 -1
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +14 -8
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -35
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +2 -10
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +1 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +1 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +4 -4
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +8 -10
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +17 -19
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +8 -8
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +59 -23
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +43 -19
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -0
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +16 -15
- data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +1 -1
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +43 -2
- data/third_party/abseil-cpp/absl/flags/marshalling.h +5 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +9 -1
- data/third_party/abseil-cpp/absl/functional/bind_front.h +1 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +3 -3
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +37 -24
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +19 -9
- data/third_party/abseil-cpp/absl/hash/hash.h +7 -4
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +38 -15
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +6 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +48 -373
- data/third_party/abseil-cpp/absl/numeric/bits.h +4 -4
- data/third_party/abseil-cpp/absl/numeric/int128.cc +20 -8
- data/third_party/abseil-cpp/absl/numeric/int128.h +36 -39
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +0 -3
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +47 -30
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -3
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/platform.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +4 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +1 -1
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +4 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +12 -24
- data/third_party/abseil-cpp/absl/status/status.cc +11 -7
- data/third_party/abseil-cpp/absl/status/status.h +11 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +22 -8
- data/third_party/abseil-cpp/absl/strings/ascii.cc +54 -6
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -4
- data/third_party/abseil-cpp/absl/strings/charconv.h +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +1 -2
- data/third_party/abseil-cpp/absl/strings/cord.h +32 -5
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +23 -1
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +18 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +2 -5
- data/third_party/abseil-cpp/absl/strings/escaping.cc +10 -32
- data/third_party/abseil-cpp/absl/strings/escaping.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +2 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +15 -13
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +13 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +4 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +46 -20
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +1 -34
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +23 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +2 -77
- data/third_party/abseil-cpp/absl/strings/internal/memutil.h +4 -112
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +10 -31
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -8
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +5 -20
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +56 -6
- data/third_party/abseil-cpp/absl/strings/match.cc +87 -0
- data/third_party/abseil-cpp/absl/strings/match.h +19 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +154 -122
- data/third_party/abseil-cpp/absl/strings/numbers.h +1 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +7 -50
- data/third_party/abseil-cpp/absl/strings/str_cat.h +83 -15
- data/third_party/abseil-cpp/absl/strings/str_format.h +6 -3
- data/third_party/abseil-cpp/absl/strings/str_split.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +26 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +63 -43
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +111 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +11 -7
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +225 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +122 -114
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +12 -8
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +10 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +167 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +122 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +91 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +19 -113
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +42 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +151 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +70 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +407 -411
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +152 -118
- data/third_party/abseil-cpp/absl/time/clock.cc +6 -7
- data/third_party/abseil-cpp/absl/time/duration.cc +24 -26
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +3 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +8 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +6 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +4 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +322 -295
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +8 -17
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +51 -33
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +7 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +128 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +34 -34
- data/third_party/abseil-cpp/absl/time/time.cc +9 -2
- data/third_party/abseil-cpp/absl/time/time.h +115 -15
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -52
- data/third_party/abseil-cpp/absl/types/internal/span.h +2 -2
- data/third_party/abseil-cpp/absl/types/internal/variant.h +2 -2
- data/third_party/abseil-cpp/absl/types/optional.h +15 -13
- data/third_party/abseil-cpp/absl/types/span.h +1 -2
- data/third_party/boringssl-with-bazel/err_data.c +554 -553
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +34 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +11 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/errno.c +92 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +5 -49
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +18 -13
- data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +16 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +19 -1
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +8 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +31 -192
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.c +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +49 -46
- data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_openbsd.c → curve25519/curve25519_64_adx.c} +3 -16
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +2809 -7417
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +27 -5
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +20 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +110 -72
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +23 -21
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +35 -12
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +34 -72
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +12 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +12 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +17 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +51 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +37 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +38 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +277 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +180 -404
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +24 -57
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +33 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +18 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +15 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +9 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +11 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +9 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +40 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +21 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +38 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +2 -29
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +55 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +33 -52
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +42 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +211 -100
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +5 -4
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +25 -46
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +8 -5
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +6 -12
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +52 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fuchsia.c → ios.c} +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_no_threads.c → rand_extra/trusty.c} +15 -19
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +41 -19
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_c11.c → refcount.c} +11 -17
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +152 -72
- data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +6 -35
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +5 -26
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +14 -18
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +54 -143
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +8 -19
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +8 -12
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +19 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +4 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +4 -119
- data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +207 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -116
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +11 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +0 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +0 -21
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +28 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +19 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +11 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +0 -61
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +22 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +131 -81
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +236 -213
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +201 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -29
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +4 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +3 -2
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +9 -65
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +20 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -11
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +26 -20
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +4 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +37 -30
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +127 -26
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -3
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +691 -0
- data/third_party/upb/upb/collections/map.c +3 -3
- metadata +62 -39
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +0 -42
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +0 -64
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +0 -177
- data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -68
- data/src/core/lib/promise/detail/basic_join.h +0 -197
- data/src/core/lib/promise/detail/switch.h +0 -1455
- data/src/core/lib/promise/try_join.h +0 -82
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -403
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +0 -62
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm.c +0 -38
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +0 -89
- data/third_party/re2/util/benchmark.h +0 -156
- data/third_party/re2/util/flags.h +0 -26
- data/third_party/re2/util/malloc_counter.h +0 -19
- data/third_party/re2/util/pcre.cc +0 -1025
- data/third_party/re2/util/pcre.h +0 -681
- data/third_party/re2/util/test.h +0 -50
- data/third_party/upb/upb/mini_table.h +0 -36
- data/third_party/zlib/gzclose.c +0 -25
- data/third_party/zlib/gzlib.c +0 -639
- data/third_party/zlib/gzread.c +0 -650
- data/third_party/zlib/gzwrite.c +0 -677
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <algorithm>
|
26
26
|
#include <initializer_list>
|
27
27
|
|
28
|
+
#include "absl/container/flat_hash_map.h"
|
28
29
|
#include "absl/status/status.h"
|
29
30
|
#include "absl/strings/str_format.h"
|
30
31
|
|
@@ -32,8 +33,7 @@
|
|
32
33
|
#include <grpc/support/log.h>
|
33
34
|
|
34
35
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
35
|
-
#include "src/core/ext/transport/chttp2/transport/
|
36
|
-
#include "src/core/lib/gprpp/time.h"
|
36
|
+
#include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h"
|
37
37
|
|
38
38
|
grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes) {
|
39
39
|
grpc_slice slice = GRPC_SLICE_MALLOC(9 + 8);
|
@@ -94,25 +94,11 @@ grpc_error_handle grpc_chttp2_ping_parser_parse(void* parser,
|
|
94
94
|
grpc_chttp2_ack_ping(t, p->opaque_8bytes);
|
95
95
|
} else {
|
96
96
|
if (!t->is_client) {
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
if (t->keepalive_permit_without_calls == 0 &&
|
103
|
-
grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
104
|
-
// According to RFC1122, the interval of TCP Keep-Alive is default to
|
105
|
-
// no less than two hours. When there is no outstanding streams, we
|
106
|
-
// restrict the number of PINGS equivalent to TCP Keep-Alive.
|
107
|
-
next_allowed_ping = t->ping_recv_state.last_ping_recv_time +
|
108
|
-
grpc_core::Duration::Hours(2);
|
109
|
-
}
|
110
|
-
|
111
|
-
if (next_allowed_ping > now) {
|
112
|
-
grpc_chttp2_add_ping_strike(t);
|
97
|
+
const bool transport_idle =
|
98
|
+
t->keepalive_permit_without_calls == 0 && t->stream_map.empty();
|
99
|
+
if (t->ping_abuse_policy.ReceivedOnePing(transport_idle)) {
|
100
|
+
grpc_chttp2_exceeded_ping_strikes(t);
|
113
101
|
}
|
114
|
-
|
115
|
-
t->ping_recv_state.last_ping_recv_time = now;
|
116
102
|
}
|
117
103
|
if (t->ack_pings) {
|
118
104
|
if (t->ping_ack_count == t->ping_ack_capacity) {
|
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
#include <stdint.h>
|
21
21
|
|
22
|
+
#include <memory>
|
22
23
|
#include <string>
|
23
24
|
#include <utility>
|
24
25
|
|
@@ -132,9 +133,9 @@ class HpackParseResult {
|
|
132
133
|
bool connection_error() const { return IsConnectionError(status_.get()); }
|
133
134
|
bool ephemeral() const { return IsEphemeralError(status_.get()); }
|
134
135
|
|
135
|
-
HpackParseResult
|
136
|
-
if (connection_error() || ephemeral()) return
|
137
|
-
return *this;
|
136
|
+
std::unique_ptr<HpackParseResult> PersistentStreamErrorOrNullptr() const {
|
137
|
+
if (ok() || connection_error() || ephemeral()) return nullptr;
|
138
|
+
return std::make_unique<HpackParseResult>(*this);
|
138
139
|
}
|
139
140
|
|
140
141
|
static HpackParseResult FromStatus(HpackParseStatus status) {
|
@@ -24,6 +24,7 @@
|
|
24
24
|
#include <stdlib.h>
|
25
25
|
|
26
26
|
#include <algorithm>
|
27
|
+
#include <memory>
|
27
28
|
#include <string>
|
28
29
|
#include <utility>
|
29
30
|
|
@@ -43,6 +44,7 @@
|
|
43
44
|
#include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
|
44
45
|
#include "src/core/ext/transport/chttp2/transport/hpack_parse_result.h"
|
45
46
|
#include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h"
|
47
|
+
#include "src/core/lib/channel/call_tracer.h"
|
46
48
|
#include "src/core/lib/debug/stats.h"
|
47
49
|
#include "src/core/lib/debug/stats_data.h"
|
48
50
|
#include "src/core/lib/debug/trace.h"
|
@@ -696,19 +698,19 @@ class HPackParser::Parser {
|
|
696
698
|
gpr_log(
|
697
699
|
GPR_DEBUG, "HTTP:%d:%s:%s: %s%s", log_info_.stream_id, type,
|
698
700
|
log_info_.is_client ? "CLI" : "SVR", memento.md.DebugString().c_str(),
|
699
|
-
memento.parse_status
|
701
|
+
memento.parse_status == nullptr
|
700
702
|
? ""
|
701
703
|
: absl::StrCat(" (parse error: ",
|
702
|
-
memento.parse_status
|
704
|
+
memento.parse_status->Materialize().ToString(), ")")
|
703
705
|
.c_str());
|
704
706
|
}
|
705
707
|
|
706
708
|
void EmitHeader(const HPackTable::Memento& md) {
|
707
709
|
// Pass up to the transport
|
708
710
|
state_.frame_length += md.md.transport_size();
|
709
|
-
if (
|
711
|
+
if (md.parse_status != nullptr) {
|
710
712
|
// Reject any requests with invalid metadata.
|
711
|
-
input_->SetErrorAndContinueParsing(md.parse_status);
|
713
|
+
input_->SetErrorAndContinueParsing(*md.parse_status);
|
712
714
|
}
|
713
715
|
if (GPR_LIKELY(metadata_buffer_ != nullptr)) {
|
714
716
|
metadata_buffer_->Set(md.md);
|
@@ -957,8 +959,8 @@ class HPackParser::Parser {
|
|
957
959
|
} else {
|
958
960
|
const auto* memento = absl::get<const HPackTable::Memento*>(state_.key);
|
959
961
|
key_string = memento->md.key();
|
960
|
-
if (status.ok() &&
|
961
|
-
input_->SetErrorAndContinueParsing(memento->parse_status);
|
962
|
+
if (status.ok() && memento->parse_status != nullptr) {
|
963
|
+
input_->SetErrorAndContinueParsing(*memento->parse_status);
|
962
964
|
}
|
963
965
|
}
|
964
966
|
switch (value.status) {
|
@@ -983,7 +985,7 @@ class HPackParser::Parser {
|
|
983
985
|
const auto transport_size =
|
984
986
|
key_string.size() + value.wire_size + hpack_constants::kEntryOverhead;
|
985
987
|
auto md = grpc_metadata_batch::Parse(
|
986
|
-
key_string, std::move(value_slice), transport_size,
|
988
|
+
key_string, std::move(value_slice), state_.add_to_table, transport_size,
|
987
989
|
[key_string, &status, this](absl::string_view message, const Slice&) {
|
988
990
|
if (!status.ok()) return;
|
989
991
|
input_->SetErrorAndContinueParsing(
|
@@ -993,7 +995,7 @@ class HPackParser::Parser {
|
|
993
995
|
std::string(message).c_str());
|
994
996
|
});
|
995
997
|
HPackTable::Memento memento{std::move(md),
|
996
|
-
status.
|
998
|
+
status.PersistentStreamErrorOrNullptr()};
|
997
999
|
input_->UpdateFrontier();
|
998
1000
|
state_.parse_state = ParseState::kTop;
|
999
1001
|
if (state_.add_to_table) {
|
@@ -1068,6 +1070,55 @@ Slice HPackParser::String::Take() {
|
|
1068
1070
|
GPR_UNREACHABLE_CODE(return Slice());
|
1069
1071
|
}
|
1070
1072
|
|
1073
|
+
class HPackParser::MetadataSizeEncoder {
|
1074
|
+
public:
|
1075
|
+
explicit MetadataSizeEncoder(std::string& summary) : summary_(summary) {}
|
1076
|
+
|
1077
|
+
void Encode(const Slice& key, const Slice& value) {
|
1078
|
+
AddToSummary(key.as_string_view(), value.size());
|
1079
|
+
}
|
1080
|
+
|
1081
|
+
template <typename Key, typename Value>
|
1082
|
+
void Encode(Key, const Value& value) {
|
1083
|
+
AddToSummary(Key::key(), EncodedSizeOfKey(Key(), value));
|
1084
|
+
}
|
1085
|
+
|
1086
|
+
private:
|
1087
|
+
void AddToSummary(absl::string_view key,
|
1088
|
+
size_t value_length) GPR_ATTRIBUTE_NOINLINE {
|
1089
|
+
absl::StrAppend(&summary_, key, ":",
|
1090
|
+
hpack_constants::SizeForEntry(key.size(), value_length),
|
1091
|
+
",");
|
1092
|
+
}
|
1093
|
+
std::string& summary_;
|
1094
|
+
};
|
1095
|
+
|
1096
|
+
class HPackParser::MetadataSizesAnnotation
|
1097
|
+
: public CallTracerAnnotationInterface::Annotation {
|
1098
|
+
public:
|
1099
|
+
MetadataSizesAnnotation(grpc_metadata_batch* metadata_buffer,
|
1100
|
+
uint64_t soft_limit, uint64_t hard_limit)
|
1101
|
+
: CallTracerAnnotationInterface::Annotation(
|
1102
|
+
CallTracerAnnotationInterface::AnnotationType::kMetadataSizes),
|
1103
|
+
metadata_buffer_(metadata_buffer),
|
1104
|
+
soft_limit_(soft_limit),
|
1105
|
+
hard_limit_(hard_limit) {}
|
1106
|
+
|
1107
|
+
std::string ToString() const override {
|
1108
|
+
std::string metadata_annotation =
|
1109
|
+
absl::StrCat("gRPC metadata soft_limit:", soft_limit_,
|
1110
|
+
",hard_limit:", hard_limit_, ",");
|
1111
|
+
MetadataSizeEncoder encoder(metadata_annotation);
|
1112
|
+
metadata_buffer_->Encode(&encoder);
|
1113
|
+
return metadata_annotation;
|
1114
|
+
}
|
1115
|
+
|
1116
|
+
private:
|
1117
|
+
grpc_metadata_batch* metadata_buffer_;
|
1118
|
+
uint64_t soft_limit_;
|
1119
|
+
uint64_t hard_limit_;
|
1120
|
+
};
|
1121
|
+
|
1071
1122
|
// PUBLIC INTERFACE
|
1072
1123
|
|
1073
1124
|
HPackParser::HPackParser() = default;
|
@@ -1092,7 +1143,9 @@ void HPackParser::BeginFrame(grpc_metadata_batch* metadata_buffer,
|
|
1092
1143
|
log_info_ = log_info;
|
1093
1144
|
}
|
1094
1145
|
|
1095
|
-
grpc_error_handle HPackParser::Parse(
|
1146
|
+
grpc_error_handle HPackParser::Parse(
|
1147
|
+
const grpc_slice& slice, bool is_last,
|
1148
|
+
CallTracerAnnotationInterface* call_tracer) {
|
1096
1149
|
if (GPR_UNLIKELY(!unparsed_bytes_.empty())) {
|
1097
1150
|
unparsed_bytes_.insert(unparsed_bytes_.end(), GRPC_SLICE_START_PTR(slice),
|
1098
1151
|
GRPC_SLICE_END_PTR(slice));
|
@@ -1104,20 +1157,27 @@ grpc_error_handle HPackParser::Parse(const grpc_slice& slice, bool is_last) {
|
|
1104
1157
|
std::vector<uint8_t> buffer = std::move(unparsed_bytes_);
|
1105
1158
|
return ParseInput(Input(nullptr, buffer.data(),
|
1106
1159
|
buffer.data() + buffer.size(), state_.frame_error),
|
1107
|
-
is_last);
|
1160
|
+
is_last, call_tracer);
|
1108
1161
|
}
|
1109
1162
|
return ParseInput(Input(slice.refcount, GRPC_SLICE_START_PTR(slice),
|
1110
1163
|
GRPC_SLICE_END_PTR(slice), state_.frame_error),
|
1111
|
-
is_last);
|
1164
|
+
is_last, call_tracer);
|
1112
1165
|
}
|
1113
1166
|
|
1114
|
-
grpc_error_handle HPackParser::ParseInput(
|
1167
|
+
grpc_error_handle HPackParser::ParseInput(
|
1168
|
+
Input input, bool is_last, CallTracerAnnotationInterface* call_tracer) {
|
1115
1169
|
ParseInputInner(&input);
|
1116
1170
|
if (is_last && is_boundary()) {
|
1117
1171
|
if (state_.metadata_early_detection.Reject(state_.frame_length)) {
|
1118
1172
|
HandleMetadataSoftSizeLimitExceeded(&input);
|
1119
1173
|
}
|
1120
1174
|
global_stats().IncrementHttp2MetadataSize(state_.frame_length);
|
1175
|
+
if (call_tracer != nullptr && metadata_buffer_ != nullptr) {
|
1176
|
+
MetadataSizesAnnotation metadata_sizes_annotation(
|
1177
|
+
metadata_buffer_, state_.metadata_early_detection.soft_limit(),
|
1178
|
+
state_.metadata_early_detection.hard_limit());
|
1179
|
+
call_tracer->RecordAnnotation(metadata_sizes_annotation);
|
1180
|
+
}
|
1121
1181
|
if (!state_.frame_error.connection_error() &&
|
1122
1182
|
(input.eof_error() || state_.parse_state != ParseState::kTop)) {
|
1123
1183
|
state_.frame_error = HpackParseResult::IncompleteHeaderAtBoundaryError();
|
@@ -40,6 +40,7 @@
|
|
40
40
|
#include "src/core/ext/transport/chttp2/transport/hpack_parse_result.h"
|
41
41
|
#include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h"
|
42
42
|
#include "src/core/lib/backoff/random_early_detection.h"
|
43
|
+
#include "src/core/lib/channel/call_tracer.h"
|
43
44
|
#include "src/core/lib/iomgr/error.h"
|
44
45
|
#include "src/core/lib/slice/slice.h"
|
45
46
|
#include "src/core/lib/slice/slice_refcount.h"
|
@@ -99,7 +100,8 @@ class HPackParser {
|
|
99
100
|
// Start throwing away any received headers after parsing them.
|
100
101
|
void StopBufferingFrame() { metadata_buffer_ = nullptr; }
|
101
102
|
// Parse one slice worth of data
|
102
|
-
grpc_error_handle Parse(const grpc_slice& slice, bool is_last
|
103
|
+
grpc_error_handle Parse(const grpc_slice& slice, bool is_last,
|
104
|
+
CallTracerAnnotationInterface* call_tracer);
|
103
105
|
// Reset state ready for the next BeginFrame
|
104
106
|
void FinishFrame();
|
105
107
|
|
@@ -117,6 +119,8 @@ class HPackParser {
|
|
117
119
|
// Helper classes: see implementation
|
118
120
|
class Parser;
|
119
121
|
class Input;
|
122
|
+
class MetadataSizeEncoder;
|
123
|
+
class MetadataSizesAnnotation;
|
120
124
|
|
121
125
|
// Helper to parse a string and turn it into a slice with appropriate memory
|
122
126
|
// management characteristics
|
@@ -249,7 +253,8 @@ class HPackParser {
|
|
249
253
|
absl::variant<const HPackTable::Memento*, Slice> key;
|
250
254
|
};
|
251
255
|
|
252
|
-
grpc_error_handle ParseInput(Input input, bool is_last
|
256
|
+
grpc_error_handle ParseInput(Input input, bool is_last,
|
257
|
+
CallTracerAnnotationInterface* call_tracer);
|
253
258
|
void ParseInputInner(Input* input);
|
254
259
|
GPR_ATTRIBUTE_NOINLINE
|
255
260
|
void HandleMetadataSoftSizeLimitExceeded(Input* input);
|
@@ -161,10 +161,10 @@ void HPackTable::AddLargerThanCurrentTableSize() {
|
|
161
161
|
std::string HPackTable::TestOnlyDynamicTableAsString() const {
|
162
162
|
std::string out;
|
163
163
|
entries_.ForEach([&out](uint32_t i, const Memento& m) {
|
164
|
-
if (m.parse_status
|
164
|
+
if (m.parse_status == nullptr) {
|
165
165
|
absl::StrAppend(&out, i, ": ", m.md.DebugString(), "\n");
|
166
166
|
} else {
|
167
|
-
absl::StrAppend(&out, i, ": ", m.parse_status
|
167
|
+
absl::StrAppend(&out, i, ": ", m.parse_status->Materialize().ToString(),
|
168
168
|
"\n");
|
169
169
|
}
|
170
170
|
});
|
@@ -245,12 +245,12 @@ HPackTable::Memento MakeMemento(size_t i) {
|
|
245
245
|
auto sm = kStaticTable[i];
|
246
246
|
return HPackTable::Memento{
|
247
247
|
grpc_metadata_batch::Parse(
|
248
|
-
sm.key, Slice::FromStaticString(sm.value),
|
248
|
+
sm.key, Slice::FromStaticString(sm.value), true,
|
249
249
|
strlen(sm.key) + strlen(sm.value) + hpack_constants::kEntryOverhead,
|
250
250
|
[](absl::string_view, const Slice&) {
|
251
251
|
abort(); // not expecting to see this
|
252
252
|
}),
|
253
|
-
|
253
|
+
nullptr};
|
254
254
|
}
|
255
255
|
|
256
256
|
} // namespace
|
@@ -23,6 +23,7 @@
|
|
23
23
|
|
24
24
|
#include <stdint.h>
|
25
25
|
|
26
|
+
#include <memory>
|
26
27
|
#include <string>
|
27
28
|
#include <vector>
|
28
29
|
|
@@ -51,7 +52,7 @@ class HPackTable {
|
|
51
52
|
|
52
53
|
struct Memento {
|
53
54
|
ParsedMetadata<grpc_metadata_batch> md;
|
54
|
-
HpackParseResult parse_status;
|
55
|
+
std::unique_ptr<HpackParseResult> parse_status;
|
55
56
|
};
|
56
57
|
|
57
58
|
// Lookup, but don't ref.
|
@@ -70,7 +71,7 @@ class HPackTable {
|
|
70
71
|
}
|
71
72
|
|
72
73
|
// add a table entry to the index
|
73
|
-
bool Add(Memento md)
|
74
|
+
GRPC_MUST_USE_RESULT bool Add(Memento md);
|
74
75
|
void AddLargerThanCurrentTableSize();
|
75
76
|
|
76
77
|
// Current entry count in the table.
|
@@ -26,6 +26,8 @@
|
|
26
26
|
|
27
27
|
#include <memory>
|
28
28
|
|
29
|
+
#include "absl/container/flat_hash_map.h"
|
30
|
+
#include "absl/meta/type_traits.h"
|
29
31
|
#include "absl/strings/string_view.h"
|
30
32
|
#include "absl/types/optional.h"
|
31
33
|
|
@@ -46,7 +48,8 @@
|
|
46
48
|
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
47
49
|
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
48
50
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
49
|
-
#include "src/core/ext/transport/chttp2/transport/
|
51
|
+
#include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h"
|
52
|
+
#include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h"
|
50
53
|
#include "src/core/lib/channel/channel_args.h"
|
51
54
|
#include "src/core/lib/channel/channelz.h"
|
52
55
|
#include "src/core/lib/debug/trace.h"
|
@@ -145,21 +148,14 @@ struct grpc_chttp2_ping_queue {
|
|
145
148
|
grpc_closure_list lists[GRPC_CHTTP2_PCL_COUNT] = {};
|
146
149
|
uint64_t inflight_id = 0;
|
147
150
|
};
|
148
|
-
|
149
|
-
int max_pings_without_data;
|
150
|
-
int max_ping_strikes;
|
151
|
-
grpc_core::Duration min_recv_ping_interval_without_data;
|
152
|
-
};
|
151
|
+
|
153
152
|
struct grpc_chttp2_repeated_ping_state {
|
154
153
|
grpc_core::Timestamp last_ping_sent_time;
|
155
154
|
int pings_before_data_required;
|
156
155
|
absl::optional<grpc_event_engine::experimental::EventEngine::TaskHandle>
|
157
156
|
delayed_ping_timer_handle;
|
158
157
|
};
|
159
|
-
|
160
|
-
grpc_core::Timestamp last_ping_recv_time;
|
161
|
-
int ping_strikes;
|
162
|
-
};
|
158
|
+
|
163
159
|
// deframer state for the overall http2 stream of bytes
|
164
160
|
typedef enum {
|
165
161
|
// prefix: one entry per http2 connection prefix byte
|
@@ -249,6 +245,19 @@ struct grpc_chttp2_transport : public grpc_core::KeepsGrpcInitialized {
|
|
249
245
|
grpc_endpoint* ep, bool is_client);
|
250
246
|
~grpc_chttp2_transport();
|
251
247
|
|
248
|
+
// Make this be able to be contained in RefCountedPtr<>
|
249
|
+
// Can't yet make this derive from RefCounted because we need to keep
|
250
|
+
// `grpc_transport base` first.
|
251
|
+
// TODO(ctiller): Make a transport interface.
|
252
|
+
void IncrementRefCount() { refs.Ref(); }
|
253
|
+
void Unref() {
|
254
|
+
if (refs.Unref()) delete this;
|
255
|
+
}
|
256
|
+
grpc_core::RefCountedPtr<grpc_chttp2_transport> Ref() {
|
257
|
+
IncrementRefCount();
|
258
|
+
return grpc_core::RefCountedPtr<grpc_chttp2_transport>(this);
|
259
|
+
}
|
260
|
+
|
252
261
|
grpc_transport base; // must be first
|
253
262
|
grpc_core::RefCount refs;
|
254
263
|
grpc_endpoint* ep;
|
@@ -278,7 +287,7 @@ struct grpc_chttp2_transport : public grpc_core::KeepsGrpcInitialized {
|
|
278
287
|
grpc_chttp2_stream_list lists[STREAM_LIST_COUNT] = {};
|
279
288
|
|
280
289
|
/// maps stream id to grpc_chttp2_stream objects
|
281
|
-
|
290
|
+
absl::flat_hash_map<uint32_t, grpc_chttp2_stream*> stream_map;
|
282
291
|
|
283
292
|
grpc_closure write_action_begin_locked;
|
284
293
|
grpc_closure write_action;
|
@@ -342,8 +351,10 @@ struct grpc_chttp2_transport : public grpc_core::KeepsGrpcInitialized {
|
|
342
351
|
|
343
352
|
/// ping queues for various ping insertion points
|
344
353
|
grpc_chttp2_ping_queue ping_queue = grpc_chttp2_ping_queue();
|
345
|
-
|
346
|
-
|
354
|
+
grpc_core::Chttp2PingAbusePolicy ping_abuse_policy;
|
355
|
+
grpc_core::Chttp2PingRatePolicy ping_rate_policy;
|
356
|
+
absl::optional<grpc_event_engine::experimental::EventEngine::TaskHandle>
|
357
|
+
delayed_ping_timer_handle;
|
347
358
|
uint64_t ping_ctr = 0; // unique id for pings
|
348
359
|
grpc_closure retry_initiate_ping_locked;
|
349
360
|
|
@@ -351,7 +362,6 @@ struct grpc_chttp2_transport : public grpc_core::KeepsGrpcInitialized {
|
|
351
362
|
size_t ping_ack_count = 0;
|
352
363
|
size_t ping_ack_capacity = 0;
|
353
364
|
uint64_t* ping_acks = nullptr;
|
354
|
-
grpc_chttp2_server_ping_recv_state ping_recv_state;
|
355
365
|
|
356
366
|
/// parser for headers
|
357
367
|
grpc_core::HPackParser hpack_parser;
|
@@ -485,15 +495,9 @@ struct grpc_chttp2_stream {
|
|
485
495
|
const void* server_data, grpc_core::Arena* arena);
|
486
496
|
~grpc_chttp2_stream();
|
487
497
|
|
488
|
-
void* context;
|
489
|
-
grpc_chttp2_transport
|
498
|
+
void* context = nullptr;
|
499
|
+
const grpc_core::RefCountedPtr<grpc_chttp2_transport> t;
|
490
500
|
grpc_stream_refcount* refcount;
|
491
|
-
// Reffer is a 0-len structure, simply reffing `t` and `refcount` in its ctor
|
492
|
-
// before initializing the rest of the stream, to avoid cache misses. This
|
493
|
-
// field MUST be right after `t` and `refcount`.
|
494
|
-
struct Reffer {
|
495
|
-
explicit Reffer(grpc_chttp2_stream* s);
|
496
|
-
} reffer;
|
497
501
|
|
498
502
|
grpc_closure destroy_stream;
|
499
503
|
grpc_closure* destroy_stream_arg;
|
@@ -679,8 +683,9 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
679
683
|
|
680
684
|
inline grpc_chttp2_stream* grpc_chttp2_parsing_lookup_stream(
|
681
685
|
grpc_chttp2_transport* t, uint32_t id) {
|
682
|
-
|
683
|
-
|
686
|
+
auto it = t->stream_map.find(id);
|
687
|
+
if (it == t->stream_map.end()) return nullptr;
|
688
|
+
return it->second;
|
684
689
|
}
|
685
690
|
grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
|
686
691
|
uint32_t id);
|
@@ -738,43 +743,11 @@ void grpc_chttp2_stream_ref(grpc_chttp2_stream* s);
|
|
738
743
|
void grpc_chttp2_stream_unref(grpc_chttp2_stream* s);
|
739
744
|
#endif
|
740
745
|
|
741
|
-
#ifndef NDEBUG
|
742
|
-
#define GRPC_CHTTP2_REF_TRANSPORT(t, r) \
|
743
|
-
grpc_chttp2_ref_transport(t, r, __FILE__, __LINE__)
|
744
|
-
#define GRPC_CHTTP2_UNREF_TRANSPORT(t, r) \
|
745
|
-
grpc_chttp2_unref_transport(t, r, __FILE__, __LINE__)
|
746
|
-
inline void grpc_chttp2_unref_transport(grpc_chttp2_transport* t,
|
747
|
-
const char* reason, const char* file,
|
748
|
-
int line) {
|
749
|
-
if (t->refs.Unref(grpc_core::DebugLocation(file, line), reason)) {
|
750
|
-
delete t;
|
751
|
-
}
|
752
|
-
}
|
753
|
-
inline void grpc_chttp2_ref_transport(grpc_chttp2_transport* t,
|
754
|
-
const char* reason, const char* file,
|
755
|
-
int line) {
|
756
|
-
t->refs.Ref(grpc_core::DebugLocation(file, line), reason);
|
757
|
-
}
|
758
|
-
#else
|
759
|
-
#define GRPC_CHTTP2_REF_TRANSPORT(t, r) grpc_chttp2_ref_transport(t)
|
760
|
-
#define GRPC_CHTTP2_UNREF_TRANSPORT(t, r) grpc_chttp2_unref_transport(t)
|
761
|
-
inline void grpc_chttp2_unref_transport(grpc_chttp2_transport* t) {
|
762
|
-
if (t->refs.Unref()) {
|
763
|
-
delete t;
|
764
|
-
}
|
765
|
-
}
|
766
|
-
inline void grpc_chttp2_ref_transport(grpc_chttp2_transport* t) {
|
767
|
-
t->refs.Ref();
|
768
|
-
}
|
769
|
-
#endif
|
770
|
-
|
771
746
|
void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id);
|
772
747
|
|
773
|
-
///
|
774
|
-
///
|
775
|
-
|
776
|
-
/// "too_many_pings" followed by immediately closing the connection.
|
777
|
-
void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t);
|
748
|
+
/// Sends GOAWAY with error code ENHANCE_YOUR_CALM and additional debug data
|
749
|
+
/// resembling "too_many_pings" followed by immediately closing the connection.
|
750
|
+
void grpc_chttp2_exceeded_ping_strikes(grpc_chttp2_transport* t);
|
778
751
|
|
779
752
|
/// Resets ping clock. Should be called when flushing window updates,
|
780
753
|
/// initial/trailing metadata or data frames. For a server, it resets the number
|
@@ -805,10 +778,14 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
|
805
778
|
/// initialization
|
806
779
|
void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
|
807
780
|
bool is_client);
|
781
|
+
void grpc_chttp2_config_default_keepalive_args(
|
782
|
+
const grpc_core::ChannelArgs& channel_args, bool is_client);
|
808
783
|
|
809
|
-
void grpc_chttp2_retry_initiate_ping(
|
784
|
+
void grpc_chttp2_retry_initiate_ping(
|
785
|
+
grpc_core::RefCountedPtr<grpc_chttp2_transport> t);
|
810
786
|
|
811
|
-
void schedule_bdp_ping_locked(
|
787
|
+
void schedule_bdp_ping_locked(
|
788
|
+
grpc_core::RefCountedPtr<grpc_chttp2_transport> t);
|
812
789
|
|
813
790
|
uint32_t grpc_chttp2_min_read_progress_size(grpc_chttp2_transport* t);
|
814
791
|
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <string>
|
26
26
|
|
27
27
|
#include "absl/base/attributes.h"
|
28
|
+
#include "absl/container/flat_hash_map.h"
|
28
29
|
#include "absl/status/status.h"
|
29
30
|
#include "absl/strings/str_cat.h"
|
30
31
|
#include "absl/strings/str_format.h"
|
@@ -46,14 +47,16 @@
|
|
46
47
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
47
48
|
#include "src/core/ext/transport/chttp2/transport/http_trace.h"
|
48
49
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
49
|
-
#include "src/core/ext/transport/chttp2/transport/
|
50
|
+
#include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h"
|
51
|
+
#include "src/core/lib/channel/call_tracer.h"
|
50
52
|
#include "src/core/lib/channel/channelz.h"
|
53
|
+
#include "src/core/lib/channel/context.h"
|
51
54
|
#include "src/core/lib/debug/trace.h"
|
52
55
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
53
56
|
#include "src/core/lib/gprpp/status_helper.h"
|
54
|
-
#include "src/core/lib/gprpp/time.h"
|
55
57
|
#include "src/core/lib/iomgr/closure.h"
|
56
58
|
#include "src/core/lib/iomgr/combiner.h"
|
59
|
+
#include "src/core/lib/iomgr/endpoint.h"
|
57
60
|
#include "src/core/lib/iomgr/error.h"
|
58
61
|
#include "src/core/lib/slice/slice.h"
|
59
62
|
#include "src/core/lib/transport/bdp_estimator.h"
|
@@ -64,6 +67,8 @@
|
|
64
67
|
|
65
68
|
using grpc_core::HPackParser;
|
66
69
|
|
70
|
+
grpc_core::TraceFlag grpc_trace_chttp2_new_stream(false, "chttp2_new_stream");
|
71
|
+
|
67
72
|
static grpc_error_handle init_frame_parser(grpc_chttp2_transport* t);
|
68
73
|
static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
69
74
|
int is_continuation);
|
@@ -507,8 +512,7 @@ static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
|
|
507
512
|
if (bdp_est) {
|
508
513
|
if (t->bdp_ping_blocked) {
|
509
514
|
t->bdp_ping_blocked = false;
|
510
|
-
|
511
|
-
schedule_bdp_ping_locked(t);
|
515
|
+
schedule_bdp_ping_locked(t->Ref());
|
512
516
|
}
|
513
517
|
bdp_est->AddIncomingBytes(t->incoming_frame_size);
|
514
518
|
}
|
@@ -546,7 +550,7 @@ error_handler:
|
|
546
550
|
t->incoming_stream = s;
|
547
551
|
t->parser = grpc_chttp2_transport::Parser{
|
548
552
|
"data", grpc_chttp2_data_parser_parse, nullptr};
|
549
|
-
t->
|
553
|
+
t->ping_rate_policy.ReceivedDataFrame();
|
550
554
|
return absl::OkStatus();
|
551
555
|
} else if (s != nullptr) {
|
552
556
|
// handle stream errors by closing the stream
|
@@ -585,7 +589,7 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
585
589
|
? HPackParser::Priority::Included
|
586
590
|
: HPackParser::Priority::None;
|
587
591
|
|
588
|
-
t->
|
592
|
+
t->ping_rate_policy.ReceivedDataFrame();
|
589
593
|
|
590
594
|
// could be a new grpc_chttp2_stream or an existing grpc_chttp2_stream
|
591
595
|
s = grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
|
@@ -620,11 +624,13 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
620
624
|
t->incoming_stream_id));
|
621
625
|
return init_header_skip_frame_parser(t, priority_type, is_eoh);
|
622
626
|
} else if (GPR_UNLIKELY(
|
623
|
-
|
627
|
+
t->stream_map.size() >=
|
624
628
|
t->settings[GRPC_ACKED_SETTINGS]
|
625
629
|
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS])) {
|
626
630
|
return GRPC_ERROR_CREATE("Max stream count exceeded");
|
627
|
-
} else if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT
|
631
|
+
} else if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT ||
|
632
|
+
t->sent_goaway_state ==
|
633
|
+
GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED) {
|
628
634
|
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
629
635
|
GPR_INFO,
|
630
636
|
"transport:%p SERVER peer:%s Final GOAWAY sent. Ignoring new "
|
@@ -641,6 +647,12 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
641
647
|
gpr_log(GPR_ERROR, "grpc_chttp2_stream not accepted"));
|
642
648
|
return init_header_skip_frame_parser(t, priority_type, is_eoh);
|
643
649
|
}
|
650
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
651
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_new_stream)) {
|
652
|
+
gpr_log(GPR_INFO, "[t:%p fd:%d peer:%s] Accepting new stream", t,
|
653
|
+
grpc_endpoint_get_fd(t->ep),
|
654
|
+
std::string(t->peer_string.as_string_view()).c_str());
|
655
|
+
}
|
644
656
|
if (t->channelz_socket != nullptr) {
|
645
657
|
t->channelz_socket->RecordStreamStartedFromRemote();
|
646
658
|
}
|
@@ -671,6 +683,7 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
671
683
|
}
|
672
684
|
s->parsed_trailers_only = true;
|
673
685
|
s->trailing_metadata_buffer.Set(grpc_core::GrpcTrailersOnly(), true);
|
686
|
+
s->initial_metadata_buffer.Set(grpc_core::GrpcTrailersOnly(), true);
|
674
687
|
incoming_metadata_buffer = &s->trailing_metadata_buffer;
|
675
688
|
frame_type = HPackParser::LogInfo::kTrailers;
|
676
689
|
} else {
|
@@ -829,7 +842,7 @@ static const maybe_complete_func_type maybe_complete_funcs[] = {
|
|
829
842
|
|
830
843
|
static void force_client_rst_stream(void* sp, grpc_error_handle /*error*/) {
|
831
844
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
|
832
|
-
grpc_chttp2_transport* t = s->t;
|
845
|
+
grpc_chttp2_transport* t = s->t.get();
|
833
846
|
if (!s->write_closed) {
|
834
847
|
grpc_chttp2_add_rst_stream_to_next_write(t, s->id, GRPC_HTTP2_NO_ERROR,
|
835
848
|
&s->stats.outgoing);
|
@@ -845,10 +858,18 @@ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
|
|
845
858
|
const grpc_slice& slice,
|
846
859
|
int is_last) {
|
847
860
|
auto* parser = static_cast<grpc_core::HPackParser*>(hpack_parser);
|
861
|
+
grpc_core::CallTracerAnnotationInterface* call_tracer = nullptr;
|
848
862
|
if (s != nullptr) {
|
849
863
|
s->stats.incoming.header_bytes += GRPC_SLICE_LENGTH(slice);
|
864
|
+
|
865
|
+
if (s->context != nullptr) {
|
866
|
+
call_tracer = static_cast<grpc_core::CallTracerAnnotationInterface*>(
|
867
|
+
static_cast<grpc_call_context_element*>(
|
868
|
+
s->context)[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE]
|
869
|
+
.value);
|
870
|
+
}
|
850
871
|
}
|
851
|
-
grpc_error_handle error = parser->Parse(slice, is_last != 0);
|
872
|
+
grpc_error_handle error = parser->Parse(slice, is_last != 0, call_tracer);
|
852
873
|
if (!error.ok()) {
|
853
874
|
return error;
|
854
875
|
}
|