xref: /aosp_15_r20/external/cronet/net/quic/quic_event_logger.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2020 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef NET_QUIC_QUIC_EVENT_LOGGER_H_
6 #define NET_QUIC_QUIC_EVENT_LOGGER_H_
7 
8 #include "base/memory/raw_ptr.h"
9 #include "net/base/ip_endpoint.h"
10 #include "net/base/net_export.h"
11 #include "net/cert/cert_verify_result.h"
12 #include "net/log/net_log_with_source.h"
13 #include "net/third_party/quiche/src/quiche/quic/core/quic_connection.h"
14 #include "net/third_party/quiche/src/quiche/quic/core/quic_packet_creator.h"
15 #include "net/third_party/quiche/src/quiche/quic/core/quic_session.h"
16 
17 namespace net {
18 
19 // Logs QUIC-related events into the supplied NetLog.  Note that while most of
20 // the logging is done by registering this object as a debug delegate, some of
21 // the methods have to be called manually.
22 class NET_EXPORT_PRIVATE QuicEventLogger
23     : public quic::QuicConnectionDebugVisitor,
24       public quic::QuicPacketCreator::DebugDelegate {
25  public:
26   QuicEventLogger(quic::QuicSession* session, const NetLogWithSource& net_log);
27 
28   // quic::QuicPacketCreator::DebugDelegateInterface
29   void OnFrameAddedToPacket(const quic::QuicFrame& frame) override;
30   void OnStreamFrameCoalesced(const quic::QuicStreamFrame& frame) override;
31 
32   // quic::QuicConnectionDebugVisitor Interface
33   void OnPacketSent(quic::QuicPacketNumber packet_number,
34                     quic::QuicPacketLength packet_length,
35                     bool has_crypto_handshake,
36                     quic::TransmissionType transmission_type,
37                     quic::EncryptionLevel encryption_level,
38                     const quic::QuicFrames& retransmittable_frames,
39                     const quic::QuicFrames& nonretransmittable_frames,
40                     quic::QuicTime sent_time,
41                     uint32_t batch_id) override;
42   void OnIncomingAck(quic::QuicPacketNumber ack_packet_number,
43                      quic::EncryptionLevel ack_decrypted_level,
44                      const quic::QuicAckFrame& frame,
45                      quic::QuicTime ack_receive_time,
46                      quic::QuicPacketNumber largest_observed,
47                      bool rtt_updated,
48                      quic::QuicPacketNumber least_unacked_sent_packet) override;
49   void OnPacketLoss(quic::QuicPacketNumber lost_packet_number,
50                     quic::EncryptionLevel encryption_level,
51                     quic::TransmissionType transmission_type,
52                     quic::QuicTime detection_time) override;
53   void OnConfigProcessed(const SendParameters& parameters) override;
54   void OnPacketReceived(const quic::QuicSocketAddress& self_address,
55                         const quic::QuicSocketAddress& peer_address,
56                         const quic::QuicEncryptedPacket& packet) override;
57   void OnUnauthenticatedHeader(const quic::QuicPacketHeader& header) override;
58   void OnUndecryptablePacket(quic::EncryptionLevel decryption_level,
59                              bool dropped) override;
60   void OnAttemptingToProcessUndecryptablePacket(
61       quic::EncryptionLevel decryption_level) override;
62   void OnDuplicatePacket(quic::QuicPacketNumber packet_number) override;
63   void OnPacketHeader(const quic::QuicPacketHeader& header,
64                       quic::QuicTime receive_time,
65                       quic::EncryptionLevel level) override;
66   void OnPathChallengeFrame(const quic::QuicPathChallengeFrame& frame) override;
67   void OnPathResponseFrame(const quic::QuicPathResponseFrame& frame) override;
68   void OnCryptoFrame(const quic::QuicCryptoFrame& frame) override;
69   void OnStopSendingFrame(const quic::QuicStopSendingFrame& frame) override;
70   void OnStreamsBlockedFrame(
71       const quic::QuicStreamsBlockedFrame& frame) override;
72   void OnMaxStreamsFrame(const quic::QuicMaxStreamsFrame& frame) override;
73   void OnStreamFrame(const quic::QuicStreamFrame& frame) override;
74   void OnRstStreamFrame(const quic::QuicRstStreamFrame& frame) override;
75   void OnConnectionCloseFrame(
76       const quic::QuicConnectionCloseFrame& frame) override;
77   void OnWindowUpdateFrame(const quic::QuicWindowUpdateFrame& frame,
78                            const quic::QuicTime& receive_time) override;
79   void OnBlockedFrame(const quic::QuicBlockedFrame& frame) override;
80   void OnGoAwayFrame(const quic::QuicGoAwayFrame& frame) override;
81   void OnPingFrame(const quic::QuicPingFrame& frame,
82                    quic::QuicTime::Delta ping_received_delay) override;
83   void OnPaddingFrame(const quic::QuicPaddingFrame& frame) override;
84   void OnNewConnectionIdFrame(
85       const quic::QuicNewConnectionIdFrame& frame) override;
86   void OnNewTokenFrame(const quic::QuicNewTokenFrame& frame) override;
87   void OnRetireConnectionIdFrame(
88       const quic::QuicRetireConnectionIdFrame& frame) override;
89   void OnMessageFrame(const quic::QuicMessageFrame& frame) override;
90   void OnHandshakeDoneFrame(const quic::QuicHandshakeDoneFrame& frame) override;
91   void OnCoalescedPacketSent(const quic::QuicCoalescedPacket& coalesced_packet,
92                              size_t length) override;
93   void OnVersionNegotiationPacket(
94       const quic::QuicVersionNegotiationPacket& packet) override;
95   void OnConnectionClosed(const quic::QuicConnectionCloseFrame& frame,
96                           quic::ConnectionCloseSource source) override;
97   void OnSuccessfulVersionNegotiation(
98       const quic::ParsedQuicVersion& version) override;
99   void OnTransportParametersSent(
100       const quic::TransportParameters& transport_parameters) override;
101   void OnTransportParametersReceived(
102       const quic::TransportParameters& transport_parameters) override;
103   void OnTransportParametersResumed(
104       const quic::TransportParameters& transport_parameters) override;
105   void OnZeroRttRejected(int reason) override;
106   void OnEncryptedClientHelloSent(std::string_view client_hello) override;
107 
108   // Events that are not received via the visitor and have to be called manually
109   // from the session.
110   void OnCryptoHandshakeMessageReceived(
111       const quic::CryptoHandshakeMessage& message);
112   void OnCryptoHandshakeMessageSent(
113       const quic::CryptoHandshakeMessage& message);
114   void OnCertificateVerified(const CertVerifyResult& result);
115 
116  private:
117   raw_ptr<quic::QuicSession> session_;  // Unowned.
118   NetLogWithSource net_log_;
119 
120   // The quic::kCADR value provided by the server in ServerHello.
121   IPEndPoint local_address_from_shlo_;
122 };
123 
124 }  // namespace net
125 
126 #endif  // NET_QUIC_QUIC_EVENT_LOGGER_H_
127