Clean up HTTP/3 and QPACK settings. Change settings variable name style from kCamelCase to ALL_CAPS to align with style used in draft RFCs. Encapsulate in enum (not enum class) as customary. Use these values instead of equivalent HTTP/2 values where appropriate. Move kDefaultQpackMaxDynamicTableCapacity to quic/core/http/. Add misc TODOs. gfe-relnote: n/a, no functional change. PiperOrigin-RevId: 260526616 Change-Id: Ie0bd513dbf8c0942545f02f97f09c9b9cc88d1dc
diff --git a/quic/core/http/http_constants.h b/quic/core/http/http_constants.h index 2641790..84d0abd 100644 --- a/quic/core/http/http_constants.h +++ b/quic/core/http/http_constants.h
@@ -7,6 +7,8 @@ #include <cstdint> +#include "net/third_party/quiche/src/quic/core/quic_types.h" + namespace quic { // Unidirectional stream types. @@ -18,14 +20,21 @@ const uint64_t kQpackEncoderStream = 0x02; const uint64_t kQpackDecoderStream = 0x03; -// Settings identifiers. - +// HTTP/3 and QPACK settings identifiers. // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#settings-parameters -const uint64_t kSettingsMaxHeaderListSize = 0x06; -const uint64_t kSettingsNumPlaceholders = 0x09; // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#configuration -const uint64_t kSettingsQpackMaxTableCapacity = 0x01; -const uint64_t kSettingsQpackBlockedStream = 0x07; +enum Http3AndQpackSettingsIdentifiers : uint64_t { + // Same value as spdy::SETTINGS_HEADER_TABLE_SIZE. + SETTINGS_QPACK_MAX_TABLE_CAPACITY = 0x01, + // Same value as spdy::SETTINGS_MAX_HEADER_LIST_SIZE. + SETTINGS_MAX_HEADER_LIST_SIZE = 0x06, + SETTINGS_QPACK_BLOCKED_STREAMS = 0x07, + SETTINGS_NUM_PLACEHOLDERS = 0x09, +}; + +// Default maximum dynamic table capacity, communicated via +// SETTINGS_QPACK_MAX_TABLE_CAPACITY. +const QuicByteCount kDefaultQpackMaxDynamicTableCapacity = 64 * 1024; // 64 KB } // namespace quic
diff --git a/quic/core/http/quic_receive_control_stream.cc b/quic/core/http/quic_receive_control_stream.cc index d870d21..4408e59 100644 --- a/quic/core/http/quic_receive_control_stream.cc +++ b/quic/core/http/quic_receive_control_stream.cc
@@ -211,10 +211,10 @@ for (auto& it : settings.values) { uint64_t setting_id = it.first; switch (setting_id) { - case kSettingsMaxHeaderListSize: + case SETTINGS_MAX_HEADER_LIST_SIZE: spdy_session->set_max_outbound_header_list_size(it.second); break; - case kSettingsNumPlaceholders: + case SETTINGS_NUM_PLACEHOLDERS: // TODO: Support placeholder setting break; default:
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc index d5a3139..7c90c76 100644 --- a/quic/core/http/quic_receive_control_stream_test.cc +++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -128,7 +128,7 @@ TEST_P(QuicReceiveControlStreamTest, ReceiveSettings) { SettingsFrame settings; settings.values[3] = 2; - settings.values[kSettingsMaxHeaderListSize] = 5; + settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = 5; std::string data = EncodeSettings(settings); QuicStreamFrame frame(receive_control_stream_->id(), false, 0, QuicStringPiece(data)); @@ -181,7 +181,7 @@ TEST_P(QuicReceiveControlStreamTest, ReceiveSettingsFragments) { SettingsFrame settings; settings.values[3] = 2; - settings.values[kSettingsMaxHeaderListSize] = 5; + settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = 5; std::string data = EncodeSettings(settings); std::string data1 = data.substr(0, 1); std::string data2 = data.substr(1, data.length() - 1);
diff --git a/quic/core/http/quic_send_control_stream.cc b/quic/core/http/quic_send_control_stream.cc index 348f63d..53ff3ef 100644 --- a/quic/core/http/quic_send_control_stream.cc +++ b/quic/core/http/quic_send_control_stream.cc
@@ -40,7 +40,8 @@ nullptr); SettingsFrame settings; - settings.values[kSettingsMaxHeaderListSize] = max_inbound_header_list_size_; + settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = + max_inbound_header_list_size_; std::unique_ptr<char[]> buffer; QuicByteCount frame_length = encoder_.SerializeSettingsFrame(settings, &buffer);
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc index b57ad72..0e909ed 100644 --- a/quic/core/http/quic_spdy_session.cc +++ b/quic/core/http/quic_spdy_session.cc
@@ -28,8 +28,6 @@ using spdy::HpackHeaderTable; using spdy::Http2WeightToSpdy3Priority; using spdy::SETTINGS_ENABLE_PUSH; -using spdy::SETTINGS_HEADER_TABLE_SIZE; -using spdy::SETTINGS_MAX_HEADER_LIST_SIZE; using spdy::Spdy3PriorityToHttp2Weight; using spdy::SpdyErrorCode; using spdy::SpdyFramer; @@ -155,10 +153,11 @@ void OnSetting(SpdySettingsId id, uint32_t value) override { switch (id) { - case SETTINGS_HEADER_TABLE_SIZE: + case SETTINGS_QPACK_MAX_TABLE_CAPACITY: session_->UpdateHeaderEncoderTableSize(value); break; case SETTINGS_ENABLE_PUSH: + // TODO(b/138438479): Remove this setting. if (session_->perspective() == Perspective::IS_SERVER) { // See rfc7540, Section 6.5.2. if (value > 1) { @@ -744,6 +743,7 @@ } void QuicSpdySession::UpdateHeaderEncoderTableSize(uint32_t value) { + // TODO(b/112770235): Update QpackEncoder. spdy_framer_.UpdateHeaderEncoderTableSize(value); }
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc index d3182ab..9f4671f 100644 --- a/quic/core/http/quic_spdy_session_test.cc +++ b/quic/core/http/quic_spdy_session_test.cc
@@ -2113,7 +2113,7 @@ SettingsFrame settings; settings.values[3] = 2; - settings.values[kSettingsMaxHeaderListSize] = 5; + settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = 5; std::string data = EncodeSettings(settings); QuicStreamFrame frame(stream_id, false, 1, QuicStringPiece(data)); @@ -2132,7 +2132,7 @@ char type[] = {kControlStream}; SettingsFrame settings; settings.values[3] = 2; - settings.values[kSettingsMaxHeaderListSize] = 5; + settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = 5; std::string data = EncodeSettings(settings); QuicStreamFrame data1(stream_id, false, 1, QuicStringPiece(data));
diff --git a/quic/core/quic_constants.h b/quic/core/quic_constants.h index 442fb09..1ba32d8 100644 --- a/quic/core/quic_constants.h +++ b/quic/core/quic_constants.h
@@ -79,11 +79,6 @@ // TODO(bnc): Move this constant to quic/core/http/. const QuicByteCount kDefaultMaxUncompressedHeaderSize = 16 * 1024; // 16 KB -// Default maximum dynamic table capacity, communicated via -// SETTINGS_QPACK_MAX_TABLE_CAPACITY. -// TODO(bnc): Move this constant to quic/core/http/. -const QuicByteCount kDefaultQpackMaxDynamicTableCapacity = 64 * 1024; // 64 KB - // Minimum size of the CWND, in packets, when doing bandwidth resumption. const QuicPacketCount kMinCongestionWindowForBandwidthResumption = 10;