aboutsummaryrefslogtreecommitdiff
path: root/src/core/ext/transport/chttp2/transport/parsing.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ext/transport/chttp2/transport/parsing.cc')
-rw-r--r--src/core/ext/transport/chttp2/transport/parsing.cc53
1 files changed, 21 insertions, 32 deletions
diff --git a/src/core/ext/transport/chttp2/transport/parsing.cc b/src/core/ext/transport/chttp2/transport/parsing.cc
index 7ccdffee98..f2f5e7dc53 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.cc
+++ b/src/core/ext/transport/chttp2/transport/parsing.cc
@@ -357,13 +357,10 @@ absl::variant<size_t, absl::Status> grpc_chttp2_perform_read(
}
goto dts_fh_0; // loop
} else if (t->incoming_frame_size >
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
- return GRPC_ERROR_CREATE(
- absl::StrFormat("Frame size %d is larger than max frame size %d",
- t->incoming_frame_size,
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]));
+ t->settings.acked().max_frame_size()) {
+ return GRPC_ERROR_CREATE(absl::StrFormat(
+ "Frame size %d is larger than max frame size %d",
+ t->incoming_frame_size, t->settings.acked().max_frame_size()));
}
if (++cur == end) {
return absl::OkStatus();
@@ -505,8 +502,7 @@ static grpc_error_handle init_header_skip_frame_parser(
/*metadata_size_soft_limit=*/
t->max_header_list_size_soft_limit,
/*metadata_size_hard_limit=*/
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE],
+ t->settings.acked().max_header_list_size(),
hpack_boundary_type(t, is_eoh), priority_type,
hpack_parser_log_info(t, HPackParser::LogInfo::kDontKnow));
return absl::OkStatus();
@@ -646,10 +642,8 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
"ignoring grpc_chttp2_stream with non-client generated index %d",
t->incoming_stream_id));
return init_header_skip_frame_parser(t, priority_type, is_eoh);
- } else if (GPR_UNLIKELY(
- t->stream_map.size() + t->extra_streams >=
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS])) {
+ } else if (GPR_UNLIKELY(t->stream_map.size() + t->extra_streams >=
+ t->settings.acked().max_concurrent_streams())) {
if (grpc_core::IsRfcMaxConcurrentStreamsEnabled()) {
++t->num_pending_induced_frames;
grpc_slice_buffer_add(
@@ -678,8 +672,7 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
t->max_concurrent_streams_policy.AdvertiseValue() &&
grpc_core::RandomEarlyDetection(
t->max_concurrent_streams_policy.AdvertiseValue(),
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS])
+ t->settings.acked().max_concurrent_streams())
.Reject(t->stream_map.size(), t->bitgen))) {
// We are under the limit of max concurrent streams for the current
// setting, but are over the next value that will be advertised.
@@ -788,15 +781,13 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
return GRPC_ERROR_CREATE(
"Trailing metadata frame received without an end-o-stream");
}
- t->hpack_parser.BeginFrame(
- incoming_metadata_buffer,
- /*metadata_size_soft_limit=*/
- t->max_header_list_size_soft_limit,
- /*metadata_size_hard_limit=*/
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE],
- hpack_boundary_type(t, is_eoh), priority_type,
- hpack_parser_log_info(t, frame_type));
+ t->hpack_parser.BeginFrame(incoming_metadata_buffer,
+ /*metadata_size_soft_limit=*/
+ t->max_header_list_size_soft_limit,
+ /*metadata_size_hard_limit=*/
+ t->settings.acked().max_header_list_size(),
+ hpack_boundary_type(t, is_eoh), priority_type,
+ hpack_parser_log_info(t, frame_type));
return absl::OkStatus();
}
@@ -867,21 +858,20 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
grpc_error_handle err = grpc_chttp2_settings_parser_begin_frame(
&t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
- t->settings[GRPC_PEER_SETTINGS]);
+ t->settings.mutable_peer());
if (!err.ok()) {
return err;
}
if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
t->max_concurrent_streams_policy.AckLastSend();
- memcpy(t->settings[GRPC_ACKED_SETTINGS], t->settings[GRPC_SENT_SETTINGS],
- GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
+ if (!t->settings.AckLastSend()) {
+ return GRPC_ERROR_CREATE("Received unexpected settings ack");
+ }
t->hpack_parser.hpack_table()->SetMaxBytes(
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
+ t->settings.acked().header_table_size());
grpc_chttp2_act_on_flowctl_action(
t->flow_control.SetAckedInitialWindow(
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]),
+ t->settings.acked().initial_window_size()),
t, nullptr);
if (t->settings_ack_watchdog !=
grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid) {
@@ -889,7 +879,6 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
t->settings_ack_watchdog,
grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid));
}
- t->sent_local_settings = false;
// This is more streams than can be started in http2, so setting this
// effictively removes the limit for the rest of the connection.
t->num_incoming_streams_before_settings_ack =