Deprecate QUIC versions T050 and Draft27 This CL deprecates gfe2_reloadable_flag_quic_disable_version_t050 and gfe2_reloadable_flag_quic_disable_version_draft_27, and removes the associated versions. There will be a followup CL to remove code that was specific to these versions. PiperOrigin-RevId: 345064178 Change-Id: I46661ba72cdfbeff734b5727a12c424825940896
diff --git a/quic/core/crypto/crypto_utils.cc b/quic/core/crypto/crypto_utils.cc index 452b85e..27c8ba8 100644 --- a/quic/core/crypto/crypto_utils.cc +++ b/quic/core/crypto/crypto_utils.cc
@@ -131,11 +131,6 @@ namespace { -// 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}; - // Salt from https://tools.ietf.org/html/draft-ietf-quic-tls-29#section-5.2 const uint8_t kDraft29InitialSalt[] = {0xaf, 0xbf, 0xec, 0x28, 0x99, 0x93, 0xd2, 0x4c, 0x9e, 0x97, 0x86, 0xf1, 0x9c, 0x61, @@ -148,10 +143,6 @@ const uint8_t kQ050Salt[] = {0x50, 0x45, 0x74, 0xef, 0xd0, 0x66, 0xfe, 0x2f, 0x9d, 0x94, 0x5c, 0xfc, 0xdb, 0xd3, 0xa7, 0xf0, 0xd3, 0xb5, 0x6b, 0x45}; -// Salt to use for initial obfuscators in version T050. -const uint8_t kT050Salt[] = {0x7f, 0xf5, 0x79, 0xe5, 0xac, 0xd0, 0x72, - 0x91, 0x55, 0x80, 0x30, 0x4c, 0x43, 0xa2, - 0x36, 0x7c, 0x60, 0x48, 0x83, 0x10}; // Salt to use for initial obfuscators in version T051. const uint8_t kT051Salt[] = {0x7a, 0x4e, 0xde, 0xf4, 0xe7, 0xcc, 0xee, 0x5f, 0xa4, 0x50, 0x6c, 0x19, 0x12, 0x4f, @@ -164,20 +155,14 @@ const uint8_t* InitialSaltForVersion(const ParsedQuicVersion& version, size_t* out_len) { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "Supported versions out of sync with initial encryption salts"); if (version == ParsedQuicVersion::Draft29()) { *out_len = ABSL_ARRAYSIZE(kDraft29InitialSalt); return kDraft29InitialSalt; - } else if (version == ParsedQuicVersion::Draft27()) { - *out_len = ABSL_ARRAYSIZE(kDraft27InitialSalt); - return kDraft27InitialSalt; } else if (version == ParsedQuicVersion::T051()) { *out_len = ABSL_ARRAYSIZE(kT051Salt); return kT051Salt; - } else if (version == ParsedQuicVersion::T050()) { - *out_len = ABSL_ARRAYSIZE(kT050Salt); - return kT050Salt; } else if (version == ParsedQuicVersion::Q050()) { *out_len = ABSL_ARRAYSIZE(kQ050Salt); return kQ050Salt; @@ -186,20 +171,13 @@ return kReservedForNegotiationSalt; } QUIC_BUG << "No initial obfuscation salt for version " << version; - *out_len = ABSL_ARRAYSIZE(kDraft27InitialSalt); - return kDraft27InitialSalt; + *out_len = ABSL_ARRAYSIZE(kReservedForNegotiationSalt); + return kReservedForNegotiationSalt; } const char kPreSharedKeyLabel[] = "QUIC PSK"; // Retry Integrity Protection Keys and Nonces. -// https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-5.8 -const uint8_t kDraft27RetryIntegrityKey[] = {0x4d, 0x32, 0xec, 0xdb, 0x2a, 0x21, - 0x33, 0xc8, 0x41, 0xe4, 0x04, 0x3d, - 0xf2, 0x7d, 0x44, 0x30}; -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 const uint8_t kDraft29RetryIntegrityKey[] = {0xcc, 0xce, 0x18, 0x7e, 0xd0, 0x9a, 0x09, 0xd0, 0x57, 0x28, 0x15, 0x5a, @@ -209,9 +187,6 @@ // Keys used by Google versions of QUIC. When introducing a new version, // generate a new key by running `openssl rand -hex 16`. -const uint8_t kT050RetryIntegrityKey[] = {0xc9, 0x2d, 0x32, 0x3d, 0x9c, 0xe3, - 0x0d, 0xa0, 0x88, 0xb9, 0xb7, 0xbb, - 0xdc, 0xcd, 0x50, 0xc8}; const uint8_t kT051RetryIntegrityKey[] = {0x2e, 0xb9, 0x61, 0xa6, 0x79, 0x56, 0xf8, 0x79, 0x53, 0x14, 0xda, 0xfb, 0x2e, 0xbc, 0x83, 0xd7}; @@ -221,8 +196,6 @@ 0x03, 0xe6, 0x7c, 0x7b, 0xd2, 0x44, 0xca, 0xd9}; // Nonces used by Google versions of QUIC. When introducing a new version, // generate a new nonce by running `openssl rand -hex 12`. -const uint8_t kT050RetryIntegrityNonce[] = {0x26, 0xe4, 0xd6, 0x23, 0x83, 0xd5, - 0xc7, 0x60, 0xea, 0x02, 0xb4, 0x1f}; const uint8_t kT051RetryIntegrityNonce[] = {0xb5, 0x0e, 0x4e, 0x53, 0x4c, 0xfc, 0x0b, 0xbb, 0x85, 0xf2, 0xf9, 0xca}; // Retry integrity nonce used by ParsedQuicVersion::ReservedForNegotiation(). @@ -232,7 +205,7 @@ bool RetryIntegrityKeysForVersion(const ParsedQuicVersion& version, absl::string_view* key, absl::string_view* nonce) { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "Supported versions out of sync with retry integrity keys"); if (!version.HasRetryIntegrityTag()) { QUIC_BUG << "Attempted to get retry integrity keys for invalid version " @@ -246,14 +219,6 @@ reinterpret_cast<const char*>(kDraft29RetryIntegrityNonce), ABSL_ARRAYSIZE(kDraft29RetryIntegrityNonce)); return true; - } else if (version == ParsedQuicVersion::Draft27()) { - *key = absl::string_view( - reinterpret_cast<const char*>(kDraft27RetryIntegrityKey), - ABSL_ARRAYSIZE(kDraft27RetryIntegrityKey)); - *nonce = absl::string_view( - reinterpret_cast<const char*>(kDraft27RetryIntegrityNonce), - ABSL_ARRAYSIZE(kDraft27RetryIntegrityNonce)); - return true; } else if (version == ParsedQuicVersion::T051()) { *key = absl::string_view(reinterpret_cast<const char*>(kT051RetryIntegrityKey), @@ -262,14 +227,6 @@ reinterpret_cast<const char*>(kT051RetryIntegrityNonce), ABSL_ARRAYSIZE(kT051RetryIntegrityNonce)); return true; - } else if (version == ParsedQuicVersion::T050()) { - *key = - absl::string_view(reinterpret_cast<const char*>(kT050RetryIntegrityKey), - ABSL_ARRAYSIZE(kT050RetryIntegrityKey)); - *nonce = absl::string_view( - reinterpret_cast<const char*>(kT050RetryIntegrityNonce), - ABSL_ARRAYSIZE(kT050RetryIntegrityNonce)); - return true; } else if (version == ParsedQuicVersion::ReservedForNegotiation()) { *key = absl::string_view( reinterpret_cast<const char*>(kReservedForNegotiationRetryIntegrityKey),
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc index 2d73601..783913e 100644 --- a/quic/core/quic_connection_test.cc +++ b/quic/core/quic_connection_test.cc
@@ -9874,10 +9874,6 @@ } // These values come from draft-ietf-quic-tls Appendix A.4. - 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, - 0xa5, 0x24, 0x69, 0x5f, 0x65, 0x69, 0xf2, 0x93, 0xa1, 0x35, 0x9d, 0x8e}; char retry_packet29[] = { 0xff, 0xff, 0x00, 0x00, 0x1d, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0xd1, 0x69, 0x26, 0xd8, @@ -9888,9 +9884,6 @@ if (version() == ParsedQuicVersion::Draft29()) { retry_packet = retry_packet29; retry_packet_length = ABSL_ARRAYSIZE(retry_packet29); - } else if (version() == ParsedQuicVersion::Draft27()) { - retry_packet = retry_packet27; - retry_packet_length = ABSL_ARRAYSIZE(retry_packet27); } 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 9f692a8..a8d4068 100644 --- a/quic/core/quic_dispatcher_test.cc +++ b/quic/core/quic_dispatcher_test.cc
@@ -1149,6 +1149,23 @@ } TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionDraft27WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 0xFF, 0x00, 0x00, 27, /*destination connection ID length*/ 0x08}; + QuicReceivedPacket received_packet(packet, ABSL_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(); @@ -1166,6 +1183,23 @@ } TEST_P(QuicDispatcherTestOneVersion, + RejectDeprecatedVersionT050WithVersionNegotiation) { + QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); + CreateTimeWaitListManager(); + char packet[kMinPacketSizeForVersionNegotiation] = { + 0xC0, 'T', '0', '5', '0', /*destination connection ID length*/ 0x08}; + QuicReceivedPacket received_packet(packet, ABSL_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(); @@ -1251,7 +1285,7 @@ received_packet44); } -static_assert(quic::SupportedVersions().size() == 7u, +static_assert(quic::SupportedVersions().size() == 5u, "Please add new RejectDeprecatedVersion tests above this assert " "when deprecating versions");
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h index 6ff53dc..69b6bc3 100644 --- a/quic/core/quic_flags_list.h +++ b/quic/core/quic_flags_list.h
@@ -24,12 +24,10 @@ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_delay_initial_ack, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_deprecate_http2_priority_experiment, false) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_server_blackhole_detection, false) -QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_draft_27, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_draft_29, false) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_q043, false) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_q046, false) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_q050, false) -QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_t050, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_t051, false) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_do_not_clip_received_error_code, true)
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc index 7f49eba..946e152 100644 --- a/quic/core/quic_version_manager.cc +++ b/quic/core/quic_version_manager.cc
@@ -17,15 +17,12 @@ ParsedQuicVersionVector supported_versions) : disable_version_draft_29_( GetQuicReloadableFlag(quic_disable_version_draft_29)), - disable_version_draft_27_( - GetQuicReloadableFlag(quic_disable_version_draft_27)), disable_version_t051_(GetQuicReloadableFlag(quic_disable_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() == 7u, + static_assert(SupportedVersions().size() == 5u, "Supported versions out of sync"); RefilterSupportedVersions(); } @@ -49,16 +46,12 @@ } void QuicVersionManager::MaybeRefilterSupportedVersions() { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "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_t051_ != GetQuicReloadableFlag(quic_disable_version_t051) || - disable_version_t050_ != - GetQuicReloadableFlag(quic_disable_version_t050) || disable_version_q050_ != GetQuicReloadableFlag(quic_disable_version_q050) || disable_version_q046_ != @@ -67,10 +60,7 @@ GetQuicReloadableFlag(quic_disable_version_q043)) { disable_version_draft_29_ = GetQuicReloadableFlag(quic_disable_version_draft_29); - disable_version_draft_27_ = - GetQuicReloadableFlag(quic_disable_version_draft_27); disable_version_t051_ = GetQuicReloadableFlag(quic_disable_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);
diff --git a/quic/core/quic_version_manager.h b/quic/core/quic_version_manager.h index d3e62e4..d38019c 100644 --- a/quic/core/quic_version_manager.h +++ b/quic/core/quic_version_manager.h
@@ -52,12 +52,8 @@ // Cached value of reloadable flags. // quic_disable_version_draft_29 flag bool disable_version_draft_29_; - // quic_disable_version_draft_27 flag - bool disable_version_draft_27_; // quic_disable_version_t051 flag bool disable_version_t051_; - // quic_disable_version_t050 flag - bool disable_version_t050_; // quic_disable_version_q050 flag bool disable_version_q050_; // quic_disable_version_q046 flag
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc index 487471f..b1a67ee 100644 --- a/quic/core/quic_version_manager_test.cc +++ b/quic/core/quic_version_manager_test.cc
@@ -18,18 +18,16 @@ class QuicVersionManagerTest : public QuicTest {}; TEST_F(QuicVersionManagerTest, QuicVersionManager) { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "Supported versions out of sync"); for (const ParsedQuicVersion& version : AllSupportedVersions()) { QuicEnableVersion(version); } QuicDisableVersion(ParsedQuicVersion::Draft29()); - QuicDisableVersion(ParsedQuicVersion::Draft27()); + QuicDisableVersion(ParsedQuicVersion::T051()); QuicVersionManager manager(AllSupportedVersions()); ParsedQuicVersionVector expected_parsed_versions; - expected_parsed_versions.push_back(ParsedQuicVersion::T051()); - expected_parsed_versions.push_back(ParsedQuicVersion::T050()); expected_parsed_versions.push_back(ParsedQuicVersion::Q050()); expected_parsed_versions.push_back(ParsedQuicVersion::Q046()); expected_parsed_versions.push_back(ParsedQuicVersion::Q043()); @@ -40,39 +38,36 @@ manager.GetSupportedVersions()); EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(), manager.GetSupportedVersionsWithQuicCrypto()); - EXPECT_THAT( - manager.GetSupportedAlpns(), - ElementsAre("h3-T051", "h3-T050", "h3-Q050", "h3-Q046", "h3-Q043")); + EXPECT_THAT(manager.GetSupportedAlpns(), + ElementsAre("h3-Q050", "h3-Q046", "h3-Q043")); int offset = 0; QuicEnableVersion(ParsedQuicVersion::Draft29()); expected_parsed_versions.insert(expected_parsed_versions.begin() + offset, ParsedQuicVersion::Draft29()); EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions()); - EXPECT_EQ(expected_parsed_versions.size() - 3 - offset, + EXPECT_EQ(expected_parsed_versions.size() - 1 - offset, manager.GetSupportedVersionsWithQuicCrypto().size()); EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()), manager.GetSupportedVersions()); EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(), manager.GetSupportedVersionsWithQuicCrypto()); EXPECT_THAT(manager.GetSupportedAlpns(), - ElementsAre("h3-29", "h3-T051", "h3-T050", "h3-Q050", "h3-Q046", - "h3-Q043")); + ElementsAre("h3-29", "h3-Q050", "h3-Q046", "h3-Q043")); offset++; - QuicEnableVersion(ParsedQuicVersion::Draft27()); + QuicEnableVersion(ParsedQuicVersion::T051()); expected_parsed_versions.insert(expected_parsed_versions.begin() + offset, - ParsedQuicVersion::Draft27()); + ParsedQuicVersion::T051()); EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions()); - EXPECT_EQ(expected_parsed_versions.size() - 3 - offset, + EXPECT_EQ(expected_parsed_versions.size() - 1 - offset, manager.GetSupportedVersionsWithQuicCrypto().size()); EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()), manager.GetSupportedVersions()); EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(), manager.GetSupportedVersionsWithQuicCrypto()); EXPECT_THAT(manager.GetSupportedAlpns(), - ElementsAre("h3-29", "h3-27", "h3-T051", "h3-T050", "h3-Q050", - "h3-Q046", "h3-Q043")); + ElementsAre("h3-29", "h3-T051", "h3-Q050", "h3-Q046", "h3-Q043")); } } // namespace
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc index 6bda82b..05b9918 100644 --- a/quic/core/quic_versions.cc +++ b/quic/core/quic_versions.cc
@@ -42,18 +42,14 @@ } void SetVersionFlag(const ParsedQuicVersion& version, bool should_enable) { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "Supported versions out of sync"); const bool enable = should_enable; const bool disable = !should_enable; if (version == ParsedQuicVersion::Draft29()) { SetQuicReloadableFlag(quic_disable_version_draft_29, disable); - } else if (version == ParsedQuicVersion::Draft27()) { - SetQuicReloadableFlag(quic_disable_version_draft_27, disable); } else if (version == ParsedQuicVersion::T051()) { SetQuicReloadableFlag(quic_disable_version_t051, disable); - } else if (version == ParsedQuicVersion::T050()) { - SetQuicReloadableFlag(quic_disable_version_t050, disable); } else if (version == ParsedQuicVersion::Q050()) { SetQuicReloadableFlag(quic_disable_version_q050, disable); } else if (version == ParsedQuicVersion::Q046()) { @@ -180,22 +176,21 @@ bool ParsedQuicVersion::HasHandshakeDone() const { DCHECK(IsKnown()); // HANDSHAKE_DONE is supported in T051 and all IETF drafts since draft-25. - return UsesTls() && transport_version > QUIC_VERSION_50; + return UsesTls(); } bool ParsedQuicVersion::HasVarIntTransportParams() const { 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; + return UsesTls(); } bool ParsedQuicVersion::AuthenticatesHandshakeConnectionIds() const { DCHECK(IsKnown()); // 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_27; + return UsesTls(); } bool ParsedQuicVersion::UsesTls() const { @@ -239,16 +234,12 @@ } QuicVersionLabel CreateQuicVersionLabel(ParsedQuicVersion parsed_version) { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "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::T051()) { return MakeVersionLabel('T', '0', '5', '1'); - } else if (parsed_version == ParsedQuicVersion::T050()) { - return MakeVersionLabel('T', '0', '5', '0'); } else if (parsed_version == ParsedQuicVersion::Q050()) { return MakeVersionLabel('Q', '0', '5', '0'); } else if (parsed_version == ParsedQuicVersion::Q046()) { @@ -417,18 +408,10 @@ if (!GetQuicReloadableFlag(quic_disable_version_draft_29)) { filtered_versions.push_back(version); } - } else if (version == ParsedQuicVersion::Draft27()) { - if (!GetQuicReloadableFlag(quic_disable_version_draft_27)) { - filtered_versions.push_back(version); - } } else if (version == ParsedQuicVersion::T051()) { if (!GetQuicReloadableFlag(quic_disable_version_t051)) { filtered_versions.push_back(version); } - } else if (version == ParsedQuicVersion::T050()) { - if (!GetQuicReloadableFlag(quic_disable_version_t050)) { - filtered_versions.push_back(version); - } } else if (version == ParsedQuicVersion::Q050()) { if (!GetQuicReloadableFlag(quic_disable_version_q050)) { filtered_versions.push_back(version); @@ -529,14 +512,13 @@ return #x std::string QuicVersionToString(QuicTransportVersion transport_version) { - static_assert(SupportedTransportVersions().size() == 6u, + static_assert(SupportedTransportVersions().size() == 5u, "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_27); RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_29); RETURN_STRING_LITERAL(QUIC_VERSION_UNSUPPORTED); RETURN_STRING_LITERAL(QUIC_VERSION_RESERVED_FOR_NEGOTIATION); @@ -556,7 +538,7 @@ } std::string ParsedQuicVersionToString(ParsedQuicVersion version) { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "Supported versions out of sync"); if (version == UnsupportedQuicVersion()) { return "0"; @@ -564,9 +546,6 @@ if (version == ParsedQuicVersion::Draft29()) { DCHECK(version.UsesHttp3()); return "draft29"; - } else if (version == ParsedQuicVersion::Draft27()) { - DCHECK(version.UsesHttp3()); - return "draft27"; } return QuicVersionLabelToString(CreateQuicVersionLabel(version)); @@ -655,8 +634,6 @@ std::string AlpnForVersion(ParsedQuicVersion parsed_version) { if (parsed_version == ParsedQuicVersion::Draft29()) { return "h3-29"; - } else if (parsed_version == ParsedQuicVersion::Draft27()) { - return "h3-27"; } return "h3-" + ParsedQuicVersionToString(parsed_version); }
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h index c8f6718..60d50bf 100644 --- a/quic/core/quic_versions.h +++ b/quic/core/quic_versions.h
@@ -119,7 +119,7 @@ QUIC_VERSION_50 = 50, // Header protection and initial obfuscators. QUIC_VERSION_51 = 51, // draft-29 features but with GoogleQUIC frames. // Number 70 used to represent draft-ietf-quic-transport-25. - QUIC_VERSION_IETF_DRAFT_27 = 71, // draft-ietf-quic-transport-27. + // Number 71 used to represent 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. // Version 99 was a dumping ground for IETF QUIC changes which were not yet @@ -136,9 +136,8 @@ // This array contains QUIC transport versions which we currently support. // DEPRECATED. Use SupportedVersions() instead. -constexpr std::array<QuicTransportVersion, 6> SupportedTransportVersions() { +constexpr std::array<QuicTransportVersion, 5> SupportedTransportVersions() { return {QUIC_VERSION_IETF_DRAFT_29, - QUIC_VERSION_IETF_DRAFT_27, QUIC_VERSION_51, QUIC_VERSION_50, QUIC_VERSION_46, @@ -202,10 +201,10 @@ return transport_version != QUIC_VERSION_UNSUPPORTED && transport_version != QUIC_VERSION_RESERVED_FOR_NEGOTIATION && transport_version != QUIC_VERSION_51 && - transport_version != QUIC_VERSION_IETF_DRAFT_27 && transport_version != QUIC_VERSION_IETF_DRAFT_29; case PROTOCOL_TLS1_3: return transport_version != QUIC_VERSION_UNSUPPORTED && + transport_version != QUIC_VERSION_50 && QuicVersionUsesCryptoFrames(transport_version); } return false; @@ -255,18 +254,10 @@ return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_29); } - static constexpr ParsedQuicVersion Draft27() { - return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27); - } - static constexpr ParsedQuicVersion T051() { return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_51); } - static constexpr ParsedQuicVersion T050() { - return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50); - } - static constexpr ParsedQuicVersion Q050() { return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50); } @@ -419,10 +410,9 @@ return {PROTOCOL_TLS1_3, PROTOCOL_QUIC_CRYPTO}; } -constexpr std::array<ParsedQuicVersion, 7> SupportedVersions() { +constexpr std::array<ParsedQuicVersion, 5> SupportedVersions() { return { - ParsedQuicVersion::Draft29(), ParsedQuicVersion::Draft27(), - ParsedQuicVersion::T051(), ParsedQuicVersion::T050(), + ParsedQuicVersion::Draft29(), ParsedQuicVersion::T051(), ParsedQuicVersion::Q050(), ParsedQuicVersion::Q046(), ParsedQuicVersion::Q043(), }; @@ -495,7 +485,7 @@ QUIC_EXPORT_PRIVATE ParsedQuicVersion ParseQuicVersionLabel(QuicVersionLabel version_label); -// Parses a QUIC version string such as "Q043" or "T050". Also supports parsing +// Parses a QUIC version string such as "Q043" or "T051". Also supports parsing // ALPN such as "h3-29" or "h3-Q050". For PROTOCOL_QUIC_CRYPTO versions, also // supports parsing numbers such as "46". QUIC_EXPORT_PRIVATE ParsedQuicVersion
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc index 452f3f8..fe4e227 100644 --- a/quic/core/quic_versions_test.cc +++ b/quic/core/quic_versions_test.cc
@@ -74,7 +74,7 @@ // Check that invalid combinations are not valid. EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_TLS1_3, QUIC_VERSION_43)); EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO, - QUIC_VERSION_IETF_DRAFT_27)); + QUIC_VERSION_IETF_DRAFT_29)); // Check that deprecated versions are not valid. EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO, static_cast<QuicTransportVersion>(33))); @@ -86,7 +86,7 @@ TEST_F(QuicVersionsTest, Features) { ParsedQuicVersion parsed_version_q043 = ParsedQuicVersion::Q043(); - ParsedQuicVersion parsed_version_draft_27 = ParsedQuicVersion::Draft27(); + ParsedQuicVersion parsed_version_draft_29 = ParsedQuicVersion::Draft29(); EXPECT_TRUE(parsed_version_q043.IsKnown()); EXPECT_FALSE(parsed_version_q043.KnowsWhichDecrypterToUse()); @@ -111,34 +111,36 @@ EXPECT_FALSE(parsed_version_q043.HasIetfQuicFrames()); EXPECT_FALSE(parsed_version_q043.HasHandshakeDone()); EXPECT_FALSE(parsed_version_q043.HasVarIntTransportParams()); + EXPECT_FALSE(parsed_version_q043.AuthenticatesHandshakeConnectionIds()); EXPECT_FALSE(parsed_version_q043.UsesTls()); EXPECT_TRUE(parsed_version_q043.UsesQuicCrypto()); - EXPECT_TRUE(parsed_version_draft_27.IsKnown()); - EXPECT_TRUE(parsed_version_draft_27.KnowsWhichDecrypterToUse()); - EXPECT_TRUE(parsed_version_draft_27.UsesInitialObfuscators()); - EXPECT_TRUE(parsed_version_draft_27.AllowsLowFlowControlLimits()); - EXPECT_TRUE(parsed_version_draft_27.HasHeaderProtection()); - EXPECT_TRUE(parsed_version_draft_27.SupportsRetry()); - EXPECT_TRUE(parsed_version_draft_27.HasRetryIntegrityTag()); + EXPECT_TRUE(parsed_version_draft_29.IsKnown()); + EXPECT_TRUE(parsed_version_draft_29.KnowsWhichDecrypterToUse()); + EXPECT_TRUE(parsed_version_draft_29.UsesInitialObfuscators()); + EXPECT_TRUE(parsed_version_draft_29.AllowsLowFlowControlLimits()); + EXPECT_TRUE(parsed_version_draft_29.HasHeaderProtection()); + EXPECT_TRUE(parsed_version_draft_29.SupportsRetry()); + EXPECT_TRUE(parsed_version_draft_29.HasRetryIntegrityTag()); EXPECT_TRUE( - parsed_version_draft_27.SendsVariableLengthPacketNumberInLongHeader()); - EXPECT_TRUE(parsed_version_draft_27.AllowsVariableLengthConnectionIds()); - EXPECT_TRUE(parsed_version_draft_27.SupportsClientConnectionIds()); - EXPECT_TRUE(parsed_version_draft_27.HasLengthPrefixedConnectionIds()); - EXPECT_TRUE(parsed_version_draft_27.SupportsAntiAmplificationLimit()); - EXPECT_TRUE(parsed_version_draft_27.CanSendCoalescedPackets()); - EXPECT_FALSE(parsed_version_draft_27.SupportsGoogleAltSvcFormat()); - EXPECT_TRUE(parsed_version_draft_27.HasIetfInvariantHeader()); - EXPECT_TRUE(parsed_version_draft_27.SupportsMessageFrames()); - EXPECT_TRUE(parsed_version_draft_27.UsesHttp3()); - EXPECT_TRUE(parsed_version_draft_27.HasLongHeaderLengths()); - EXPECT_TRUE(parsed_version_draft_27.UsesCryptoFrames()); - EXPECT_TRUE(parsed_version_draft_27.HasIetfQuicFrames()); - EXPECT_TRUE(parsed_version_draft_27.HasHandshakeDone()); - EXPECT_TRUE(parsed_version_draft_27.HasVarIntTransportParams()); - EXPECT_TRUE(parsed_version_draft_27.UsesTls()); - EXPECT_FALSE(parsed_version_draft_27.UsesQuicCrypto()); + parsed_version_draft_29.SendsVariableLengthPacketNumberInLongHeader()); + EXPECT_TRUE(parsed_version_draft_29.AllowsVariableLengthConnectionIds()); + EXPECT_TRUE(parsed_version_draft_29.SupportsClientConnectionIds()); + EXPECT_TRUE(parsed_version_draft_29.HasLengthPrefixedConnectionIds()); + EXPECT_TRUE(parsed_version_draft_29.SupportsAntiAmplificationLimit()); + EXPECT_TRUE(parsed_version_draft_29.CanSendCoalescedPackets()); + EXPECT_FALSE(parsed_version_draft_29.SupportsGoogleAltSvcFormat()); + EXPECT_TRUE(parsed_version_draft_29.HasIetfInvariantHeader()); + EXPECT_TRUE(parsed_version_draft_29.SupportsMessageFrames()); + EXPECT_TRUE(parsed_version_draft_29.UsesHttp3()); + EXPECT_TRUE(parsed_version_draft_29.HasLongHeaderLengths()); + EXPECT_TRUE(parsed_version_draft_29.UsesCryptoFrames()); + EXPECT_TRUE(parsed_version_draft_29.HasIetfQuicFrames()); + EXPECT_TRUE(parsed_version_draft_29.HasHandshakeDone()); + EXPECT_TRUE(parsed_version_draft_29.HasVarIntTransportParams()); + EXPECT_TRUE(parsed_version_draft_29.AuthenticatesHandshakeConnectionIds()); + EXPECT_TRUE(parsed_version_draft_29.UsesTls()); + EXPECT_FALSE(parsed_version_draft_29.UsesQuicCrypto()); } TEST_F(QuicVersionsTest, QuicVersionLabelToQuicTransportVersion) { @@ -192,18 +194,10 @@ log.StartCapturingLogs(); for (const ParsedQuicVersion& version : AllSupportedVersions()) { - if (version.handshake_protocol != PROTOCOL_QUIC_CRYPTO) { - continue; - } - QuicVersionLabel version_label = - QuicVersionToQuicVersionLabel(version.transport_version); - EXPECT_EQ(PROTOCOL_QUIC_CRYPTO, + QuicVersionLabel version_label = CreateQuicVersionLabel(version); + EXPECT_EQ(version.handshake_protocol, QuicVersionLabelToHandshakeProtocol(version_label)); } - - // Test a TLS version: - QuicTag tls_tag = MakeQuicTag('0', '5', '0', 'T'); - EXPECT_EQ(PROTOCOL_TLS1_3, QuicVersionLabelToHandshakeProtocol(tls_tag)); } TEST_F(QuicVersionsTest, ParseQuicVersionLabel) { @@ -213,8 +207,10 @@ ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '4', '6'))); EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '5', '0'))); - EXPECT_EQ(ParsedQuicVersion::T050(), - ParseQuicVersionLabel(MakeVersionLabel('T', '0', '5', '0'))); + EXPECT_EQ(ParsedQuicVersion::T051(), + ParseQuicVersionLabel(MakeVersionLabel('T', '0', '5', '1'))); + EXPECT_EQ(ParsedQuicVersion::Draft29(), + ParseQuicVersionLabel(MakeVersionLabel(0xff, 0x00, 0x00, 0x1d))); } TEST_F(QuicVersionsTest, ParseQuicVersionString) { @@ -226,6 +222,8 @@ EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionString("Q050")); EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionString("50")); EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionString("h3-Q050")); + EXPECT_EQ(ParsedQuicVersion::T051(), ParseQuicVersionString("T051")); + EXPECT_EQ(ParsedQuicVersion::T051(), ParseQuicVersionString("h3-T051")); EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString("")); EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString("Q 46")); @@ -233,14 +231,9 @@ EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString("99")); EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString("70")); - EXPECT_EQ(ParsedQuicVersion::T050(), ParseQuicVersionString("T050")); - EXPECT_EQ(ParsedQuicVersion::T050(), ParseQuicVersionString("h3-T050")); EXPECT_EQ(ParsedQuicVersion::Draft29(), ParseQuicVersionString("ff00001d")); EXPECT_EQ(ParsedQuicVersion::Draft29(), ParseQuicVersionString("draft29")); EXPECT_EQ(ParsedQuicVersion::Draft29(), ParseQuicVersionString("h3-29")); - EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("ff00001b")); - EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("draft27")); - EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("h3-27")); for (const ParsedQuicVersion& version : AllSupportedVersions()) { EXPECT_EQ(version, @@ -249,11 +242,9 @@ } TEST_F(QuicVersionsTest, ParseQuicVersionVectorString) { - 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_27(PROTOCOL_TLS1_3, - QUIC_VERSION_IETF_DRAFT_27); + ParsedQuicVersion version_q046 = ParsedQuicVersion::Q046(); + ParsedQuicVersion version_q050 = ParsedQuicVersion::Q050(); + ParsedQuicVersion version_t051 = ParsedQuicVersion::T051(); ParsedQuicVersion version_draft_29 = ParsedQuicVersion::Draft29(); EXPECT_THAT(ParseQuicVersionVectorString(""), IsEmpty()); @@ -262,35 +253,35 @@ ElementsAre(version_q050)); EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050"), ElementsAre(version_q050)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-T050"), - ElementsAre(version_t050)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051"), + ElementsAre(version_t051)); - 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)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, h3-29"), + ElementsAre(version_t051, version_draft_29)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-T051,h3-29"), + ElementsAre(version_draft_29, version_t051)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-T051, h3-29"), + ElementsAre(version_draft_29, version_t051)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051,h3-29"), + ElementsAre(version_t051, version_draft_29)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-T051"), + ElementsAre(version_draft_29, version_t051)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-27,50"), - ElementsAre(version_draft_27, version_q050)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051,50"), + ElementsAre(version_t051, version_q050)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, h3-T050"), - ElementsAre(version_q050, version_t050)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-T050, h3-Q050"), - ElementsAre(version_t050, version_q050)); - EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50,h3-T050"), - ElementsAre(version_q050, version_t050)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-T050,QUIC_VERSION_50"), - ElementsAre(version_t050, version_q050)); - EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T050"), - ElementsAre(version_q050, version_t050)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-T050, QUIC_VERSION_50"), - ElementsAre(version_t050, version_q050)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, h3-T051"), + ElementsAre(version_q050, version_t051)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, h3-Q050"), + ElementsAre(version_t051, version_q050)); + EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50,h3-T051"), + ElementsAre(version_q050, version_t051)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051,QUIC_VERSION_50"), + ElementsAre(version_t051, version_q050)); + EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T051"), + ElementsAre(version_q050, version_t051)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, QUIC_VERSION_50"), + ElementsAre(version_t051, version_q050)); EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50,QUIC_VERSION_46"), ElementsAre(version_q050, version_q046)); @@ -302,15 +293,15 @@ ElementsAre(version_q050)); EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, h3-Q050"), ElementsAre(version_q050)); - EXPECT_THAT(ParseQuicVersionVectorString("h3-T050, h3-T050"), - ElementsAre(version_t050)); + EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, h3-T051"), + ElementsAre(version_t051)); EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, QUIC_VERSION_50"), ElementsAre(version_q050)); EXPECT_THAT(ParseQuicVersionVectorString( "QUIC_VERSION_50, h3-Q050, QUIC_VERSION_50, h3-Q050"), ElementsAre(version_q050)); - EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T050, h3-Q050"), - ElementsAre(version_q050, version_t050)); + EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T051, h3-Q050"), + ElementsAre(version_q050, version_t051)); EXPECT_THAT(ParseQuicVersionVectorString("99"), IsEmpty()); EXPECT_THAT(ParseQuicVersionVectorString("70"), IsEmpty()); @@ -328,8 +319,8 @@ CreateQuicVersionLabel(ParsedQuicVersion::Q050())); // Test a TLS version: - EXPECT_EQ(MakeVersionLabel('T', '0', '5', '0'), - CreateQuicVersionLabel(ParsedQuicVersion::T050())); + EXPECT_EQ(MakeVersionLabel('T', '0', '5', '1'), + CreateQuicVersionLabel(ParsedQuicVersion::T051())); // Make sure the negotiation reserved version is in the IETF reserved space. EXPECT_EQ( @@ -402,8 +393,7 @@ EXPECT_EQ("Q043", ParsedQuicVersionToString(ParsedQuicVersion::Q043())); EXPECT_EQ("Q046", ParsedQuicVersionToString(ParsedQuicVersion::Q046())); EXPECT_EQ("Q050", ParsedQuicVersionToString(ParsedQuicVersion::Q050())); - EXPECT_EQ("T050", ParsedQuicVersionToString(ParsedQuicVersion::T050())); - EXPECT_EQ("draft27", ParsedQuicVersionToString(ParsedQuicVersion::Draft27())); + EXPECT_EQ("T051", ParsedQuicVersionToString(ParsedQuicVersion::T051())); EXPECT_EQ("draft29", ParsedQuicVersionToString(ParsedQuicVersion::Draft29())); ParsedQuicVersionVector versions_vector = {ParsedQuicVersion::Q043()}; @@ -494,25 +484,22 @@ // 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() == 6u, + static_assert(SupportedTransportVersions().size() == 5u, "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_27, 71); EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_29, 73); } TEST_F(QuicVersionsTest, AlpnForVersion) { - static_assert(SupportedVersions().size() == 7u, + static_assert(SupportedVersions().size() == 5u, "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-27", AlpnForVersion(ParsedQuicVersion::Draft27())); EXPECT_EQ("h3-29", AlpnForVersion(ParsedQuicVersion::Draft29())); }