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