Introduce Legacy Version Encapsulation

This feature allows modern QUIC versions to encapsulate their first flight in Q043 packets, to support SNI-extraction middleboxes that do not support modern versions. More details in the design document at <go/quic-legacy-encaps>.

Introduce legacy version encapsulation, protected by gfe2_reloadable_flag_quic_dispatcher_legacy_version_encapsulation.

PiperOrigin-RevId: 317921151
Change-Id: I2dd8a3641caf3fd3d283613de3d117c1bdbea632
diff --git a/quic/core/quic_packet_creator.h b/quic/core/quic_packet_creator.h
index 743e46e..d71a1af 100644
--- a/quic/core/quic_packet_creator.h
+++ b/quic/core/quic_packet_creator.h
@@ -255,6 +255,7 @@
   void set_encryption_level(EncryptionLevel level) {
     packet_.encryption_level = level;
   }
+  EncryptionLevel encryption_level() { return packet_.encryption_level; }
 
   // packet number of the last created packet, or 0 if no packets have been
   // created.
@@ -429,6 +430,10 @@
                                   char* buffer,
                                   size_t buffer_len);
 
+  void set_disable_padding_override(bool should_disable_padding) {
+    disable_padding_override_ = should_disable_padding;
+  }
+
  private:
   friend class test::QuicPacketCreatorPeer;
 
@@ -604,6 +609,9 @@
 
   const bool fix_min_crypto_frame_size_ =
       GetQuicReloadableFlag(quic_fix_min_crypto_frame_size);
+
+  // When true, this will override the padding generation code to disable it.
+  bool disable_padding_override_ = false;
 };
 
 }  // namespace quic