Add some QUIC DCHECKs
These assumptions were found when trying to debug crbug/1117201
Debug-only change
PiperOrigin-RevId: 328638627
Change-Id: Ic563044d9e5d7be8965a62b126215c066d0b400f
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index c44e5cf..8b71b3a 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -65,6 +65,7 @@
void OnAlarm() override {
DCHECK(connection_->ack_frame_updated());
+ DCHECK(connection_->connected());
QuicConnection::ScopedPacketFlusher flusher(connection_);
if (connection_->SupportsMultiplePacketNumberSpaces()) {
connection_->SendAllPendingAcks();
@@ -88,7 +89,10 @@
RetransmissionAlarmDelegate& operator=(const RetransmissionAlarmDelegate&) =
delete;
- void OnAlarm() override { connection_->OnRetransmissionTimeout(); }
+ void OnAlarm() override {
+ DCHECK(connection_->connected());
+ connection_->OnRetransmissionTimeout();
+ }
private:
QuicConnection* connection_;
@@ -103,7 +107,10 @@
SendAlarmDelegate(const SendAlarmDelegate&) = delete;
SendAlarmDelegate& operator=(const SendAlarmDelegate&) = delete;
- void OnAlarm() override { connection_->WriteAndBundleAcksIfNotBlocked(); }
+ void OnAlarm() override {
+ DCHECK(connection_->connected());
+ connection_->WriteAndBundleAcksIfNotBlocked();
+ }
private:
QuicConnection* connection_;
@@ -116,7 +123,10 @@
PingAlarmDelegate(const PingAlarmDelegate&) = delete;
PingAlarmDelegate& operator=(const PingAlarmDelegate&) = delete;
- void OnAlarm() override { connection_->OnPingTimeout(); }
+ void OnAlarm() override {
+ DCHECK(connection_->connected());
+ connection_->OnPingTimeout();
+ }
private:
QuicConnection* connection_;
@@ -130,7 +140,10 @@
MtuDiscoveryAlarmDelegate& operator=(const MtuDiscoveryAlarmDelegate&) =
delete;
- void OnAlarm() override { connection_->DiscoverMtu(); }
+ void OnAlarm() override {
+ DCHECK(connection_->connected());
+ connection_->DiscoverMtu();
+ }
private:
QuicConnection* connection_;
@@ -146,6 +159,7 @@
const ProcessUndecryptablePacketsAlarmDelegate&) = delete;
void OnAlarm() override {
+ DCHECK(connection_->connected());
QuicConnection::ScopedPacketFlusher flusher(connection_);
connection_->MaybeProcessUndecryptablePackets();
}
diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc
index fb574fc..bfced90 100644
--- a/quic/core/quic_packet_creator.cc
+++ b/quic/core/quic_packet_creator.cc
@@ -1619,6 +1619,13 @@
}
}
+ // If this is an ACK frame, validate that it is non-empty and that
+ // largest_acked matches the max packet number.
+ DCHECK(frame.type != ACK_FRAME ||
+ (!frame.ack_frame->packets.Empty() &&
+ frame.ack_frame->packets.Max() == frame.ack_frame->largest_acked))
+ << "Invalid ACK frame: " << frame;
+
size_t frame_len = GetSerializedFrameLength(frame);
if (frame_len == 0 && RemoveSoftMaxPacketLength()) {
// Remove soft max_packet_length and retry.
@@ -1977,5 +1984,13 @@
creator_->SetDefaultPeerAddress(old_peer_address_);
}
+void QuicPacketCreator::set_encryption_level(EncryptionLevel level) {
+ DCHECK(level == packet_.encryption_level || !HasPendingFrames())
+ << "Cannot update encryption level from " << packet_.encryption_level
+ << " to " << level << " when we already have pending frames: "
+ << QuicFramesToString(queued_frames_);
+ packet_.encryption_level = level;
+}
+
#undef ENDPOINT // undef for jumbo builds
} // namespace quic
diff --git a/quic/core/quic_packet_creator.h b/quic/core/quic_packet_creator.h
index 2c1ff57..5edcff3 100644
--- a/quic/core/quic_packet_creator.h
+++ b/quic/core/quic_packet_creator.h
@@ -282,9 +282,7 @@
void SetClientConnectionId(QuicConnectionId client_connection_id);
// Sets the encryption level that will be applied to new packets.
- void set_encryption_level(EncryptionLevel level) {
- packet_.encryption_level = level;
- }
+ void set_encryption_level(EncryptionLevel level);
EncryptionLevel encryption_level() { return packet_.encryption_level; }
// packet number of the last created packet, or 0 if no packets have been