grpc 1.60.2 → 1.61.0.pre2
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 +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
@@ -22,43 +22,133 @@
|
|
22
22
|
|
23
23
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
24
24
|
|
25
|
+
#include "absl/strings/str_cat.h"
|
26
|
+
|
27
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
25
28
|
#include "src/core/lib/gpr/useful.h"
|
26
29
|
#include "src/core/lib/transport/http2_errors.h"
|
27
30
|
|
28
|
-
|
31
|
+
namespace grpc_core {
|
32
|
+
|
33
|
+
void Http2Settings::Diff(
|
34
|
+
bool is_first_send, const Http2Settings& old,
|
35
|
+
absl::FunctionRef<void(uint16_t key, uint32_t value)> cb) const {
|
36
|
+
if (header_table_size_ != old.header_table_size_) {
|
37
|
+
cb(kHeaderTableSizeWireId, header_table_size_);
|
38
|
+
}
|
39
|
+
if (enable_push_ != old.enable_push_) {
|
40
|
+
cb(kEnablePushWireId, enable_push_);
|
41
|
+
}
|
42
|
+
if (max_concurrent_streams_ != old.max_concurrent_streams_) {
|
43
|
+
cb(kMaxConcurrentStreamsWireId, max_concurrent_streams_);
|
44
|
+
}
|
45
|
+
if (is_first_send || initial_window_size_ != old.initial_window_size_) {
|
46
|
+
cb(kInitialWindowSizeWireId, initial_window_size_);
|
47
|
+
}
|
48
|
+
if (max_frame_size_ != old.max_frame_size_) {
|
49
|
+
cb(kMaxFrameSizeWireId, max_frame_size_);
|
50
|
+
}
|
51
|
+
if (max_header_list_size_ != old.max_header_list_size_) {
|
52
|
+
cb(kMaxHeaderListSizeWireId, max_header_list_size_);
|
53
|
+
}
|
54
|
+
if (allow_true_binary_metadata_ != old.allow_true_binary_metadata_) {
|
55
|
+
cb(kGrpcAllowTrueBinaryMetadataWireId, allow_true_binary_metadata_);
|
56
|
+
}
|
57
|
+
if (preferred_receive_crypto_message_size_ !=
|
58
|
+
old.preferred_receive_crypto_message_size_) {
|
59
|
+
cb(kGrpcPreferredReceiveCryptoFrameSizeWireId,
|
60
|
+
preferred_receive_crypto_message_size_);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
std::string Http2Settings::WireIdToName(uint16_t wire_id) {
|
65
|
+
switch (wire_id) {
|
66
|
+
case kHeaderTableSizeWireId:
|
67
|
+
return std::string(header_table_size_name());
|
68
|
+
case kEnablePushWireId:
|
69
|
+
return std::string(enable_push_name());
|
70
|
+
case kMaxConcurrentStreamsWireId:
|
71
|
+
return std::string(max_concurrent_streams_name());
|
72
|
+
case kInitialWindowSizeWireId:
|
73
|
+
return std::string(initial_window_size_name());
|
74
|
+
case kMaxFrameSizeWireId:
|
75
|
+
return std::string(max_frame_size_name());
|
76
|
+
case kMaxHeaderListSizeWireId:
|
77
|
+
return std::string(max_header_list_size_name());
|
78
|
+
case kGrpcAllowTrueBinaryMetadataWireId:
|
79
|
+
return std::string(allow_true_binary_metadata_name());
|
80
|
+
case kGrpcPreferredReceiveCryptoFrameSizeWireId:
|
81
|
+
return std::string(preferred_receive_crypto_message_size_name());
|
82
|
+
default:
|
83
|
+
return absl::StrCat("UNKNOWN (", wire_id, ")");
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
grpc_http2_error_code Http2Settings::Apply(uint16_t key, uint32_t value) {
|
88
|
+
switch (key) {
|
89
|
+
case kHeaderTableSizeWireId:
|
90
|
+
header_table_size_ = value;
|
91
|
+
break;
|
92
|
+
case kEnablePushWireId:
|
93
|
+
if (value > 1) return GRPC_HTTP2_PROTOCOL_ERROR;
|
94
|
+
enable_push_ = value != 0;
|
95
|
+
break;
|
96
|
+
case kMaxConcurrentStreamsWireId:
|
97
|
+
max_concurrent_streams_ = value;
|
98
|
+
break;
|
99
|
+
case kInitialWindowSizeWireId:
|
100
|
+
if (value > max_initial_window_size()) {
|
101
|
+
return GRPC_HTTP2_FLOW_CONTROL_ERROR;
|
102
|
+
}
|
103
|
+
initial_window_size_ = value;
|
104
|
+
break;
|
105
|
+
case kMaxFrameSizeWireId:
|
106
|
+
if (value < min_max_frame_size() || value > max_max_frame_size()) {
|
107
|
+
return GRPC_HTTP2_PROTOCOL_ERROR;
|
108
|
+
}
|
109
|
+
max_frame_size_ = value;
|
110
|
+
break;
|
111
|
+
case kMaxHeaderListSizeWireId:
|
112
|
+
max_header_list_size_ = std::min(value, 16777216u);
|
113
|
+
break;
|
114
|
+
case kGrpcAllowTrueBinaryMetadataWireId:
|
115
|
+
if (value > 1) return GRPC_HTTP2_PROTOCOL_ERROR;
|
116
|
+
allow_true_binary_metadata_ = value != 0;
|
117
|
+
break;
|
118
|
+
case kGrpcPreferredReceiveCryptoFrameSizeWireId:
|
119
|
+
preferred_receive_crypto_message_size_ =
|
120
|
+
Clamp(value, min_preferred_receive_crypto_message_size(),
|
121
|
+
max_preferred_receive_crypto_message_size());
|
122
|
+
break;
|
123
|
+
}
|
124
|
+
return GRPC_HTTP2_NO_ERROR;
|
125
|
+
}
|
29
126
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
127
|
+
absl::optional<Http2SettingsFrame> Http2SettingsManager::MaybeSendUpdate() {
|
128
|
+
switch (update_state_) {
|
129
|
+
case UpdateState::kSending:
|
130
|
+
return absl::nullopt;
|
131
|
+
case UpdateState::kIdle:
|
132
|
+
if (local_ == sent_) return absl::nullopt;
|
133
|
+
break;
|
134
|
+
case UpdateState::kFirst:
|
38
135
|
break;
|
39
136
|
}
|
40
|
-
|
41
|
-
|
42
|
-
|
137
|
+
Http2SettingsFrame frame;
|
138
|
+
local_.Diff(update_state_ == UpdateState::kFirst, sent_,
|
139
|
+
[&frame](uint16_t key, uint32_t value) {
|
140
|
+
frame.settings.emplace_back(key, value);
|
141
|
+
});
|
142
|
+
sent_ = local_;
|
143
|
+
update_state_ = UpdateState::kSending;
|
144
|
+
return frame;
|
145
|
+
}
|
146
|
+
|
147
|
+
bool Http2SettingsManager::AckLastSend() {
|
148
|
+
if (update_state_ != UpdateState::kSending) return false;
|
149
|
+
update_state_ = UpdateState::kIdle;
|
150
|
+
acked_ = sent_;
|
151
|
+
return true;
|
43
152
|
}
|
44
153
|
|
45
|
-
|
46
|
-
grpc_chttp2_settings_parameters[GRPC_CHTTP2_NUM_SETTINGS] = {
|
47
|
-
{"HEADER_TABLE_SIZE", 4096u, 0u, 4294967295u,
|
48
|
-
GRPC_CHTTP2_CLAMP_INVALID_VALUE, GRPC_HTTP2_PROTOCOL_ERROR},
|
49
|
-
{"ENABLE_PUSH", 1u, 0u, 1u, GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE,
|
50
|
-
GRPC_HTTP2_PROTOCOL_ERROR},
|
51
|
-
{"MAX_CONCURRENT_STREAMS", 4294967295u, 0u, 4294967295u,
|
52
|
-
GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE, GRPC_HTTP2_PROTOCOL_ERROR},
|
53
|
-
{"INITIAL_WINDOW_SIZE", 65535u, 0u, 2147483647u,
|
54
|
-
GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE,
|
55
|
-
GRPC_HTTP2_FLOW_CONTROL_ERROR},
|
56
|
-
{"MAX_FRAME_SIZE", 16384u, 16384u, 16777215u,
|
57
|
-
GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE, GRPC_HTTP2_PROTOCOL_ERROR},
|
58
|
-
{"MAX_HEADER_LIST_SIZE", 16777216u, 0u, 16777216u,
|
59
|
-
GRPC_CHTTP2_CLAMP_INVALID_VALUE, GRPC_HTTP2_PROTOCOL_ERROR},
|
60
|
-
{"GRPC_ALLOW_TRUE_BINARY_METADATA", 0u, 0u, 1u,
|
61
|
-
GRPC_CHTTP2_CLAMP_INVALID_VALUE, GRPC_HTTP2_PROTOCOL_ERROR},
|
62
|
-
{"GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE", 0u, 16384u, 2147483647u,
|
63
|
-
GRPC_CHTTP2_CLAMP_INVALID_VALUE, GRPC_HTTP2_PROTOCOL_ERROR},
|
64
|
-
};
|
154
|
+
} // namespace grpc_core
|
@@ -14,10 +14,6 @@
|
|
14
14
|
// limitations under the License.
|
15
15
|
//
|
16
16
|
|
17
|
-
//
|
18
|
-
// Automatically generated by tools/codegen/core/gen_settings_ids.py
|
19
|
-
//
|
20
|
-
|
21
17
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_H
|
22
18
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_H
|
23
19
|
|
@@ -25,38 +21,147 @@
|
|
25
21
|
|
26
22
|
#include <stdint.h>
|
27
23
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
24
|
+
#include <cstdint>
|
25
|
+
|
26
|
+
#include "absl/functional/function_ref.h"
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
#include "absl/types/optional.h"
|
29
|
+
|
30
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
31
|
+
#include "src/core/lib/gpr/useful.h"
|
32
|
+
#include "src/core/lib/transport/http2_errors.h"
|
33
|
+
|
34
|
+
namespace grpc_core {
|
35
|
+
|
36
|
+
class Http2Settings {
|
37
|
+
public:
|
38
|
+
enum : uint16_t {
|
39
|
+
kHeaderTableSizeWireId = 1,
|
40
|
+
kEnablePushWireId = 2,
|
41
|
+
kMaxConcurrentStreamsWireId = 3,
|
42
|
+
kInitialWindowSizeWireId = 4,
|
43
|
+
kMaxFrameSizeWireId = 5,
|
44
|
+
kMaxHeaderListSizeWireId = 6,
|
45
|
+
kGrpcAllowTrueBinaryMetadataWireId = 65027,
|
46
|
+
kGrpcPreferredReceiveCryptoFrameSizeWireId = 65028,
|
47
|
+
};
|
48
|
+
|
49
|
+
void Diff(bool is_first_send, const Http2Settings& old,
|
50
|
+
absl::FunctionRef<void(uint16_t key, uint32_t value)> cb) const;
|
51
|
+
GRPC_MUST_USE_RESULT grpc_http2_error_code Apply(uint16_t key,
|
52
|
+
uint32_t value);
|
53
|
+
uint32_t header_table_size() const { return header_table_size_; }
|
54
|
+
uint32_t max_concurrent_streams() const { return max_concurrent_streams_; }
|
55
|
+
uint32_t initial_window_size() const { return initial_window_size_; }
|
56
|
+
uint32_t max_frame_size() const { return max_frame_size_; }
|
57
|
+
uint32_t max_header_list_size() const { return max_header_list_size_; }
|
58
|
+
uint32_t preferred_receive_crypto_message_size() const {
|
59
|
+
return preferred_receive_crypto_message_size_;
|
60
|
+
}
|
61
|
+
bool enable_push() const { return enable_push_; }
|
62
|
+
bool allow_true_binary_metadata() const {
|
63
|
+
return allow_true_binary_metadata_;
|
64
|
+
}
|
65
|
+
|
66
|
+
void SetHeaderTableSize(uint32_t x) { header_table_size_ = x; }
|
67
|
+
void SetMaxConcurrentStreams(uint32_t x) { max_concurrent_streams_ = x; }
|
68
|
+
void SetInitialWindowSize(uint32_t x) {
|
69
|
+
initial_window_size_ = std::min(x, max_initial_window_size());
|
70
|
+
}
|
71
|
+
void SetEnablePush(bool x) { enable_push_ = x; }
|
72
|
+
void SetMaxHeaderListSize(uint32_t x) {
|
73
|
+
max_header_list_size_ = std::min(x, 16777216u);
|
74
|
+
}
|
75
|
+
void SetAllowTrueBinaryMetadata(bool x) { allow_true_binary_metadata_ = x; }
|
76
|
+
void SetMaxFrameSize(uint32_t x) {
|
77
|
+
max_frame_size_ = Clamp(x, min_max_frame_size(), max_max_frame_size());
|
78
|
+
}
|
79
|
+
void SetPreferredReceiveCryptoMessageSize(uint32_t x) {
|
80
|
+
preferred_receive_crypto_message_size_ =
|
81
|
+
Clamp(x, min_preferred_receive_crypto_message_size(),
|
82
|
+
max_preferred_receive_crypto_message_size());
|
83
|
+
}
|
84
|
+
|
85
|
+
static absl::string_view header_table_size_name() {
|
86
|
+
return "HEADER_TABLE_SIZE";
|
87
|
+
}
|
88
|
+
static absl::string_view max_concurrent_streams_name() {
|
89
|
+
return "MAX_CONCURRENT_STREAMS";
|
90
|
+
}
|
91
|
+
static absl::string_view initial_window_size_name() {
|
92
|
+
return "INITIAL_WINDOW_SIZE";
|
93
|
+
}
|
94
|
+
static absl::string_view max_frame_size_name() { return "MAX_FRAME_SIZE"; }
|
95
|
+
static absl::string_view max_header_list_size_name() {
|
96
|
+
return "MAX_HEADER_LIST_SIZE";
|
97
|
+
}
|
98
|
+
static absl::string_view enable_push_name() { return "ENABLE_PUSH"; }
|
99
|
+
static absl::string_view allow_true_binary_metadata_name() {
|
100
|
+
return "GRPC_ALLOW_TRUE_BINARY_METADATA";
|
101
|
+
}
|
102
|
+
static absl::string_view preferred_receive_crypto_message_size_name() {
|
103
|
+
return "GRPC_PREFERRED_RECEIVE_MESSAGE_SIZE";
|
104
|
+
}
|
105
|
+
|
106
|
+
static uint32_t max_initial_window_size() { return 2147483647u; }
|
107
|
+
static uint32_t max_max_frame_size() { return 16777215u; }
|
108
|
+
static uint32_t min_max_frame_size() { return 16384u; }
|
109
|
+
static uint32_t min_preferred_receive_crypto_message_size() { return 16384u; }
|
110
|
+
static uint32_t max_preferred_receive_crypto_message_size() {
|
111
|
+
return 2147483647u;
|
112
|
+
}
|
113
|
+
|
114
|
+
static std::string WireIdToName(uint16_t wire_id);
|
115
|
+
|
116
|
+
bool operator==(const Http2Settings& rhs) const {
|
117
|
+
return header_table_size_ == rhs.header_table_size_ &&
|
118
|
+
max_concurrent_streams_ == rhs.max_concurrent_streams_ &&
|
119
|
+
initial_window_size_ == rhs.initial_window_size_ &&
|
120
|
+
max_frame_size_ == rhs.max_frame_size_ &&
|
121
|
+
max_header_list_size_ == rhs.max_header_list_size_ &&
|
122
|
+
preferred_receive_crypto_message_size_ ==
|
123
|
+
rhs.preferred_receive_crypto_message_size_ &&
|
124
|
+
enable_push_ == rhs.enable_push_ &&
|
125
|
+
allow_true_binary_metadata_ == rhs.allow_true_binary_metadata_;
|
126
|
+
}
|
127
|
+
|
128
|
+
bool operator!=(const Http2Settings& rhs) const { return !operator==(rhs); }
|
129
|
+
|
130
|
+
private:
|
131
|
+
uint32_t header_table_size_ = 4096;
|
132
|
+
uint32_t max_concurrent_streams_ = 4294967295u;
|
133
|
+
uint32_t initial_window_size_ = 65535u;
|
134
|
+
uint32_t max_frame_size_ = 16384u;
|
135
|
+
uint32_t max_header_list_size_ = 16777216u;
|
136
|
+
uint32_t preferred_receive_crypto_message_size_ = 0u;
|
137
|
+
bool enable_push_ = true;
|
138
|
+
bool allow_true_binary_metadata_ = false;
|
139
|
+
};
|
140
|
+
|
141
|
+
class Http2SettingsManager {
|
142
|
+
public:
|
143
|
+
Http2Settings& mutable_local() { return local_; }
|
144
|
+
const Http2Settings& local() const { return local_; }
|
145
|
+
const Http2Settings& acked() const { return acked_; }
|
146
|
+
Http2Settings& mutable_peer() { return peer_; }
|
147
|
+
const Http2Settings& peer() const { return peer_; }
|
148
|
+
|
149
|
+
absl::optional<Http2SettingsFrame> MaybeSendUpdate();
|
150
|
+
GRPC_MUST_USE_RESULT bool AckLastSend();
|
151
|
+
|
152
|
+
private:
|
153
|
+
enum class UpdateState : uint8_t {
|
154
|
+
kFirst,
|
155
|
+
kSending,
|
156
|
+
kIdle,
|
157
|
+
};
|
158
|
+
UpdateState update_state_ = UpdateState::kFirst;
|
159
|
+
Http2Settings local_;
|
160
|
+
Http2Settings sent_;
|
161
|
+
Http2Settings peer_;
|
162
|
+
Http2Settings acked_;
|
163
|
+
};
|
164
|
+
|
165
|
+
} // namespace grpc_core
|
61
166
|
|
62
167
|
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_H
|
@@ -203,18 +203,6 @@ struct grpc_chttp2_stream_link {
|
|
203
203
|
grpc_chttp2_stream* next;
|
204
204
|
grpc_chttp2_stream* prev;
|
205
205
|
};
|
206
|
-
// We keep several sets of connection wide parameters
|
207
|
-
typedef enum {
|
208
|
-
// The settings our peer has asked for (and we have acked)
|
209
|
-
GRPC_PEER_SETTINGS = 0,
|
210
|
-
// The settings we'd like to have
|
211
|
-
GRPC_LOCAL_SETTINGS,
|
212
|
-
// The settings we've published to our peer
|
213
|
-
GRPC_SENT_SETTINGS,
|
214
|
-
// The settings the peer has acked
|
215
|
-
GRPC_ACKED_SETTINGS,
|
216
|
-
GRPC_NUM_SETTING_SETS
|
217
|
-
} grpc_chttp2_setting_set;
|
218
206
|
|
219
207
|
typedef enum {
|
220
208
|
GRPC_CHTTP2_NO_GOAWAY_SEND,
|
@@ -359,12 +347,8 @@ struct grpc_chttp2_transport final
|
|
359
347
|
|
360
348
|
grpc_chttp2_sent_goaway_state sent_goaway_state = GRPC_CHTTP2_NO_GOAWAY_SEND;
|
361
349
|
|
362
|
-
/// bitmask of setting indexes to send out
|
363
|
-
/// Hack: it's common for implementations to assume 65536 bytes initial send
|
364
|
-
/// window -- this should by rights be 0
|
365
|
-
uint32_t force_send_settings = 1 << GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
|
366
350
|
/// settings values
|
367
|
-
|
351
|
+
grpc_core::Http2SettingsManager settings;
|
368
352
|
|
369
353
|
grpc_event_engine::experimental::EventEngine::TaskHandle
|
370
354
|
settings_ack_watchdog =
|
@@ -538,11 +522,6 @@ struct grpc_chttp2_transport final
|
|
538
522
|
/// is this a client?
|
539
523
|
bool is_client;
|
540
524
|
|
541
|
-
/// are the local settings dirty and need to be sent?
|
542
|
-
bool dirtied_local_settings = true;
|
543
|
-
/// have local settings been sent?
|
544
|
-
bool sent_local_settings = false;
|
545
|
-
|
546
525
|
/// If start_bdp_ping_locked has been called
|
547
526
|
bool bdp_ping_started = false;
|
548
527
|
// True if pings should be acked
|
@@ -357,13 +357,10 @@ absl::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
357
357
|
}
|
358
358
|
goto dts_fh_0; // loop
|
359
359
|
} else if (t->incoming_frame_size >
|
360
|
-
t->settings
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
t->incoming_frame_size,
|
365
|
-
t->settings[GRPC_ACKED_SETTINGS]
|
366
|
-
[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]));
|
360
|
+
t->settings.acked().max_frame_size()) {
|
361
|
+
return GRPC_ERROR_CREATE(absl::StrFormat(
|
362
|
+
"Frame size %d is larger than max frame size %d",
|
363
|
+
t->incoming_frame_size, t->settings.acked().max_frame_size()));
|
367
364
|
}
|
368
365
|
if (++cur == end) {
|
369
366
|
return absl::OkStatus();
|
@@ -395,8 +392,7 @@ absl::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
395
392
|
}
|
396
393
|
cur += t->incoming_frame_size;
|
397
394
|
t->incoming_stream = nullptr;
|
398
|
-
if (t->incoming_frame_type == GRPC_CHTTP2_FRAME_RST_STREAM
|
399
|
-
grpc_core::IsChttp2OffloadOnRstStreamEnabled()) {
|
395
|
+
if (t->incoming_frame_type == GRPC_CHTTP2_FRAME_RST_STREAM) {
|
400
396
|
requests_started = std::numeric_limits<size_t>::max();
|
401
397
|
}
|
402
398
|
goto dts_fh_0; // loop
|
@@ -506,8 +502,7 @@ static grpc_error_handle init_header_skip_frame_parser(
|
|
506
502
|
/*metadata_size_soft_limit=*/
|
507
503
|
t->max_header_list_size_soft_limit,
|
508
504
|
/*metadata_size_hard_limit=*/
|
509
|
-
t->settings
|
510
|
-
[GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE],
|
505
|
+
t->settings.acked().max_header_list_size(),
|
511
506
|
hpack_boundary_type(t, is_eoh), priority_type,
|
512
507
|
hpack_parser_log_info(t, HPackParser::LogInfo::kDontKnow));
|
513
508
|
return absl::OkStatus();
|
@@ -647,10 +642,8 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
647
642
|
"ignoring grpc_chttp2_stream with non-client generated index %d",
|
648
643
|
t->incoming_stream_id));
|
649
644
|
return init_header_skip_frame_parser(t, priority_type, is_eoh);
|
650
|
-
} else if (GPR_UNLIKELY(
|
651
|
-
|
652
|
-
t->settings[GRPC_ACKED_SETTINGS]
|
653
|
-
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS])) {
|
645
|
+
} else if (GPR_UNLIKELY(t->stream_map.size() + t->extra_streams >=
|
646
|
+
t->settings.acked().max_concurrent_streams())) {
|
654
647
|
if (grpc_core::IsRfcMaxConcurrentStreamsEnabled()) {
|
655
648
|
++t->num_pending_induced_frames;
|
656
649
|
grpc_slice_buffer_add(
|
@@ -675,13 +668,11 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
675
668
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
|
676
669
|
return init_header_skip_frame_parser(t, priority_type, is_eoh);
|
677
670
|
} else if (GPR_UNLIKELY(
|
678
|
-
grpc_core::IsRedMaxConcurrentStreamsEnabled() &&
|
679
671
|
t->stream_map.size() >=
|
680
672
|
t->max_concurrent_streams_policy.AdvertiseValue() &&
|
681
673
|
grpc_core::RandomEarlyDetection(
|
682
674
|
t->max_concurrent_streams_policy.AdvertiseValue(),
|
683
|
-
t->settings
|
684
|
-
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS])
|
675
|
+
t->settings.acked().max_concurrent_streams())
|
685
676
|
.Reject(t->stream_map.size(), t->bitgen))) {
|
686
677
|
// We are under the limit of max concurrent streams for the current
|
687
678
|
// setting, but are over the next value that will be advertised.
|
@@ -702,8 +693,7 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
702
693
|
t, std::string(t->peer_string.as_string_view()).c_str(),
|
703
694
|
t->incoming_stream_id, t->last_new_stream_id));
|
704
695
|
return init_header_skip_frame_parser(t, priority_type, is_eoh);
|
705
|
-
} else if (
|
706
|
-
t->num_incoming_streams_before_settings_ack == 0) {
|
696
|
+
} else if (t->num_incoming_streams_before_settings_ack == 0) {
|
707
697
|
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
708
698
|
GPR_ERROR,
|
709
699
|
"transport:%p SERVER peer:%s rejecting grpc_chttp2_stream id=%d, "
|
@@ -791,15 +781,13 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
791
781
|
return GRPC_ERROR_CREATE(
|
792
782
|
"Trailing metadata frame received without an end-o-stream");
|
793
783
|
}
|
794
|
-
t->hpack_parser.BeginFrame(
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
hpack_boundary_type(t, is_eoh), priority_type,
|
802
|
-
hpack_parser_log_info(t, frame_type));
|
784
|
+
t->hpack_parser.BeginFrame(incoming_metadata_buffer,
|
785
|
+
/*metadata_size_soft_limit=*/
|
786
|
+
t->max_header_list_size_soft_limit,
|
787
|
+
/*metadata_size_hard_limit=*/
|
788
|
+
t->settings.acked().max_header_list_size(),
|
789
|
+
hpack_boundary_type(t, is_eoh), priority_type,
|
790
|
+
hpack_parser_log_info(t, frame_type));
|
803
791
|
return absl::OkStatus();
|
804
792
|
}
|
805
793
|
|
@@ -870,21 +858,20 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
|
|
870
858
|
|
871
859
|
grpc_error_handle err = grpc_chttp2_settings_parser_begin_frame(
|
872
860
|
&t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
|
873
|
-
t->settings
|
861
|
+
t->settings.mutable_peer());
|
874
862
|
if (!err.ok()) {
|
875
863
|
return err;
|
876
864
|
}
|
877
865
|
if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
|
878
866
|
t->max_concurrent_streams_policy.AckLastSend();
|
879
|
-
|
880
|
-
|
867
|
+
if (!t->settings.AckLastSend()) {
|
868
|
+
return GRPC_ERROR_CREATE("Received unexpected settings ack");
|
869
|
+
}
|
881
870
|
t->hpack_parser.hpack_table()->SetMaxBytes(
|
882
|
-
t->settings
|
883
|
-
[GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
|
871
|
+
t->settings.acked().header_table_size());
|
884
872
|
grpc_chttp2_act_on_flowctl_action(
|
885
873
|
t->flow_control.SetAckedInitialWindow(
|
886
|
-
t->settings
|
887
|
-
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]),
|
874
|
+
t->settings.acked().initial_window_size()),
|
888
875
|
t, nullptr);
|
889
876
|
if (t->settings_ack_watchdog !=
|
890
877
|
grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid) {
|
@@ -892,7 +879,6 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
|
|
892
879
|
t->settings_ack_watchdog,
|
893
880
|
grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid));
|
894
881
|
}
|
895
|
-
t->sent_local_settings = false;
|
896
882
|
// This is more streams than can be started in http2, so setting this
|
897
883
|
// effictively removes the limit for the rest of the connection.
|
898
884
|
t->num_incoming_streams_before_settings_ack =
|