Refactor QuicConnection::UpdatePacketContent() to take a different enum to reflect frame type. No behavior change, not protected.

Currently it takes PacketContent which is also used as current_packet_content_ connection state. This state is only needed in gQUIC. However UpdatePacketContent() can be used to update iQUIC connection state to indicate whether current packet is a probing packet or a non-probing packet depending on frames in it.

Adding calls to UpdatePacketContent() in all IETF frame callbacks as well. These calls will be no-op in UpdatePacketContent().

PiperOrigin-RevId: 324700454
Change-Id: I96d35d990ee1727e2f781e9ae11e94113a332ec2
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 9e2f885..f3d5431 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -1126,7 +1126,7 @@
 
   // Since a stream frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(STREAM_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnStreamFrame(frame);
@@ -1162,7 +1162,7 @@
 
   // Since a CRYPTO frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(CRYPTO_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnCryptoFrame(frame);
@@ -1185,7 +1185,7 @@
 
   // Since an ack frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(ACK_FRAME);
 
   QUIC_DVLOG(1) << ENDPOINT
                 << "OnAckFrameStart, largest_acked: " << largest_acked;
@@ -1305,7 +1305,7 @@
 
   // Since a stop waiting frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(STOP_WAITING_FRAME);
 
   if (no_stop_waiting_frames_) {
     return true;
@@ -1336,7 +1336,7 @@
 
 bool QuicConnection::OnPaddingFrame(const QuicPaddingFrame& frame) {
   DCHECK(connected_);
-  UpdatePacketContent(SECOND_FRAME_IS_PADDING);
+  UpdatePacketContent(PADDING_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnPaddingFrame(frame);
@@ -1346,7 +1346,7 @@
 
 bool QuicConnection::OnPingFrame(const QuicPingFrame& frame) {
   DCHECK(connected_);
-  UpdatePacketContent(FIRST_FRAME_IS_PING);
+  UpdatePacketContent(PING_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnPingFrame(frame);
@@ -1384,7 +1384,7 @@
 
   // Since a reset stream frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(RST_STREAM_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnRstStreamFrame(frame);
@@ -1403,7 +1403,7 @@
 
   // Since a reset stream frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(STOP_SENDING_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnStopSendingFrame(frame);
@@ -1418,6 +1418,7 @@
 }
 
 bool QuicConnection::OnPathChallengeFrame(const QuicPathChallengeFrame& frame) {
+  UpdatePacketContent(PATH_CHALLENGE_FRAME);
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnPathChallengeFrame(frame);
   }
@@ -1430,6 +1431,7 @@
 }
 
 bool QuicConnection::OnPathResponseFrame(const QuicPathResponseFrame& frame) {
+  UpdatePacketContent(PATH_RESPONSE_FRAME);
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnPathResponseFrame(frame);
   }
@@ -1450,7 +1452,7 @@
 
   // Since a connection close frame was received, this is not a connectivity
   // probe. A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(CONNECTION_CLOSE_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnConnectionCloseFrame(frame);
@@ -1492,6 +1494,7 @@
 }
 
 bool QuicConnection::OnMaxStreamsFrame(const QuicMaxStreamsFrame& frame) {
+  UpdatePacketContent(MAX_STREAMS_FRAME);
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnMaxStreamsFrame(frame);
   }
@@ -1500,6 +1503,7 @@
 
 bool QuicConnection::OnStreamsBlockedFrame(
     const QuicStreamsBlockedFrame& frame) {
+  UpdatePacketContent(STREAMS_BLOCKED_FRAME);
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnStreamsBlockedFrame(frame);
   }
@@ -1511,7 +1515,7 @@
 
   // Since a go away frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(GOAWAY_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnGoAwayFrame(frame);
@@ -1530,7 +1534,7 @@
 
   // Since a window update frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(WINDOW_UPDATE_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnWindowUpdateFrame(
@@ -1544,6 +1548,7 @@
 
 bool QuicConnection::OnNewConnectionIdFrame(
     const QuicNewConnectionIdFrame& frame) {
+  UpdatePacketContent(NEW_CONNECTION_ID_FRAME);
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnNewConnectionIdFrame(frame);
   }
@@ -1552,6 +1557,7 @@
 
 bool QuicConnection::OnRetireConnectionIdFrame(
     const QuicRetireConnectionIdFrame& frame) {
+  UpdatePacketContent(RETIRE_CONNECTION_ID_FRAME);
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnRetireConnectionIdFrame(frame);
   }
@@ -1559,6 +1565,7 @@
 }
 
 bool QuicConnection::OnNewTokenFrame(const QuicNewTokenFrame& frame) {
+  UpdatePacketContent(NEW_TOKEN_FRAME);
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnNewTokenFrame(frame);
   }
@@ -1570,7 +1577,7 @@
 
   // Since a message frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(MESSAGE_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnMessageFrame(frame);
@@ -1599,7 +1606,7 @@
 
   // Since a handshake done frame was received, this is not a connectivity
   // probe. A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(HANDSHAKE_DONE_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnHandshakeDoneFrame(frame);
@@ -1611,6 +1618,7 @@
 
 bool QuicConnection::OnAckFrequencyFrame(
     const QuicAckFrequencyFrame& /*frame*/) {
+  UpdatePacketContent(ACK_FREQUENCY_FRAME);
   // TODO(b/148614353): implement this fully.
   QUIC_LOG_EVERY_N_SEC(ERROR, 120) << "Get unexpected AckFrequencyFrame.";
   return false;
@@ -1620,7 +1628,7 @@
 
   // Since a blocked frame was received, this is not a connectivity probe.
   // A probe only contains a PING and full padding.
-  UpdatePacketContent(NOT_PADDED_PING);
+  UpdatePacketContent(BLOCKED_FRAME);
 
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnBlockedFrame(frame);
@@ -4047,12 +4055,13 @@
   sent_packet_manager_.OnApplicationLimited();
 }
 
-void QuicConnection::UpdatePacketContent(PacketContent type) {
+void QuicConnection::UpdatePacketContent(QuicFrameType type) {
   // Packet content is tracked to identify connectivity probe in non-IETF
   // version, where a connectivity probe is defined as
   // - a padded PING packet with peer address change received by server,
   // - a padded PING packet on new path received by client.
   if (version().HasIetfQuicFrames()) {
+    // TODO(b/149315151) detect IETF non-probing packet.
     return;
   }
 
@@ -4063,11 +4072,7 @@
     return;
   }
 
-  if (type == NO_FRAMES_RECEIVED) {
-    return;
-  }
-
-  if (type == FIRST_FRAME_IS_PING) {
+  if (type == PING_FRAME) {
     if (current_packet_content_ == NO_FRAMES_RECEIVED) {
       current_packet_content_ = FIRST_FRAME_IS_PING;
       return;
@@ -4077,8 +4082,7 @@
   // In Google QUIC, we look for a packet with just a PING and PADDING.
   // If the condition is met, mark things as connectivity-probing, causing
   // later processing to generate the correct response.
-  if (type == SECOND_FRAME_IS_PADDING &&
-      current_packet_content_ == FIRST_FRAME_IS_PING) {
+  if (type == PADDING_FRAME && current_packet_content_ == FIRST_FRAME_IS_PING) {
     current_packet_content_ = SECOND_FRAME_IS_PADDING;
     if (perspective_ == Perspective::IS_SERVER) {
       is_current_packet_connectivity_probing_ =
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index afddeeb..c1bf5bb 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -1218,7 +1218,7 @@
   // starts effective peer migration if current packet is confirmed not a
   // connectivity probe and |current_effective_peer_migration_type_| indicates
   // effective peer address change.
-  void UpdatePacketContent(PacketContent type);
+  void UpdatePacketContent(QuicFrameType type);
 
   // Called when last received ack frame has been processed.
   // |send_stop_waiting| indicates whether a stop waiting needs to be sent.