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));
}