Introduce QUIC version draft-28
This CL adds a new QUIC version and plumbs it where needed. It doesn't add any features specific to draft-28; those will come in subsequent CLs. The flag is marked enabling_blocked_by until then.
Introduce quic draft-28, protected by blocked flag gfe2_reloadable_flag_quic_enable_version_draft_28
PiperOrigin-RevId: 312770917
Change-Id: I89f8f41f902b1465b1c6d269177682865e7aae21
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index 8456a98..9e6a184 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -119,6 +119,7 @@
QUIC_VERSION_50 = 50, // Header protection and initial obfuscators.
QUIC_VERSION_IETF_DRAFT_25 = 70, // draft-ietf-quic-transport-25.
QUIC_VERSION_IETF_DRAFT_27 = 71, // draft-ietf-quic-transport-27.
+ QUIC_VERSION_IETF_DRAFT_28 = 72, // draft-ietf-quic-transport-28.
// Version 99 was a dumping ground for IETF QUIC changes which were not yet
// yet ready for production between 2018-02 and 2020-02.
@@ -133,8 +134,9 @@
// This array contains QUIC transport versions which we currently support.
// DEPRECATED. Use SupportedVersions() instead.
-constexpr std::array<QuicTransportVersion, 7> SupportedTransportVersions() {
- return {QUIC_VERSION_IETF_DRAFT_27,
+constexpr std::array<QuicTransportVersion, 8> SupportedTransportVersions() {
+ return {QUIC_VERSION_IETF_DRAFT_28,
+ QUIC_VERSION_IETF_DRAFT_27,
QUIC_VERSION_IETF_DRAFT_25,
QUIC_VERSION_50,
QUIC_VERSION_49,
@@ -196,7 +198,8 @@
case PROTOCOL_QUIC_CRYPTO:
return transport_version != QUIC_VERSION_UNSUPPORTED &&
transport_version != QUIC_VERSION_IETF_DRAFT_25 &&
- transport_version != QUIC_VERSION_IETF_DRAFT_27;
+ transport_version != QUIC_VERSION_IETF_DRAFT_27 &&
+ transport_version != QUIC_VERSION_IETF_DRAFT_28;
case PROTOCOL_TLS1_3:
// The TLS handshake is only deployable if CRYPTO frames are also used.
// We explicitly removed support for T048 and T049 to reduce test load.
@@ -336,6 +339,10 @@
// encoding transport parameter types and lengths.
bool HasVarIntTransportParams() const;
+ // Returns true if this version uses transport parameters to authenticate all
+ // the connection IDs used during the handshake.
+ bool AuthenticatesHandshakeConnectionIds() const;
+
// Returns whether this version uses PROTOCOL_TLS1_3.
bool UsesTls() const;
@@ -370,8 +377,9 @@
return {PROTOCOL_TLS1_3, PROTOCOL_QUIC_CRYPTO};
}
-constexpr std::array<ParsedQuicVersion, 8> SupportedVersions() {
+constexpr std::array<ParsedQuicVersion, 9> SupportedVersions() {
return {
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_28),
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27),
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25),
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50),