Add support for IETF QUIC draft 29

This version marks the IETF Working Group Last Call, and is expected to be stable for quite some time.

Add new quic version, protected by gfe2_reloadable_flag_quic_enable_version_draft_29

PiperOrigin-RevId: 315947833
Change-Id: Ic8227cdb106bb3e80bdbf157645f6d7ddeacdd07
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index 7a1d73f..227e20a 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -120,6 +120,7 @@
   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.
+  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
   // yet ready for production between 2018-02 and 2020-02.
 
@@ -134,8 +135,9 @@
 
 // This array contains QUIC transport versions which we currently support.
 // DEPRECATED. Use SupportedVersions() instead.
-constexpr std::array<QuicTransportVersion, 8> SupportedTransportVersions() {
-  return {QUIC_VERSION_IETF_DRAFT_28,
+constexpr std::array<QuicTransportVersion, 9> SupportedTransportVersions() {
+  return {QUIC_VERSION_IETF_DRAFT_29,
+          QUIC_VERSION_IETF_DRAFT_28,
           QUIC_VERSION_IETF_DRAFT_27,
           QUIC_VERSION_IETF_DRAFT_25,
           QUIC_VERSION_50,
@@ -199,7 +201,8 @@
       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_28;
+             transport_version != QUIC_VERSION_IETF_DRAFT_28 &&
+             transport_version != QUIC_VERSION_IETF_DRAFT_29;
     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.
@@ -250,6 +253,10 @@
            transport_version != other.transport_version;
   }
 
+  static constexpr ParsedQuicVersion Draft29() {
+    return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_29);
+  }
+
   static constexpr ParsedQuicVersion Draft28() {
     return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_28);
   }
@@ -422,13 +429,13 @@
   return {PROTOCOL_TLS1_3, PROTOCOL_QUIC_CRYPTO};
 }
 
-constexpr std::array<ParsedQuicVersion, 9> SupportedVersions() {
+constexpr std::array<ParsedQuicVersion, 10> SupportedVersions() {
   return {
-      ParsedQuicVersion::Draft28(), ParsedQuicVersion::Draft27(),
-      ParsedQuicVersion::Draft25(), ParsedQuicVersion::T050(),
-      ParsedQuicVersion::Q050(),    ParsedQuicVersion::Q049(),
-      ParsedQuicVersion::Q048(),    ParsedQuicVersion::Q046(),
-      ParsedQuicVersion::Q043(),
+      ParsedQuicVersion::Draft29(), ParsedQuicVersion::Draft28(),
+      ParsedQuicVersion::Draft27(), ParsedQuicVersion::Draft25(),
+      ParsedQuicVersion::T050(),    ParsedQuicVersion::Q050(),
+      ParsedQuicVersion::Q049(),    ParsedQuicVersion::Q048(),
+      ParsedQuicVersion::Q046(),    ParsedQuicVersion::Q043(),
   };
 }