gfe-relnote: In QUIC, Enable multiple packet number support in uber_received_packet_manager. Not used yet, not protected.

PiperOrigin-RevId: 239821420
Change-Id: Iae12d214d8ecf65dfe4918f12e528ea1001ce5f2
diff --git a/quic/core/uber_received_packet_manager.h b/quic/core/uber_received_packet_manager.h
index 367a7c0..62348b9 100644
--- a/quic/core/uber_received_packet_manager.h
+++ b/quic/core/uber_received_packet_manager.h
@@ -9,7 +9,9 @@
 
 namespace quic {
 
-// This class simply wraps a single received packet manager.
+// This class comprises multiple received packet managers, one per packet number
+// space. Please note, if multiple packet number spaces is not supported, only
+// one received packet manager will be used.
 class QUIC_EXPORT_PRIVATE UberReceivedPacketManager {
  public:
   explicit UberReceivedPacketManager(QuicConnectionStats* stats);
@@ -21,23 +23,28 @@
   void SetFromConfig(const QuicConfig& config, Perspective perspective);
 
   // Checks if we are still waiting for the packet with |packet_number|.
-  bool IsAwaitingPacket(QuicPacketNumber packet_number) const;
+  bool IsAwaitingPacket(EncryptionLevel decrypted_packet_level,
+                        QuicPacketNumber packet_number) const;
 
   // Called after a packet has been successfully decrypted and its header has
   // been parsed.
-  void RecordPacketReceived(const QuicPacketHeader& header,
+  void RecordPacketReceived(EncryptionLevel decrypted_packet_level,
+                            const QuicPacketHeader& header,
                             QuicTime receipt_time);
 
   // Retrieves a frame containing a QuicAckFrame. The ack frame must be
   // serialized before another packet is received, or it will change.
-  const QuicFrame GetUpdatedAckFrame(QuicTime approximate_now);
+  const QuicFrame GetUpdatedAckFrame(PacketNumberSpace packet_number_space,
+                                     QuicTime approximate_now);
 
   // Stop ACKing packets before |least_unacked|.
-  void DontWaitForPacketsBefore(QuicPacketNumber least_unacked);
+  void DontWaitForPacketsBefore(EncryptionLevel decrypted_packet_level,
+                                QuicPacketNumber least_unacked);
 
   // Called after header of last received packet has been successfully processed
   // to update ACK timeout.
   void MaybeUpdateAckTimeout(bool should_last_packet_instigate_acks,
+                             EncryptionLevel decrypted_packet_level,
                              QuicPacketNumber last_received_packet_number,
                              QuicTime time_of_last_received_packet,
                              QuicTime now,
@@ -45,17 +52,24 @@
                              QuicTime::Delta delayed_ack_time);
 
   // Resets ACK related states, called after an ACK is successfully sent.
-  void ResetAckStates();
+  void ResetAckStates(EncryptionLevel encryption_level);
+
+  // Called to enable multiple packet number support.
+  void EnableMultiplePacketNumberSpacesSupport();
 
   // Returns true if ACK frame has been updated since GetUpdatedAckFrame was
   // last called.
-  bool AckFrameUpdated() const;
+  bool IsAckFrameUpdated() const;
 
   // Returns the largest received packet number.
-  QuicPacketNumber GetLargestObserved() const;
+  QuicPacketNumber GetLargestObserved(
+      EncryptionLevel decrypted_packet_level) const;
 
-  // Returns current ACK timeout.
-  QuicTime GetAckTimeout() const;
+  // Returns ACK timeout of |packet_number_space|.
+  QuicTime GetAckTimeout(PacketNumberSpace packet_number_space) const;
+
+  // Get the earliest ack_timeout of all packet number spaces.
+  QuicTime GetEarliestAckTimeout() const;
 
   // Returns peer first sending packet number to our best knowledge.
   QuicPacketNumber PeerFirstSendingPacketNumber() const;
@@ -68,6 +82,10 @@
   size_t ack_frequency_before_ack_decimation() const;
   void set_ack_frequency_before_ack_decimation(size_t new_value);
 
+  bool supports_multiple_packet_number_spaces() const {
+    return supports_multiple_packet_number_spaces_;
+  }
+
   // For logging purposes.
   const QuicAckFrame& ack_frame() const;
 
@@ -79,7 +97,12 @@
   friend class test::QuicConnectionPeer;
   friend class test::UberReceivedPacketManagerPeer;
 
-  QuicReceivedPacketManager received_packet_manager_;
+  // One received packet manager per packet number space. If
+  // supports_multiple_packet_number_spaces_ is false, only the first (0 index)
+  // received_packet_manager is used.
+  QuicReceivedPacketManager received_packet_managers_[NUM_PACKET_NUMBER_SPACES];
+
+  bool supports_multiple_packet_number_spaces_;
 };
 
 }  // namespace quic