grpc 1.82.0 → 1.83.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +8 -5
- data/etc/roots.pem +10400 -3855
- data/include/grpc/grpc_audit_logging.h +2 -2
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +23 -0
- data/src/core/call/call_filters.h +19 -3
- data/src/core/call/call_spine.h +4 -4
- data/src/core/call/client_call.cc +1 -1
- data/src/core/call/metadata.cc +7 -2
- data/src/core/call/server_call.cc +13 -3
- data/src/core/call/server_call.h +5 -3
- data/src/core/client_channel/backup_poller.cc +2 -17
- data/src/core/client_channel/client_channel.cc +17 -14
- data/src/core/client_channel/client_channel.h +3 -1
- data/src/core/client_channel/client_channel_filter.cc +11 -13
- data/src/core/client_channel/client_channel_service_config.cc +5 -13
- data/src/core/client_channel/direct_channel.cc +5 -1
- data/src/core/client_channel/direct_channel.h +3 -1
- data/src/core/config/experiment_env_var.cc +30 -0
- data/src/core/config/experiment_env_var.h +26 -0
- data/src/core/credentials/call/regional_access_boundary_fetcher.cc +6 -6
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +14 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.cc +172 -0
- data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +103 -0
- data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +3 -2
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +10 -3
- data/src/core/credentials/transport/tls/tls_security_connector.cc +14 -2
- data/src/core/credentials/transport/xds/xds_credentials.cc +4 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -13
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +11 -9
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame.cc +58 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +13 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/frame_security.cc +10 -1
- data/src/core/ext/transport/chttp2/transport/frame_security.h +2 -1
- data/src/core/ext/transport/chttp2/transport/goaway.cc +11 -1
- data/src/core/ext/transport/chttp2/transport/goaway.h +17 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +117 -276
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +44 -17
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +382 -496
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +75 -77
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +30 -11
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +24 -9
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +26 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +2 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +4 -10
- data/src/core/ext/transport/chttp2/transport/read_context.h +62 -20
- data/src/core/ext/transport/chttp2/transport/security_frame.h +1 -0
- data/src/core/ext/transport/chttp2/transport/stream.h +271 -120
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +77 -61
- data/src/core/handshaker/security/secure_endpoint.cc +0 -13
- data/src/core/lib/channel/promise_based_filter.cc +77 -3
- data/src/core/lib/channel/promise_based_filter.h +238 -184
- data/src/core/lib/event_engine/extensions/receive_coalescing_extension.h +0 -4
- data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +2 -12
- data/src/core/lib/event_engine/shim.cc +2 -16
- data/src/core/lib/event_engine/shim.h +0 -4
- data/src/core/lib/experiments/experiments.cc +51 -102
- data/src/core/lib/experiments/experiments.h +37 -59
- data/src/core/lib/iomgr/error.cc +3 -73
- data/src/core/lib/iomgr/error.h +8 -6
- data/src/core/lib/iomgr/error_cfstream.cc +1 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +2 -6
- data/src/core/lib/iomgr/ev_poll_posix.cc +2 -6
- data/src/core/lib/iomgr/tcp_posix.cc +2 -6
- data/src/core/lib/security/authorization/audit_logging.cc +2 -2
- data/src/core/lib/security/authorization/audit_logging.h +3 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +11 -13
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/matchers.cc +20 -20
- data/src/core/lib/security/authorization/matchers.h +15 -16
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/security/authorization/stdout_logger.h +6 -5
- data/src/core/lib/surface/call.cc +0 -8
- data/src/core/lib/surface/call.h +2 -0
- data/src/core/lib/surface/channel.cc +21 -2
- data/src/core/lib/surface/channel.h +14 -6
- data/src/core/lib/surface/filter_stack_call.cc +10 -29
- data/src/core/lib/surface/legacy_channel.cc +7 -7
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +13 -13
- data/src/core/lib/transport/bdp_estimator.h +9 -5
- data/src/core/lib/transport/error_utils.cc +26 -138
- data/src/core/lib/transport/promise_endpoint.h +2 -4
- data/src/core/load_balancing/grpclb/grpclb.cc +2 -1
- data/src/core/load_balancing/pick_first/pick_first.cc +33 -2
- data/src/core/load_balancing/pick_first/pick_first.h +6 -0
- data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -10
- data/src/core/load_balancing/rls/rls.cc +2 -1
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +2 -7
- data/src/core/load_balancing/xds/cds.cc +80 -56
- data/src/core/load_balancing/xds/cds.h +21 -0
- data/src/core/mitigation_engine/mitigation.h +53 -0
- data/src/core/mitigation_engine/mitigation_provider.h +62 -0
- data/src/core/resolver/dns/dns_resolver_plugin.cc +1 -6
- data/src/core/resolver/xds/xds_resolver.cc +14 -11
- data/src/core/server/server.h +1 -4
- data/src/core/server/server_config_selector.h +5 -4
- data/src/core/server/server_config_selector_filter.cc +67 -80
- data/src/core/server/xds_server_config_fetcher.cc +681 -692
- data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -12
- data/src/core/telemetry/call_tracer.cc +49 -2
- data/src/core/telemetry/call_tracer.h +1 -0
- data/src/core/telemetry/tcp_tracer.h +38 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/ssl_telemetry_utils.cc +343 -0
- data/src/core/tsi/ssl_telemetry_utils.h +74 -0
- data/src/core/tsi/ssl_transport_security.cc +577 -301
- data/src/core/tsi/ssl_transport_security.h +22 -6
- data/src/core/tsi/ssl_transport_security_utils.cc +2 -0
- data/src/core/tsi/transport_security.h +7 -0
- data/src/core/util/http_client/httpcli.cc +1 -4
- data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
- data/src/core/util/status_helper.cc +71 -192
- data/src/core/util/status_helper.h +16 -21
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +2 -11
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -7
- data/src/core/xds/grpc/xds_cluster_parser.cc +5 -16
- data/src/core/xds/grpc/xds_common_types.cc +94 -38
- data/src/core/xds/grpc/xds_common_types.h +33 -18
- data/src/core/xds/grpc/xds_common_types_parser.cc +168 -100
- data/src/core/xds/grpc/xds_common_types_parser.h +18 -1
- data/src/core/xds/grpc/xds_endpoint_parser.cc +6 -17
- data/src/core/xds/grpc/xds_http_filter_registry.cc +2 -10
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -12
- data/src/core/xds/grpc/xds_metadata_parser.cc +0 -2
- data/src/core/xds/grpc/xds_route_config_parser.cc +7 -11
- data/src/core/xds/grpc/xds_routing.cc +113 -82
- data/src/core/xds/grpc/xds_routing.h +70 -20
- data/src/core/xds/grpc/xds_server_grpc.cc +22 -13
- data/src/core/xds/grpc/xds_server_grpc.h +16 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +10 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +123 -18
- data/src/core/xds/grpc/xds_transport_grpc.h +28 -4
- data/src/core/xds/xds_client/lrs_client.cc +3 -7
- data/src/core/xds/xds_client/xds_bootstrap.cc +4 -16
- data/src/core/xds/xds_client/xds_client.cc +2 -15
- data/src/core/xds/xds_client/xds_transport.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -1
- metadata +9 -1
|
@@ -294,13 +294,14 @@ struct Http2FrameCountTracker {
|
|
|
294
294
|
http2::Http2Status ValidateSettingsValues(
|
|
295
295
|
std::vector<Http2SettingsFrame::Setting>& list);
|
|
296
296
|
|
|
297
|
+
// The checks in this function MUST be done before the frame payload is read.
|
|
297
298
|
http2::Http2Status ValidateFrameHeader(
|
|
298
299
|
const uint32_t max_frame_size_setting,
|
|
299
300
|
const bool incoming_header_in_progress,
|
|
300
301
|
const uint32_t incoming_header_stream_id,
|
|
301
302
|
const Http2FrameHeader& current_frame_header, const uint32_t last_stream_id,
|
|
302
303
|
const bool is_client, const bool is_first_settings_processed,
|
|
303
|
-
Http2FrameCountTracker& tracker);
|
|
304
|
+
Http2FrameCountTracker& tracker, const uint32_t max_security_frame_size);
|
|
304
305
|
|
|
305
306
|
///////////////////////////////////////////////////////////////////////////////
|
|
306
307
|
// RFC9113 Related Strings and Consts
|
|
@@ -424,6 +425,7 @@ inline constexpr uint32_t kHttp2InitialWindowSize = 65535u;
|
|
|
424
425
|
} // namespace RFC9113
|
|
425
426
|
|
|
426
427
|
namespace GrpcErrors {
|
|
428
|
+
|
|
427
429
|
inline constexpr absl::string_view kTooManyMetadata =
|
|
428
430
|
"gRPC Error : A gRPC server can send upto 1 initial metadata followed by "
|
|
429
431
|
"upto 1 trailing metadata.";
|
|
@@ -441,6 +443,16 @@ inline constexpr absl::string_view kFailedToEnqueueStream =
|
|
|
441
443
|
"gRPC Transport Error : Failed to enqueue stream to writable stream list";
|
|
442
444
|
inline constexpr absl::string_view kStreamCreationFailed =
|
|
443
445
|
"gRPC Transport Error : Stream creation failed";
|
|
446
|
+
|
|
447
|
+
inline constexpr uint32_t kDefaultMaxPendingInducedFrames = 10000u;
|
|
448
|
+
|
|
449
|
+
// Security frame related limits and errors
|
|
450
|
+
inline constexpr uint32_t kMaxSecurityFrameSize = 16u * 1024u;
|
|
451
|
+
inline constexpr int kMinMaxSecurityFrameSize = 0;
|
|
452
|
+
inline constexpr absl::string_view kSecurityFrameTooLarge =
|
|
453
|
+
"gRPC Transport Error : Security frame is larger than the maximum allowed "
|
|
454
|
+
"size : ";
|
|
455
|
+
|
|
444
456
|
} // namespace GrpcErrors
|
|
445
457
|
|
|
446
458
|
} // namespace grpc_core
|
|
@@ -132,10 +132,8 @@ grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
|
|
|
132
132
|
if (reason != static_cast<uint32_t>(Http2ErrorCode::kNoError) ||
|
|
133
133
|
s->trailing_metadata_buffer.empty()) {
|
|
134
134
|
error = grpc_error_set_int(
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
grpc_core::StatusStrProperty::kGrpcMessage,
|
|
138
|
-
absl::StrCat("Received RST_STREAM with error code ", reason)),
|
|
135
|
+
GRPC_ERROR_CREATE(absl::StrCat(
|
|
136
|
+
"RST_STREAM (Received RST_STREAM with error code ", reason, ")")),
|
|
139
137
|
grpc_core::StatusIntProperty::kHttp2Error,
|
|
140
138
|
static_cast<intptr_t>(reason));
|
|
141
139
|
}
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
#include "src/core/lib/transport/transport_framing_endpoint_extension.h"
|
|
28
28
|
#include "src/core/util/grpc_check.h"
|
|
29
29
|
#include "absl/status/status.h"
|
|
30
|
+
#include "absl/strings/str_cat.h"
|
|
30
31
|
|
|
31
32
|
absl::Status grpc_chttp2_security_frame_parser_parse(void* parser,
|
|
32
33
|
grpc_chttp2_transport* t,
|
|
@@ -52,7 +53,15 @@ absl::Status grpc_chttp2_security_frame_parser_parse(void* parser,
|
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
absl::Status grpc_chttp2_security_frame_parser_begin_frame(
|
|
55
|
-
grpc_chttp2_security_frame_parser* parser
|
|
56
|
+
grpc_chttp2_security_frame_parser* parser, const uint32_t length,
|
|
57
|
+
const uint32_t max_frame_size) {
|
|
58
|
+
if (GPR_UNLIKELY(length > max_frame_size &&
|
|
59
|
+
grpc_core::IsCustomFrameCheckEnabled())) {
|
|
60
|
+
return GRPC_ERROR_CREATE(absl::StrCat(
|
|
61
|
+
"gRPC Transport Error : Security frame is larger than the maximum "
|
|
62
|
+
"allowed size : ",
|
|
63
|
+
max_frame_size, ", Received size : ", length));
|
|
64
|
+
}
|
|
56
65
|
parser->payload.Clear();
|
|
57
66
|
return absl::OkStatus();
|
|
58
67
|
}
|
|
@@ -35,7 +35,8 @@ void grpc_chttp2_security_frame_create(grpc_slice_buffer* payload,
|
|
|
35
35
|
grpc_slice_buffer* frame);
|
|
36
36
|
|
|
37
37
|
absl::Status grpc_chttp2_security_frame_parser_begin_frame(
|
|
38
|
-
grpc_chttp2_security_frame_parser* parser
|
|
38
|
+
grpc_chttp2_security_frame_parser* parser, uint32_t length,
|
|
39
|
+
uint32_t max_frame_size);
|
|
39
40
|
|
|
40
41
|
grpc_error_handle grpc_chttp2_security_frame_parser_parse(
|
|
41
42
|
void* parser, grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
@@ -32,6 +32,7 @@ GoawayManager::GoawayManager(std::unique_ptr<GoawayInterface> goaway_interface)
|
|
|
32
32
|
std::optional<Http2Frame> GoawayManager::MaybeGetGoawayFrame() {
|
|
33
33
|
switch (context_->goaway_state) {
|
|
34
34
|
case GoawayState::kIdle:
|
|
35
|
+
case GoawayState::kInitialGracefulGoawaySent:
|
|
35
36
|
case GoawayState::kDone:
|
|
36
37
|
break;
|
|
37
38
|
case GoawayState::kInitialGracefulGoawayScheduled: {
|
|
@@ -85,9 +86,16 @@ void GoawayManager::Context::SentGoawayTransition() {
|
|
|
85
86
|
<< GoawayStateToString(goaway_state);
|
|
86
87
|
switch (goaway_state) {
|
|
87
88
|
case GoawayState::kIdle:
|
|
88
|
-
case GoawayState::
|
|
89
|
+
case GoawayState::kInitialGracefulGoawaySent:
|
|
89
90
|
case GoawayState::kDone:
|
|
90
91
|
break;
|
|
92
|
+
case GoawayState::kInitialGracefulGoawayScheduled: {
|
|
93
|
+
GRPC_HTTP2_GOAWAY_LOG
|
|
94
|
+
<< "Transitioning to kInitialGracefulGoawaySent from "
|
|
95
|
+
<< GoawayStateToString(goaway_state);
|
|
96
|
+
goaway_state = GoawayState::kInitialGracefulGoawaySent;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
91
99
|
case GoawayState::kFinalGracefulGoawayScheduled:
|
|
92
100
|
case GoawayState::kImmediateGoawayRequested: {
|
|
93
101
|
GRPC_HTTP2_GOAWAY_LOG << "Transitioning to kDone from "
|
|
@@ -109,6 +117,8 @@ std::string GoawayManager::Context::GoawayStateToString(
|
|
|
109
117
|
return "kIdle";
|
|
110
118
|
case GoawayState::kInitialGracefulGoawayScheduled:
|
|
111
119
|
return "kInitialGracefulGoawayScheduled";
|
|
120
|
+
case GoawayState::kInitialGracefulGoawaySent:
|
|
121
|
+
return "kInitialGracefulGoawaySent";
|
|
112
122
|
case GoawayState::kFinalGracefulGoawayScheduled:
|
|
113
123
|
return "kFinalGracefulGoawayScheduled";
|
|
114
124
|
case GoawayState::kImmediateGoawayRequested:
|
|
@@ -64,6 +64,8 @@ enum class GoawayState : uint8_t {
|
|
|
64
64
|
// Initial graceful GOAWAY is scheduled to be sent in the next transport write
|
|
65
65
|
// cycle.
|
|
66
66
|
kInitialGracefulGoawayScheduled,
|
|
67
|
+
// Initial graceful GOAWAY has been written on the wire.
|
|
68
|
+
kInitialGracefulGoawaySent,
|
|
67
69
|
// Final graceful GOAWAY is scheduled to be sent in the next transport write
|
|
68
70
|
// cycle. Sending this GOAWAY frame completes the graceful GOAWAY process and
|
|
69
71
|
// transitions the state to kDone.
|
|
@@ -161,6 +163,7 @@ class GoawayManager {
|
|
|
161
163
|
absl::Status TriggerWriteCycle();
|
|
162
164
|
|
|
163
165
|
GoawayState goaway_state = GoawayState::kIdle;
|
|
166
|
+
bool was_immediate = false;
|
|
164
167
|
std::unique_ptr<GoawayInterface> goaway_interface;
|
|
165
168
|
// TODO(akshitpatel) : [PH2][P4] : There is scope to make this
|
|
166
169
|
// IntractivityWaker.
|
|
@@ -222,6 +225,7 @@ class GoawayManager {
|
|
|
222
225
|
<< " -> "
|
|
223
226
|
"kImmediateGoawayRequested.";
|
|
224
227
|
|
|
228
|
+
ctx->was_immediate = true;
|
|
225
229
|
ctx->goaway_state = GoawayState::kImmediateGoawayRequested;
|
|
226
230
|
ctx->SetGoawayArgs(
|
|
227
231
|
/*error_code=*/static_cast<uint32_t>(error_code),
|
|
@@ -275,6 +279,7 @@ class GoawayManager {
|
|
|
275
279
|
<< " -> "
|
|
276
280
|
"kInitialGracefulGoawayScheduled.";
|
|
277
281
|
GRPC_DCHECK(error_code == Http2ErrorCode::kNoError);
|
|
282
|
+
ctx->was_immediate = false;
|
|
278
283
|
ctx->goaway_state = GoawayState::kInitialGracefulGoawayScheduled;
|
|
279
284
|
ctx->SetGoawayArgs(
|
|
280
285
|
/*error_code=*/static_cast<uint32_t>(Http2ErrorCode::kNoError),
|
|
@@ -290,7 +295,7 @@ class GoawayManager {
|
|
|
290
295
|
<< "Ping resolved. Current state: "
|
|
291
296
|
<< ctx->GoawayStateToString(ctx->goaway_state);
|
|
292
297
|
if (ctx->goaway_state ==
|
|
293
|
-
GoawayState::
|
|
298
|
+
GoawayState::kInitialGracefulGoawaySent) {
|
|
294
299
|
GRPC_HTTP2_GOAWAY_LOG
|
|
295
300
|
<< " [Graceful GOAWAY] state change "
|
|
296
301
|
<< ctx->GoawayStateToString(ctx->goaway_state)
|
|
@@ -349,6 +354,17 @@ class GoawayManager {
|
|
|
349
354
|
return context_->goaway_state == GoawayState::kImmediateGoawayRequested;
|
|
350
355
|
}
|
|
351
356
|
|
|
357
|
+
bool IsFinalGracefulGoawayScheduledOrSent() const {
|
|
358
|
+
return (context_->goaway_state ==
|
|
359
|
+
GoawayState::kFinalGracefulGoawayScheduled) ||
|
|
360
|
+
IsFinalGracefulGoawaySent();
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
bool IsFinalGracefulGoawaySent() const {
|
|
364
|
+
return context_->goaway_state == GoawayState::kDone &&
|
|
365
|
+
!context_->was_immediate;
|
|
366
|
+
}
|
|
367
|
+
|
|
352
368
|
// Called from the transport write cycle to notify the GOAWAY manager that a
|
|
353
369
|
// GOAWAY frame may have been sent. If a GOAWAY frame is sent in current
|
|
354
370
|
// write cycle, this function handles the needed state transition.
|
|
@@ -996,6 +996,15 @@ class HPackParser::Parser {
|
|
|
996
996
|
}
|
|
997
997
|
}
|
|
998
998
|
auto value_slice = value.value.Take();
|
|
999
|
+
if (IsOptimization05Enabled() && !state_.is_binary_header &&
|
|
1000
|
+
state_.field_error.ok()) {
|
|
1001
|
+
auto r =
|
|
1002
|
+
ValidateNonBinaryHeaderValueIsLegal(value_slice.as_string_view());
|
|
1003
|
+
if (r != ValidateMetadataResult::kOk) {
|
|
1004
|
+
input_->SetErrorAndContinueParsing(
|
|
1005
|
+
HpackParseResult::InvalidMetadataError(r, key_string));
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
999
1008
|
const auto transport_size =
|
|
1000
1009
|
key_string.size() + value.wire_size + hpack_constants::kEntryOverhead;
|
|
1001
1010
|
if (state_.mitigation_engine != nullptr) {
|