Use draft-28 transport parameters in QuicConfig
This CL adopts the new transport parameters
from QuicConfig. Using them will happen in a
subsequent CL.
Add unused code
PiperOrigin-RevId: 313684778
Change-Id: Ifc31a0559190ecaced7e63203ef3e3fafecc3811
diff --git a/quic/core/quic_config.cc b/quic/core/quic_config.cc
index 1948077..fa06bcb 100644
--- a/quic/core/quic_config.cc
+++ b/quic/core/quic_config.cc
@@ -888,6 +888,40 @@
return received_original_destination_connection_id_.value();
}
+void QuicConfig::SetInitialSourceConnectionIdToSend(
+ const QuicConnectionId& initial_source_connection_id) {
+ initial_source_connection_id_to_send_ = initial_source_connection_id;
+}
+
+bool QuicConfig::HasReceivedInitialSourceConnectionId() const {
+ return received_initial_source_connection_id_.has_value();
+}
+
+QuicConnectionId QuicConfig::ReceivedInitialSourceConnectionId() const {
+ if (!HasReceivedInitialSourceConnectionId()) {
+ QUIC_BUG << "No received initial source connection ID";
+ return EmptyQuicConnectionId();
+ }
+ return received_initial_source_connection_id_.value();
+}
+
+void QuicConfig::SetRetrySourceConnectionIdToSend(
+ const QuicConnectionId& retry_source_connection_id) {
+ retry_source_connection_id_to_send_ = retry_source_connection_id;
+}
+
+bool QuicConfig::HasReceivedRetrySourceConnectionId() const {
+ return received_retry_source_connection_id_.has_value();
+}
+
+QuicConnectionId QuicConfig::ReceivedRetrySourceConnectionId() const {
+ if (!HasReceivedRetrySourceConnectionId()) {
+ QUIC_BUG << "No received retry source connection ID";
+ return EmptyQuicConnectionId();
+ }
+ return received_retry_source_connection_id_.value();
+}
+
void QuicConfig::SetStatelessResetTokenToSend(
QuicUint128 stateless_reset_token) {
stateless_reset_token_.SetSendValue(stateless_reset_token);
@@ -1142,6 +1176,16 @@
active_connection_id_limit_.GetSendValue());
}
+ if (initial_source_connection_id_to_send_.has_value()) {
+ params->initial_source_connection_id =
+ initial_source_connection_id_to_send_.value();
+ }
+
+ if (retry_source_connection_id_to_send_.has_value()) {
+ params->retry_source_connection_id =
+ retry_source_connection_id_to_send_.value();
+ }
+
if (GetQuicRestartFlag(quic_google_transport_param_send_new)) {
QUIC_RESTART_FLAG_COUNT_N(quic_google_transport_param_send_new, 1, 3);
if (initial_round_trip_time_us_.HasSendValue()) {
@@ -1264,6 +1308,17 @@
active_connection_id_limit_.SetReceivedValue(
params.active_connection_id_limit.value());
+ if (!is_resumption) {
+ if (params.initial_source_connection_id.has_value()) {
+ received_initial_source_connection_id_ =
+ params.initial_source_connection_id.value();
+ }
+ if (params.retry_source_connection_id.has_value()) {
+ received_retry_source_connection_id_ =
+ params.retry_source_connection_id.value();
+ }
+ }
+
bool google_params_already_parsed = false;
if (GetQuicRestartFlag(quic_google_transport_param_send_new)) {
QUIC_RESTART_FLAG_COUNT_N(quic_google_transport_param_send_new, 2, 3);
diff --git a/quic/core/quic_config.h b/quic/core/quic_config.h
index b7206c3..4f302b6 100644
--- a/quic/core/quic_config.h
+++ b/quic/core/quic_config.h
@@ -438,6 +438,18 @@
bool HasReceivedActiveConnectionIdLimit() const;
uint64_t ReceivedActiveConnectionIdLimit() const;
+ // Initial source connection ID.
+ void SetInitialSourceConnectionIdToSend(
+ const QuicConnectionId& initial_source_connection_id);
+ bool HasReceivedInitialSourceConnectionId() const;
+ QuicConnectionId ReceivedInitialSourceConnectionId() const;
+
+ // Retry source connection ID.
+ void SetRetrySourceConnectionIdToSend(
+ const QuicConnectionId& retry_source_connection_id);
+ bool HasReceivedRetrySourceConnectionId() const;
+ QuicConnectionId ReceivedRetrySourceConnectionId() const;
+
bool negotiated() const;
void SetCreateSessionTagIndicators(QuicTagVector tags);
@@ -594,7 +606,8 @@
// Uses the active_connection_id_limit transport parameter in IETF QUIC.
QuicFixedUint62 active_connection_id_limit_;
- // Sent by the server when it has previously sent a RETRY packet.
+ // The value of the Destination Connection ID field from the first
+ // Initial packet sent by the client.
// Uses the original_destination_connection_id transport parameter in
// IETF QUIC.
quiche::QuicheOptional<QuicConnectionId>
@@ -602,6 +615,20 @@
quiche::QuicheOptional<QuicConnectionId>
received_original_destination_connection_id_;
+ // The value that the endpoint included in the Source Connection ID field of
+ // the first Initial packet it sent.
+ // Uses the initial_source_connection_id transport parameter in IETF QUIC.
+ quiche::QuicheOptional<QuicConnectionId>
+ initial_source_connection_id_to_send_;
+ quiche::QuicheOptional<QuicConnectionId>
+ received_initial_source_connection_id_;
+
+ // The value that the server included in the Source Connection ID field of a
+ // Retry packet it sent.
+ // Uses the retry_source_connection_id transport parameter in IETF QUIC.
+ quiche::QuicheOptional<QuicConnectionId> retry_source_connection_id_to_send_;
+ quiche::QuicheOptional<QuicConnectionId> received_retry_source_connection_id_;
+
// Custom transport parameters that can be sent and received in the TLS
// handshake.
TransportParameters::ParameterMap custom_transport_parameters_to_send_;
diff --git a/quic/core/quic_config_test.cc b/quic/core/quic_config_test.cc
index 6d29cc9..4aa9619 100644
--- a/quic/core/quic_config_test.cc
+++ b/quic/core/quic_config_test.cc
@@ -468,6 +468,10 @@
config_.SetMaxDatagramFrameSizeToSend(kMaxDatagramFrameSizeForTest);
config_.SetActiveConnectionIdLimitToSend(kFakeActiveConnectionIdLimit);
+ config_.SetOriginalConnectionIdToSend(TestConnectionId(0x1111));
+ config_.SetInitialSourceConnectionIdToSend(TestConnectionId(0x2222));
+ config_.SetRetrySourceConnectionIdToSend(TestConnectionId(0x3333));
+
TransportParameters params;
config_.FillTransportParameters(¶ms);
@@ -486,6 +490,16 @@
params.max_datagram_frame_size.value());
EXPECT_EQ(kFakeActiveConnectionIdLimit,
params.active_connection_id_limit.value());
+
+ ASSERT_TRUE(params.original_destination_connection_id.has_value());
+ EXPECT_EQ(TestConnectionId(0x1111),
+ params.original_destination_connection_id.value());
+ ASSERT_TRUE(params.initial_source_connection_id.has_value());
+ EXPECT_EQ(TestConnectionId(0x2222),
+ params.initial_source_connection_id.value());
+ ASSERT_TRUE(params.retry_source_connection_id.has_value());
+ EXPECT_EQ(TestConnectionId(0x3333),
+ params.retry_source_connection_id.value());
}
TEST_P(QuicConfigTest, ProcessTransportParametersServer) {
@@ -509,6 +523,9 @@
params.max_ack_delay.set_value(kFakeMaxAckDelay);
params.ack_delay_exponent.set_value(kFakeAckDelayExponent);
params.active_connection_id_limit.set_value(kFakeActiveConnectionIdLimit);
+ params.original_destination_connection_id = TestConnectionId(0x1111);
+ params.initial_source_connection_id = TestConnectionId(0x2222);
+ params.retry_source_connection_id = TestConnectionId(0x3333);
std::string error_details;
EXPECT_THAT(config_.ProcessTransportParameters(
@@ -549,6 +566,9 @@
EXPECT_FALSE(config_.HasReceivedStatelessResetToken());
EXPECT_FALSE(config_.HasReceivedMaxAckDelayMs());
EXPECT_FALSE(config_.HasReceivedAckDelayExponent());
+ EXPECT_FALSE(config_.HasReceivedOriginalConnectionId());
+ EXPECT_FALSE(config_.HasReceivedInitialSourceConnectionId());
+ EXPECT_FALSE(config_.HasReceivedRetrySourceConnectionId());
// Let the config process another slightly tweaked transport paramters.
// Note that the values for flow control and stream limit cannot be smaller
@@ -609,6 +629,15 @@
ASSERT_TRUE(config_.HasReceivedActiveConnectionIdLimit());
EXPECT_EQ(config_.ReceivedActiveConnectionIdLimit(),
kFakeActiveConnectionIdLimit);
+
+ ASSERT_TRUE(config_.HasReceivedOriginalConnectionId());
+ EXPECT_EQ(config_.ReceivedOriginalConnectionId(), TestConnectionId(0x1111));
+ ASSERT_TRUE(config_.HasReceivedInitialSourceConnectionId());
+ EXPECT_EQ(config_.ReceivedInitialSourceConnectionId(),
+ TestConnectionId(0x2222));
+ ASSERT_TRUE(config_.HasReceivedRetrySourceConnectionId());
+ EXPECT_EQ(config_.ReceivedRetrySourceConnectionId(),
+ TestConnectionId(0x3333));
}
TEST_P(QuicConfigTest, DisableMigrationTransportParameter) {
diff --git a/quic/test_tools/quic_config_peer.cc b/quic/test_tools/quic_config_peer.cc
index 78904c4..b380642 100644
--- a/quic/test_tools/quic_config_peer.cc
+++ b/quic/test_tools/quic_config_peer.cc
@@ -112,6 +112,20 @@
}
// static
+void QuicConfigPeer::SetReceivedInitialSourceConnectionId(
+ QuicConfig* config,
+ const QuicConnectionId& initial_source_connection_id) {
+ config->received_initial_source_connection_id_ = initial_source_connection_id;
+}
+
+// static
+void QuicConfigPeer::SetReceivedRetrySourceConnectionId(
+ QuicConfig* config,
+ const QuicConnectionId& retry_source_connection_id) {
+ config->received_retry_source_connection_id_ = retry_source_connection_id;
+}
+
+// static
void QuicConfigPeer::SetReceivedMaxDatagramFrameSize(
QuicConfig* config,
uint64_t max_datagram_frame_size) {
diff --git a/quic/test_tools/quic_config_peer.h b/quic/test_tools/quic_config_peer.h
index e72c429..a351907 100644
--- a/quic/test_tools/quic_config_peer.h
+++ b/quic/test_tools/quic_config_peer.h
@@ -66,6 +66,14 @@
QuicConfig* config,
const QuicConnectionId& original_destination_connection_id);
+ static void SetReceivedInitialSourceConnectionId(
+ QuicConfig* config,
+ const QuicConnectionId& initial_source_connection_id);
+
+ static void SetReceivedRetrySourceConnectionId(
+ QuicConfig* config,
+ const QuicConnectionId& retry_source_connection_id);
+
static void SetReceivedMaxDatagramFrameSize(QuicConfig* config,
uint64_t max_datagram_frame_size);
};