Deprecate QUIC version Draft25 This CL also refactors QuicDispatcherTestOneVersion.RejectDeprecatedVersionsWithVersionNegotiation to allow verifying the parameters passed to SendVersionNegotiationPacket. Deprecate gfe2_reloadable_flag_quic_disable_version_draft_25 PiperOrigin-RevId: 325886982 Change-Id: I43a188fc64f82e374886a5c3dee3dfb14f10ff60
diff --git a/quic/core/crypto/crypto_utils.cc b/quic/core/crypto/crypto_utils.cc index 3be4286..fe1a5ee 100644 --- a/quic/core/crypto/crypto_utils.cc +++ b/quic/core/crypto/crypto_utils.cc
@@ -115,10 +115,8 @@ namespace { -// Salt from https://tools.ietf.org/html/draft-ietf-quic-tls-25#section-5.2 -// and https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-5.2 -// and https://tools.ietf.org/html/draft-ietf-quic-tls-28#section-5.2 -const uint8_t kDraft25InitialSalt[] = {0xc3, 0xee, 0xf7, 0x12, 0xc7, 0x2e, 0xbb, +// Salt from https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-5.2 +const uint8_t kDraft27InitialSalt[] = {0xc3, 0xee, 0xf7, 0x12, 0xc7, 0x2e, 0xbb, 0x5a, 0x11, 0xa7, 0xd2, 0x43, 0x2b, 0xb4, 0x63, 0x65, 0xbe, 0xf9, 0xf5, 0x02}; @@ -145,16 +143,15 @@ const uint8_t* InitialSaltForVersion(const ParsedQuicVersion& version, size_t* out_len) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync with initial encryption salts"); if (version == ParsedQuicVersion::Draft29()) { *out_len = QUICHE_ARRAYSIZE(kDraft29InitialSalt); return kDraft29InitialSalt; } else if (version == ParsedQuicVersion::Draft27() || - version == ParsedQuicVersion::Draft25() || version == ParsedQuicVersion::ReservedForNegotiation()) { - *out_len = QUICHE_ARRAYSIZE(kDraft25InitialSalt); - return kDraft25InitialSalt; + *out_len = QUICHE_ARRAYSIZE(kDraft27InitialSalt); + return kDraft27InitialSalt; } else if (version == ParsedQuicVersion::T051()) { *out_len = QUICHE_ARRAYSIZE(kT051Salt); return kT051Salt; @@ -166,20 +163,18 @@ return kQ050Salt; } QUIC_BUG << "No initial obfuscation salt for version " << version; - *out_len = QUICHE_ARRAYSIZE(kDraft25InitialSalt); - return kDraft25InitialSalt; + *out_len = QUICHE_ARRAYSIZE(kDraft27InitialSalt); + return kDraft27InitialSalt; } const char kPreSharedKeyLabel[] = "QUIC PSK"; // Retry Integrity Protection Keys and Nonces. -// https://tools.ietf.org/html/draft-ietf-quic-tls-25#section-5.8 // https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-5.8 -// https://tools.ietf.org/html/draft-ietf-quic-tls-28#section-5.8 -const uint8_t kDraft25RetryIntegrityKey[] = {0x4d, 0x32, 0xec, 0xdb, 0x2a, 0x21, +const uint8_t kDraft27RetryIntegrityKey[] = {0x4d, 0x32, 0xec, 0xdb, 0x2a, 0x21, 0x33, 0xc8, 0x41, 0xe4, 0x04, 0x3d, 0xf2, 0x7d, 0x44, 0x30}; -const uint8_t kDraft25RetryIntegrityNonce[] = { +const uint8_t kDraft27RetryIntegrityNonce[] = { 0x4d, 0x16, 0x11, 0xd0, 0x55, 0x13, 0xa5, 0x52, 0xc5, 0x87, 0xd5, 0x75}; // https://tools.ietf.org/html/draft-ietf-quic-tls-29#section-5.8 @@ -207,7 +202,7 @@ bool RetryIntegrityKeysForVersion(const ParsedQuicVersion& version, quiche::QuicheStringPiece* key, quiche::QuicheStringPiece* nonce) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync with retry integrity keys"); if (!version.HasRetryIntegrityTag()) { QUIC_BUG << "Attempted to get retry integrity keys for invalid version " @@ -221,14 +216,13 @@ reinterpret_cast<const char*>(kDraft29RetryIntegrityNonce), QUICHE_ARRAYSIZE(kDraft29RetryIntegrityNonce)); return true; - } else if (version == ParsedQuicVersion::Draft25() || - version == ParsedQuicVersion::Draft27()) { + } else if (version == ParsedQuicVersion::Draft27()) { *key = quiche::QuicheStringPiece( - reinterpret_cast<const char*>(kDraft25RetryIntegrityKey), - QUICHE_ARRAYSIZE(kDraft25RetryIntegrityKey)); + reinterpret_cast<const char*>(kDraft27RetryIntegrityKey), + QUICHE_ARRAYSIZE(kDraft27RetryIntegrityKey)); *nonce = quiche::QuicheStringPiece( - reinterpret_cast<const char*>(kDraft25RetryIntegrityNonce), - QUICHE_ARRAYSIZE(kDraft25RetryIntegrityNonce)); + reinterpret_cast<const char*>(kDraft27RetryIntegrityNonce), + QUICHE_ARRAYSIZE(kDraft27RetryIntegrityNonce)); return true; } else if (version == ParsedQuicVersion::T051()) { *key = quiche::QuicheStringPiece(
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc index c547d19..49c5c4d 100644 --- a/quic/core/quic_connection_test.cc +++ b/quic/core/quic_connection_test.cc
@@ -10517,10 +10517,6 @@ } // These values come from draft-ietf-quic-tls Appendix A.4. - char retry_packet25[] = { - 0xff, 0xff, 0x00, 0x00, 0x19, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, - 0x42, 0x62, 0xb5, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x1e, 0x5e, 0xc5, 0xb0, - 0x14, 0xcb, 0xb1, 0xf0, 0xfd, 0x93, 0xdf, 0x40, 0x48, 0xc4, 0x46, 0xa6}; char retry_packet27[] = { 0xff, 0xff, 0x00, 0x00, 0x1b, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0xa5, 0x23, 0xcb, 0x5b, @@ -10538,9 +10534,6 @@ } else if (version() == ParsedQuicVersion::Draft27()) { retry_packet = retry_packet27; retry_packet_length = QUICHE_ARRAYSIZE(retry_packet27); - } else if (version() == ParsedQuicVersion::Draft25()) { - retry_packet = retry_packet25; - retry_packet_length = QUICHE_ARRAYSIZE(retry_packet25); } else { // TODO(dschinazi) generate retry packets for all versions once we have // server-side support for generating these programmatically.
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc index 8d06ce5..1fa601f 100644 --- a/quic/core/quic_dispatcher_test.cc +++ b/quic/core/quic_dispatcher_test.cc
@@ -1084,78 +1084,129 @@ } TEST_P(QuicDispatcherTestOneVersion, - RejectDeprecatedVersionsWithVersionNegotiation) { - static_assert(quic::SupportedVersions().size() == 8u, - "Please add deprecated versions to this test"); + RejectDeprecatedVersionDraft28WithVersionNegotiation) { QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); CreateTimeWaitListManager(); - - { - char packet49[kMinPacketSizeForVersionNegotiation] = { - 0xC0, 'Q', '0', '4', '9', /*connection ID length byte*/ 0x50}; - QuicReceivedPacket received_packet49( - packet49, kMinPacketSizeForVersionNegotiation, QuicTime::Zero()); - EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); - EXPECT_CALL(*time_wait_list_manager_, - SendVersionNegotiationPacket(_, _, _, _, _, _, _, _)) - .Times(1); - dispatcher_->ProcessPacket(server_address_, client_address, - received_packet49); - } - - { - char packet48[kMinPacketSizeForVersionNegotiation] = { - 0xC0, 'Q', '0', '4', '8', /*connection ID length byte*/ 0x50}; - QuicReceivedPacket received_packet48( - packet48, kMinPacketSizeForVersionNegotiation, QuicTime::Zero()); - EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); - EXPECT_CALL(*time_wait_list_manager_, - SendVersionNegotiationPacket(_, _, _, _, _, _, _, _)) - .Times(1); - dispatcher_->ProcessPacket(server_address_, client_address, - received_packet48); - } - - { - char packet47[kMinPacketSizeForVersionNegotiation] = { - 0xC0, 'Q', '0', '4', '7', /*connection ID length byte*/ 0x50}; - QuicReceivedPacket received_packet47( - packet47, kMinPacketSizeForVersionNegotiation, QuicTime::Zero()); - EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); - EXPECT_CALL(*time_wait_list_manager_, - SendVersionNegotiationPacket(_, _, _, _, _, _, _, _)) - .Times(1); - dispatcher_->ProcessPacket(server_address_, client_address, - received_packet47); - } - - { - char packet45[kMinPacketSizeForVersionNegotiation] = { - 0xC0, 'Q', '0', '4', '5', /*connection ID length byte*/ 0x50}; - QuicReceivedPacket received_packet45( - packet45, kMinPacketSizeForVersionNegotiation, QuicTime::Zero()); - EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); - EXPECT_CALL(*time_wait_list_manager_, - SendVersionNegotiationPacket(_, _, _, _, _, _, _, _)) - .Times(1); - dispatcher_->ProcessPacket(server_address_, client_address, - received_packet45); - } - - { - char packet44[kMinPacketSizeForVersionNegotiation] = { - 0xFF, 'Q', '0', '4', '4', /*connection ID length byte*/ 0x50}; - QuicReceivedPacket received_packet44( - packet44, kMinPacketSizeForVersionNegotiation, QuicTime::Zero()); - EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); - EXPECT_CALL(*time_wait_list_manager_, - SendVersionNegotiationPacket(_, _, _, _, _, _, _, _)) - .Times(1); - dispatcher_->ProcessPacket(server_address_, client_address, - received_packet44); - } + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 0xFF, 0x00, 0x00, 28, /*destination connection ID length*/ 0x08}; + QuicReceivedPacket received_packet(packet, QUICHE_ARRAYSIZE(packet), + QuicTime::Zero()); + EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); + EXPECT_CALL( + *time_wait_list_manager_, + SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true, + /*use_length_prefix=*/true, _, _, _, _)) + .Times(1); + dispatcher_->ProcessPacket(server_address_, client_address, received_packet); } +TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionDraft25WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 0xFF, 0x00, 0x00, 25, /*destination connection ID length*/ 0x08}; + QuicReceivedPacket received_packet(packet, QUICHE_ARRAYSIZE(packet), + QuicTime::Zero()); + EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); + EXPECT_CALL( + *time_wait_list_manager_, + SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true, + /*use_length_prefix=*/true, _, _, _, _)) + .Times(1); + dispatcher_->ProcessPacket(server_address_, client_address, received_packet); +} + +TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionQ049WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 'Q', '0', '4', '9', /*destination connection ID length*/ 0x08}; + QuicReceivedPacket received_packet(packet, QUICHE_ARRAYSIZE(packet), + QuicTime::Zero()); + EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); + EXPECT_CALL( + *time_wait_list_manager_, + SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true, + /*use_length_prefix=*/true, _, _, _, _)) + .Times(1); + dispatcher_->ProcessPacket(server_address_, client_address, received_packet); +} + +TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionQ048WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 'Q', '0', '4', '8', /*connection ID length byte*/ 0x50}; + QuicReceivedPacket received_packet(packet, QUICHE_ARRAYSIZE(packet), + QuicTime::Zero()); + EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); + EXPECT_CALL( + *time_wait_list_manager_, + SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true, + /*use_length_prefix=*/false, _, _, _, _)) + .Times(1); + dispatcher_->ProcessPacket(server_address_, client_address, received_packet); +} + +TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionQ047WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 'Q', '0', '4', '7', /*connection ID length byte*/ 0x50}; + QuicReceivedPacket received_packet(packet, QUICHE_ARRAYSIZE(packet), + QuicTime::Zero()); + EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); + EXPECT_CALL( + *time_wait_list_manager_, + SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true, + /*use_length_prefix=*/false, _, _, _, _)) + .Times(1); + dispatcher_->ProcessPacket(server_address_, client_address, received_packet); +} + +TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionQ045WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 'Q', '0', '4', '5', /*connection ID length byte*/ 0x50}; + QuicReceivedPacket received_packet(packet, QUICHE_ARRAYSIZE(packet), + QuicTime::Zero()); + EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); + EXPECT_CALL( + *time_wait_list_manager_, + SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true, + /*use_length_prefix=*/false, _, _, _, _)) + .Times(1); + dispatcher_->ProcessPacket(server_address_, client_address, received_packet); +} + +TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionQ044WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet44[kMinPacketSizeForVersionNegotiation] = { + 0xFF, 'Q', '0', '4', '4', /*connection ID length byte*/ 0x50}; + QuicReceivedPacket received_packet44( + packet44, kMinPacketSizeForVersionNegotiation, QuicTime::Zero()); + EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0); + EXPECT_CALL( + *time_wait_list_manager_, + SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true, + /*use_length_prefix=*/false, _, _, _, _)) + .Times(1); + dispatcher_->ProcessPacket(server_address_, client_address, + received_packet44); +} + +static_assert(quic::SupportedVersions().size() == 7u, + "Please add new RejectDeprecatedVersion tests above this assert " + "when deprecating versions"); + TEST_P(QuicDispatcherTestOneVersion, VersionNegotiationProbeOld) { SetQuicFlag(FLAGS_quic_prober_uses_length_prefixed_connection_ids, false); QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc index 57db3c9..52bb9a2 100644 --- a/quic/core/quic_version_manager.cc +++ b/quic/core/quic_version_manager.cc
@@ -19,15 +19,13 @@ GetQuicReloadableFlag(quic_disable_version_draft_29)), disable_version_draft_27_( GetQuicReloadableFlag(quic_disable_version_draft_27)), - disable_version_draft_25_( - GetQuicReloadableFlag(quic_disable_version_draft_25)), enable_version_t051_(GetQuicReloadableFlag(quic_enable_version_t051)), disable_version_t050_(GetQuicReloadableFlag(quic_disable_version_t050)), disable_version_q050_(GetQuicReloadableFlag(quic_disable_version_q050)), disable_version_q046_(GetQuicReloadableFlag(quic_disable_version_q046)), disable_version_q043_(GetQuicReloadableFlag(quic_disable_version_q043)), allowed_supported_versions_(std::move(supported_versions)) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync"); RefilterSupportedVersions(); } @@ -57,14 +55,12 @@ } void QuicVersionManager::MaybeRefilterSupportedVersions() { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync"); if (disable_version_draft_29_ != GetQuicReloadableFlag(quic_disable_version_draft_29) || disable_version_draft_27_ != GetQuicReloadableFlag(quic_disable_version_draft_27) || - disable_version_draft_25_ != - GetQuicReloadableFlag(quic_disable_version_draft_25) || enable_version_t051_ != GetQuicReloadableFlag(quic_enable_version_t051) || disable_version_t050_ != GetQuicReloadableFlag(quic_disable_version_t050) || @@ -78,8 +74,6 @@ GetQuicReloadableFlag(quic_disable_version_draft_29); disable_version_draft_27_ = GetQuicReloadableFlag(quic_disable_version_draft_27); - disable_version_draft_25_ = - GetQuicReloadableFlag(quic_disable_version_draft_25); enable_version_t051_ = GetQuicReloadableFlag(quic_enable_version_t051); disable_version_t050_ = GetQuicReloadableFlag(quic_disable_version_t050); disable_version_q050_ = GetQuicReloadableFlag(quic_disable_version_q050);
diff --git a/quic/core/quic_version_manager.h b/quic/core/quic_version_manager.h index 9eb69ed..cbf5de1 100644 --- a/quic/core/quic_version_manager.h +++ b/quic/core/quic_version_manager.h
@@ -56,8 +56,6 @@ bool disable_version_draft_29_; // quic_disable_version_draft_27 flag bool disable_version_draft_27_; - // quic_disable_version_draft_25 flag - bool disable_version_draft_25_; // quic_enable_version_t051 flag bool enable_version_t051_; // quic_disable_version_t050 flag
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc index eec910c..c91ad99 100644 --- a/quic/core/quic_version_manager_test.cc +++ b/quic/core/quic_version_manager_test.cc
@@ -18,14 +18,13 @@ class QuicVersionManagerTest : public QuicTest {}; TEST_F(QuicVersionManagerTest, QuicVersionManager) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync"); for (const ParsedQuicVersion& version : AllSupportedVersions()) { QuicEnableVersion(version); } QuicDisableVersion(ParsedQuicVersion::Draft29()); QuicDisableVersion(ParsedQuicVersion::Draft27()); - QuicDisableVersion(ParsedQuicVersion::Draft25()); QuicVersionManager manager(AllSupportedVersions()); ParsedQuicVersionVector expected_parsed_versions; @@ -74,19 +73,6 @@ EXPECT_THAT(manager.GetSupportedAlpns(), ElementsAre("h3-29", "h3-27", "h3-T051", "h3-T050", "h3-Q050", "h3-Q046", "h3-Q043")); - - offset++; - QuicEnableVersion(ParsedQuicVersion::Draft25()); - expected_parsed_versions.insert(expected_parsed_versions.begin() + offset, - ParsedQuicVersion::Draft25()); - EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions()); - EXPECT_EQ(expected_parsed_versions.size() - 3 - offset, - manager.GetSupportedVersionsWithQuicCrypto().size()); - EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(), - manager.GetSupportedVersionsWithQuicCrypto()); - EXPECT_THAT(manager.GetSupportedAlpns(), - ElementsAre("h3-29", "h3-27", "h3-25", "h3-T051", "h3-T050", - "h3-Q050", "h3-Q046", "h3-Q043")); } } // namespace
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc index 93b5748..4b10cb7 100644 --- a/quic/core/quic_versions.cc +++ b/quic/core/quic_versions.cc
@@ -40,7 +40,7 @@ } void SetVersionFlag(const ParsedQuicVersion& version, bool should_enable) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync"); const bool enable = should_enable; const bool disable = !should_enable; @@ -48,8 +48,6 @@ SetQuicReloadableFlag(quic_disable_version_draft_29, disable); } else if (version == ParsedQuicVersion::Draft27()) { SetQuicReloadableFlag(quic_disable_version_draft_27, disable); - } else if (version == ParsedQuicVersion::Draft25()) { - SetQuicReloadableFlag(quic_disable_version_draft_25, disable); } else if (version == ParsedQuicVersion::T051()) { SetQuicReloadableFlag(quic_enable_version_t051, enable); } else if (version == ParsedQuicVersion::T050()) { @@ -187,8 +185,7 @@ DCHECK(IsKnown()); // Variable-length integer transport parameters are supported in T051 and // all IETF drafts since draft-27. - return UsesTls() && transport_version > QUIC_VERSION_50 && - transport_version != QUIC_VERSION_IETF_DRAFT_25; + return UsesTls() && transport_version > QUIC_VERSION_50; } bool ParsedQuicVersion::AuthenticatesHandshakeConnectionIds() const { @@ -196,7 +193,6 @@ // Authentication of handshake connection IDs is supported in T051 and // all IETF drafts since draft-28. return UsesTls() && transport_version > QUIC_VERSION_50 && - transport_version != QUIC_VERSION_IETF_DRAFT_25 && transport_version != QUIC_VERSION_IETF_DRAFT_27; } @@ -241,14 +237,12 @@ } QuicVersionLabel CreateQuicVersionLabel(ParsedQuicVersion parsed_version) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync"); if (parsed_version == ParsedQuicVersion::Draft29()) { return MakeVersionLabel(0xff, 0x00, 0x00, 29); } else if (parsed_version == ParsedQuicVersion::Draft27()) { return MakeVersionLabel(0xff, 0x00, 0x00, 27); - } else if (parsed_version == ParsedQuicVersion::Draft25()) { - return MakeVersionLabel(0xff, 0x00, 0x00, 25); } else if (parsed_version == ParsedQuicVersion::T051()) { return MakeVersionLabel('T', '0', '5', '1'); } else if (parsed_version == ParsedQuicVersion::T050()) { @@ -429,10 +423,6 @@ if (!GetQuicReloadableFlag(quic_disable_version_draft_27)) { filtered_versions.push_back(version); } - } else if (version == ParsedQuicVersion::Draft25()) { - if (!GetQuicReloadableFlag(quic_disable_version_draft_25)) { - filtered_versions.push_back(version); - } } else if (version == ParsedQuicVersion::T051()) { if (GetQuicReloadableFlag(quic_enable_version_t051)) { filtered_versions.push_back(version); @@ -541,14 +531,13 @@ return #x std::string QuicVersionToString(QuicTransportVersion transport_version) { - static_assert(SupportedTransportVersions().size() == 7u, + static_assert(SupportedTransportVersions().size() == 6u, "Supported versions out of sync"); switch (transport_version) { RETURN_STRING_LITERAL(QUIC_VERSION_43); RETURN_STRING_LITERAL(QUIC_VERSION_46); RETURN_STRING_LITERAL(QUIC_VERSION_50); RETURN_STRING_LITERAL(QUIC_VERSION_51); - RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_25); RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_27); RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_29); RETURN_STRING_LITERAL(QUIC_VERSION_UNSUPPORTED); @@ -569,7 +558,7 @@ } std::string ParsedQuicVersionToString(ParsedQuicVersion version) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync"); if (version == UnsupportedQuicVersion()) { return "0"; @@ -582,9 +571,6 @@ } else if (version == ParsedQuicVersion::Draft27()) { DCHECK(version.UsesHttp3()); return "draft27"; - } else if (version == ParsedQuicVersion::Draft25()) { - DCHECK(version.UsesHttp3()); - return "draft25"; } } return QuicVersionLabelToString(CreateQuicVersionLabel(version)); @@ -675,8 +661,6 @@ return "h3-29"; } else if (parsed_version == ParsedQuicVersion::Draft27()) { return "h3-27"; - } else if (parsed_version == ParsedQuicVersion::Draft25()) { - return "h3-25"; } return "h3-" + ParsedQuicVersionToString(parsed_version); }
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h index 7ea590a..77b3359 100644 --- a/quic/core/quic_versions.h +++ b/quic/core/quic_versions.h
@@ -118,7 +118,7 @@ // header format from draft-ietf-quic-invariants-06 QUIC_VERSION_50 = 50, // Header protection and initial obfuscators. QUIC_VERSION_51 = 51, // draft-29 features but with GoogleQUIC frames. - QUIC_VERSION_IETF_DRAFT_25 = 70, // draft-ietf-quic-transport-25. + // Number 70 used to represent draft-ietf-quic-transport-25. QUIC_VERSION_IETF_DRAFT_27 = 71, // draft-ietf-quic-transport-27. // Number 72 used to represent draft-ietf-quic-transport-28. QUIC_VERSION_IETF_DRAFT_29 = 73, // draft-ietf-quic-transport-29. @@ -136,10 +136,9 @@ // This array contains QUIC transport versions which we currently support. // DEPRECATED. Use SupportedVersions() instead. -constexpr std::array<QuicTransportVersion, 7> SupportedTransportVersions() { +constexpr std::array<QuicTransportVersion, 6> SupportedTransportVersions() { return {QUIC_VERSION_IETF_DRAFT_29, QUIC_VERSION_IETF_DRAFT_27, - QUIC_VERSION_IETF_DRAFT_25, QUIC_VERSION_51, QUIC_VERSION_50, QUIC_VERSION_46, @@ -200,7 +199,6 @@ case PROTOCOL_QUIC_CRYPTO: return transport_version != QUIC_VERSION_UNSUPPORTED && transport_version != QUIC_VERSION_51 && - transport_version != QUIC_VERSION_IETF_DRAFT_25 && transport_version != QUIC_VERSION_IETF_DRAFT_27 && transport_version != QUIC_VERSION_IETF_DRAFT_29; case PROTOCOL_TLS1_3: @@ -258,10 +256,6 @@ return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27); } - static constexpr ParsedQuicVersion Draft25() { - return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25); - } - static constexpr ParsedQuicVersion T051() { return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_51); } @@ -422,12 +416,12 @@ return {PROTOCOL_TLS1_3, PROTOCOL_QUIC_CRYPTO}; } -constexpr std::array<ParsedQuicVersion, 8> SupportedVersions() { +constexpr std::array<ParsedQuicVersion, 7> SupportedVersions() { return { ParsedQuicVersion::Draft29(), ParsedQuicVersion::Draft27(), - ParsedQuicVersion::Draft25(), ParsedQuicVersion::T051(), - ParsedQuicVersion::T050(), ParsedQuicVersion::Q050(), - ParsedQuicVersion::Q046(), ParsedQuicVersion::Q043(), + ParsedQuicVersion::T051(), ParsedQuicVersion::T050(), + ParsedQuicVersion::Q050(), ParsedQuicVersion::Q046(), + ParsedQuicVersion::Q043(), }; } @@ -499,14 +493,14 @@ ParseQuicVersionLabel(QuicVersionLabel version_label); // Parses a QUIC version string such as "Q043" or "T050". Also supports parsing -// ALPN such as "h3-25" or "h3-Q050". For PROTOCOL_QUIC_CRYPTO versions, also +// ALPN such as "h3-29" or "h3-Q050". For PROTOCOL_QUIC_CRYPTO versions, also // supports parsing numbers such as "46". QUIC_EXPORT_PRIVATE ParsedQuicVersion ParseQuicVersionString(quiche::QuicheStringPiece version_string); // Parses a comma-separated list of QUIC version strings. Supports parsing by // label, ALPN and numbers for PROTOCOL_QUIC_CRYPTO. Skips unknown versions. -// For example: "h3-25,Q050,46". +// For example: "h3-29,Q050,46". QUIC_EXPORT_PRIVATE ParsedQuicVersionVector ParseQuicVersionVectorString(quiche::QuicheStringPiece versions_string);
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc index a79be65..1eff47a 100644 --- a/quic/core/quic_versions_test.cc +++ b/quic/core/quic_versions_test.cc
@@ -245,11 +245,6 @@ EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("draft27")); } EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("h3-27")); - EXPECT_EQ(ParsedQuicVersion::Draft25(), ParseQuicVersionString("ff000019")); - if (GetQuicReloadableFlag(quic_fix_print_draft_version)) { - EXPECT_EQ(ParsedQuicVersion::Draft25(), ParseQuicVersionString("draft25")); - } - EXPECT_EQ(ParsedQuicVersion::Draft25(), ParseQuicVersionString("h3-25")); for (const ParsedQuicVersion& version : AllSupportedVersions()) { EXPECT_EQ(version, @@ -261,8 +256,6 @@ ParsedQuicVersion version_q046(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46); ParsedQuicVersion version_q050(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50); ParsedQuicVersion version_t050(PROTOCOL_TLS1_3, QUIC_VERSION_50); - ParsedQuicVersion version_draft_25(PROTOCOL_TLS1_3, - QUIC_VERSION_IETF_DRAFT_25); ParsedQuicVersion version_draft_27(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27); ParsedQuicVersion version_draft_29 = ParsedQuicVersion::Draft29(); @@ -276,16 +269,14 @@ EXPECT_THAT(ParseQuicVersionVectorString("h3-T050"), ElementsAre(version_t050)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-25, h3-27"), - ElementsAre(version_draft_25, version_draft_27)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-25,h3-27"), - ElementsAre(version_draft_25, version_draft_27)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-25,h3-27,h3-25"), - ElementsAre(version_draft_25, version_draft_27)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-25,h3-27, h3-25"), - ElementsAre(version_draft_25, version_draft_27)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-27,h3-25"), - ElementsAre(version_draft_27, version_draft_25)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-27, h3-29"), + ElementsAre(version_draft_27, version_draft_29)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-27,h3-29"), + ElementsAre(version_draft_29, version_draft_27)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-27, h3-29"), + ElementsAre(version_draft_29, version_draft_27)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-27,h3-29"), + ElementsAre(version_draft_27, version_draft_29)); EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-27"), ElementsAre(version_draft_29, version_draft_27)); @@ -328,8 +319,8 @@ EXPECT_THAT(ParseQuicVersionVectorString("99"), IsEmpty()); EXPECT_THAT(ParseQuicVersionVectorString("70"), IsEmpty()); EXPECT_THAT(ParseQuicVersionVectorString("h3-01"), IsEmpty()); - EXPECT_THAT(ParseQuicVersionVectorString("h3-01,h3-25"), - ElementsAre(version_draft_25)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-01,h3-29"), + ElementsAre(version_draft_29)); } TEST_F(QuicVersionsTest, CreateQuicVersionLabel) { @@ -417,15 +408,11 @@ EXPECT_EQ("Q050", ParsedQuicVersionToString(ParsedQuicVersion::Q050())); EXPECT_EQ("T050", ParsedQuicVersionToString(ParsedQuicVersion::T050())); if (GetQuicReloadableFlag(quic_fix_print_draft_version)) { - EXPECT_EQ("draft25", - ParsedQuicVersionToString(ParsedQuicVersion::Draft25())); EXPECT_EQ("draft27", ParsedQuicVersionToString(ParsedQuicVersion::Draft27())); EXPECT_EQ("draft29", ParsedQuicVersionToString(ParsedQuicVersion::Draft29())); } else { - EXPECT_EQ("ff000019", - ParsedQuicVersionToString(ParsedQuicVersion::Draft25())); EXPECT_EQ("ff00001b", ParsedQuicVersionToString(ParsedQuicVersion::Draft27())); EXPECT_EQ("ff00001d", @@ -520,26 +507,24 @@ // yet a typo was made in doing the #defines and it was caught // only in some test far removed from here... Better safe than sorry. TEST_F(QuicVersionsTest, CheckTransportVersionNumbersForTypos) { - static_assert(SupportedTransportVersions().size() == 7u, + static_assert(SupportedTransportVersions().size() == 6u, "Supported versions out of sync"); EXPECT_EQ(QUIC_VERSION_43, 43); EXPECT_EQ(QUIC_VERSION_46, 46); EXPECT_EQ(QUIC_VERSION_50, 50); EXPECT_EQ(QUIC_VERSION_51, 51); - EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_25, 70); EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_27, 71); EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_29, 73); } TEST_F(QuicVersionsTest, AlpnForVersion) { - static_assert(SupportedVersions().size() == 8u, + static_assert(SupportedVersions().size() == 7u, "Supported versions out of sync"); EXPECT_EQ("h3-Q043", AlpnForVersion(ParsedQuicVersion::Q043())); EXPECT_EQ("h3-Q046", AlpnForVersion(ParsedQuicVersion::Q046())); EXPECT_EQ("h3-Q050", AlpnForVersion(ParsedQuicVersion::Q050())); EXPECT_EQ("h3-T050", AlpnForVersion(ParsedQuicVersion::T050())); EXPECT_EQ("h3-T051", AlpnForVersion(ParsedQuicVersion::T051())); - EXPECT_EQ("h3-25", AlpnForVersion(ParsedQuicVersion::Draft25())); EXPECT_EQ("h3-27", AlpnForVersion(ParsedQuicVersion::Draft27())); EXPECT_EQ("h3-29", AlpnForVersion(ParsedQuicVersion::Draft29())); }