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