Send SETTINGS_QPACK_BLOCKED_STREAMS in QuicSendControlStream. gfe-relnote: n/a, change to QUIC v99-only code. Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99. PiperOrigin-RevId: 268688607 Change-Id: Id25ac721e4e095c44934e12763039fc068e05f43
diff --git a/quic/core/http/quic_send_control_stream.cc b/quic/core/http/quic_send_control_stream.cc index 507380d..d1e0e62 100644 --- a/quic/core/http/quic_send_control_stream.cc +++ b/quic/core/http/quic_send_control_stream.cc
@@ -14,11 +14,13 @@ QuicStreamId id, QuicSession* session, uint64_t qpack_maximum_dynamic_table_capacity, + uint64_t qpack_maximum_blocked_streams, uint64_t max_inbound_header_list_size) : QuicStream(id, session, /*is_static = */ true, WRITE_UNIDIRECTIONAL), settings_sent_(false), qpack_maximum_dynamic_table_capacity_( qpack_maximum_dynamic_table_capacity), + qpack_maximum_blocked_streams_(qpack_maximum_blocked_streams), max_inbound_header_list_size_(max_inbound_header_list_size) {} void QuicSendControlStream::OnStreamReset(const QuicRstStreamFrame& /*frame*/) { @@ -43,10 +45,12 @@ nullptr); SettingsFrame settings; - settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = - max_inbound_header_list_size_; settings.values[SETTINGS_QPACK_MAX_TABLE_CAPACITY] = qpack_maximum_dynamic_table_capacity_; + settings.values[SETTINGS_QPACK_BLOCKED_STREAMS] = + qpack_maximum_blocked_streams_; + settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = + max_inbound_header_list_size_; std::unique_ptr<char[]> buffer; QuicByteCount frame_length =
diff --git a/quic/core/http/quic_send_control_stream.h b/quic/core/http/quic_send_control_stream.h index 2e8959b..aa8fff1 100644 --- a/quic/core/http/quic_send_control_stream.h +++ b/quic/core/http/quic_send_control_stream.h
@@ -22,6 +22,7 @@ QuicSendControlStream(QuicStreamId id, QuicSession* session, uint64_t qpack_maximum_dynamic_table_capacity, + uint64_t qpack_maximum_blocked_streams, uint64_t max_inbound_header_list_size); QuicSendControlStream(const QuicSendControlStream&) = delete; QuicSendControlStream& operator=(const QuicSendControlStream&) = delete; @@ -52,6 +53,8 @@ // SETTINGS_QPACK_MAX_TABLE_CAPACITY value to send. const uint64_t qpack_maximum_dynamic_table_capacity_; + // SETTINGS_QPACK_BLOCKED_STREAMS value to send. + const uint64_t qpack_maximum_blocked_streams_; // SETTINGS_MAX_HEADER_LIST_SIZE value to send. const uint64_t max_inbound_header_list_size_; };
diff --git a/quic/core/http/quic_send_control_stream_test.cc b/quic/core/http/quic_send_control_stream_test.cc index 6ee06bd..5c6a1a9 100644 --- a/quic/core/http/quic_send_control_stream_test.cc +++ b/quic/core/http/quic_send_control_stream_test.cc
@@ -86,19 +86,22 @@ } session_.set_qpack_maximum_dynamic_table_capacity(255); + session_.set_qpack_maximum_blocked_streams(16); session_.set_max_inbound_header_list_size(1024); Initialize(); testing::InSequence s; std::string expected_write_data = QuicTextUtils::HexDecode( - "00" // stream type: control stream - "04" // frame type: SETTINGS frame - "06" // frame length - "01" // SETTINGS_QPACK_MAX_TABLE_CAPACITY - "40ff" // 255 - "06" // SETTINGS_MAX_HEADER_LIST_SIZE - "4400"); // 1024 + "00" // stream type: control stream + "04" // frame type: SETTINGS frame + "08" // frame length + "01" // SETTINGS_QPACK_MAX_TABLE_CAPACITY + "40ff" // 255 + "06" // SETTINGS_MAX_HEADER_LIST_SIZE + "4400" // 1024 + "07" // SETTINGS_QPACK_BLOCKED_STREAMS + "10"); // 16 auto buffer = std::make_unique<char[]>(expected_write_data.size()); QuicDataWriter writer(expected_write_data.size(), buffer.get());
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc index a2bb509..8980fc2 100644 --- a/quic/core/http/quic_spdy_session.cc +++ b/quic/core/http/quic_spdy_session.cc
@@ -391,8 +391,6 @@ std::make_unique<QpackDecoder>(qpack_maximum_dynamic_table_capacity_, qpack_maximum_blocked_streams_, this); MaybeInitializeHttp3UnidirectionalStreams(); - // TODO(b/112770235): Send SETTINGS_QPACK_BLOCKED_STREAMS with value - // qpack_maximum_blocked_streams_. } spdy_framer_visitor_->set_max_header_list_size(max_inbound_header_list_size_); @@ -960,7 +958,8 @@ if (!send_control_stream_ && CanOpenNextOutgoingUnidirectionalStream()) { auto send_control = std::make_unique<QuicSendControlStream>( GetNextOutgoingUnidirectionalStreamId(), this, - qpack_maximum_dynamic_table_capacity_, max_inbound_header_list_size_); + qpack_maximum_dynamic_table_capacity_, qpack_maximum_blocked_streams_, + max_inbound_header_list_size_); send_control_stream_ = send_control.get(); ActivateStream(std::move(send_control)); }