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