gfe-relnote: In QUIC, add largest_packets_peer_knows_is_acked_ and largest_sent_packets_ which are necessary to sent_packet_manager and unacked_packet_map, respectively, for multiple packet number support. Not used yet. Not protected.
PiperOrigin-RevId: 239787104
Change-Id: I9955881f09eb4b70a740a913fcd4ad7bc8fe863d
diff --git a/quic/core/quic_unacked_packet_map.cc b/quic/core/quic_unacked_packet_map.cc
index 0f5fa49..5a9bd24 100644
--- a/quic/core/quic_unacked_packet_map.cc
+++ b/quic/core/quic_unacked_packet_map.cc
@@ -33,7 +33,8 @@
session_notifier_(nullptr),
session_decides_what_to_write_(false),
use_uber_loss_algorithm_(
- GetQuicReloadableFlag(quic_use_uber_loss_algorithm)) {
+ GetQuicReloadableFlag(quic_use_uber_loss_algorithm)),
+ supports_multiple_packet_number_spaces_(false) {
if (use_uber_loss_algorithm_) {
QUIC_RELOADABLE_FLAG_COUNT(quic_use_uber_loss_algorithm);
}
@@ -75,6 +76,10 @@
}
largest_sent_packet_ = packet_number;
+ if (supports_multiple_packet_number_spaces_) {
+ largest_sent_packets_[GetPacketNumberSpace(packet->encryption_level)] =
+ packet_number;
+ }
if (set_in_flight) {
bytes_in_flight_ += bytes_sent;
info.in_flight = true;
@@ -501,6 +506,9 @@
PacketNumberSpace QuicUnackedPacketMap::GetPacketNumberSpace(
EncryptionLevel encryption_level) const {
DCHECK(use_uber_loss_algorithm_);
+ if (supports_multiple_packet_number_spaces_) {
+ return QuicUtils::GetPacketNumberSpace(encryption_level);
+ }
if (perspective_ == Perspective::IS_CLIENT) {
return encryption_level == ENCRYPTION_INITIAL ? HANDSHAKE_DATA
: APPLICATION_DATA;
@@ -539,4 +547,24 @@
session_decides_what_to_write_ = session_decides_what_to_write;
}
+void QuicUnackedPacketMap::EnableMultiplePacketNumberSpacesSupport() {
+ if (supports_multiple_packet_number_spaces_) {
+ QUIC_BUG << "Multiple packet number spaces has already been enabled";
+ return;
+ }
+ if (largest_sent_packet_.IsInitialized()) {
+ QUIC_BUG << "Try to enable multiple packet number spaces support after any "
+ "packet has been sent.";
+ return;
+ }
+
+ supports_multiple_packet_number_spaces_ = true;
+}
+
+QuicPacketNumber QuicUnackedPacketMap::GetLargestSentPacketOfPacketNumberSpace(
+ EncryptionLevel encryption_level) const {
+ DCHECK(supports_multiple_packet_number_spaces_);
+ return largest_sent_packets_[GetPacketNumberSpace(encryption_level)];
+}
+
} // namespace quic