blob: cb9b921b3f864845ba5a9ca9123b29ecdc13ebd6 [file] [log] [blame]
Avi Drissman64595482022-09-14 20:52:291// Copyright 2020 The Chromium Authors
Victor Vasiliev44b94222020-08-07 19:05:152// 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
Keishi Hattori0e45c022021-11-27 09:25:528#include "base/memory/raw_ptr.h"
Victor Vasiliev44b94222020-08-07 19:05:159#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"
Ryan Hamiltonea4fa192022-04-12 18:30:4913#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"
Victor Vasiliev44b94222020-08-07 19:05:1516
17namespace 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.
22class 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
David Schinazi24bfaa02020-10-22 19:54:3832 // quic::QuicConnectionDebugVisitor Interface
David Schinazi24bfaa02020-10-22 19:54:3833 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) override;
Victor Vasiliev44b94222020-08-07 19:05:1541 void OnIncomingAck(quic::QuicPacketNumber ack_packet_number,
42 quic::EncryptionLevel ack_decrypted_level,
43 const quic::QuicAckFrame& frame,
44 quic::QuicTime ack_receive_time,
45 quic::QuicPacketNumber largest_observed,
46 bool rtt_updated,
47 quic::QuicPacketNumber least_unacked_sent_packet) override;
48 void OnPacketLoss(quic::QuicPacketNumber lost_packet_number,
49 quic::EncryptionLevel encryption_level,
50 quic::TransmissionType transmission_type,
51 quic::QuicTime detection_time) override;
Victor Vasilievfc3ee5f12022-11-30 00:59:4952 void OnConfigProcessed(const SendParameters& parameters) override;
Victor Vasiliev44b94222020-08-07 19:05:1553 void OnPacketReceived(const quic::QuicSocketAddress& self_address,
54 const quic::QuicSocketAddress& peer_address,
55 const quic::QuicEncryptedPacket& packet) override;
56 void OnUnauthenticatedHeader(const quic::QuicPacketHeader& header) override;
57 void OnUndecryptablePacket(quic::EncryptionLevel decryption_level,
58 bool dropped) override;
59 void OnAttemptingToProcessUndecryptablePacket(
60 quic::EncryptionLevel decryption_level) override;
61 void OnDuplicatePacket(quic::QuicPacketNumber packet_number) override;
Nick Harperd049f192020-10-02 02:56:1062 void OnPacketHeader(const quic::QuicPacketHeader& header,
63 quic::QuicTime receive_time,
64 quic::EncryptionLevel level) override;
Victor Vasiliev44b94222020-08-07 19:05:1565 void OnPathChallengeFrame(const quic::QuicPathChallengeFrame& frame) override;
66 void OnPathResponseFrame(const quic::QuicPathResponseFrame& frame) override;
67 void OnCryptoFrame(const quic::QuicCryptoFrame& frame) override;
68 void OnStopSendingFrame(const quic::QuicStopSendingFrame& frame) override;
69 void OnStreamsBlockedFrame(
70 const quic::QuicStreamsBlockedFrame& frame) override;
71 void OnMaxStreamsFrame(const quic::QuicMaxStreamsFrame& frame) override;
72 void OnStreamFrame(const quic::QuicStreamFrame& frame) override;
Victor Vasiliev44b94222020-08-07 19:05:1573 void OnRstStreamFrame(const quic::QuicRstStreamFrame& frame) override;
74 void OnConnectionCloseFrame(
75 const quic::QuicConnectionCloseFrame& frame) override;
76 void OnWindowUpdateFrame(const quic::QuicWindowUpdateFrame& frame,
77 const quic::QuicTime& receive_time) override;
78 void OnBlockedFrame(const quic::QuicBlockedFrame& frame) override;
79 void OnGoAwayFrame(const quic::QuicGoAwayFrame& frame) override;
Dan Zhang3e347f42020-08-14 23:58:4280 void OnPingFrame(const quic::QuicPingFrame& frame,
81 quic::QuicTime::Delta ping_received_delay) override;
Victor Vasiliev44b94222020-08-07 19:05:1582 void OnPaddingFrame(const quic::QuicPaddingFrame& frame) override;
83 void OnNewConnectionIdFrame(
84 const quic::QuicNewConnectionIdFrame& frame) override;
85 void OnNewTokenFrame(const quic::QuicNewTokenFrame& frame) override;
86 void OnRetireConnectionIdFrame(
87 const quic::QuicRetireConnectionIdFrame& frame) override;
88 void OnMessageFrame(const quic::QuicMessageFrame& frame) override;
89 void OnHandshakeDoneFrame(const quic::QuicHandshakeDoneFrame& frame) override;
90 void OnCoalescedPacketSent(const quic::QuicCoalescedPacket& coalesced_packet,
91 size_t length) override;
Victor Vasiliev44b94222020-08-07 19:05:1592 void OnVersionNegotiationPacket(
93 const quic::QuicVersionNegotiationPacket& packet) override;
94 void OnConnectionClosed(const quic::QuicConnectionCloseFrame& frame,
95 quic::ConnectionCloseSource source) override;
96 void OnSuccessfulVersionNegotiation(
97 const quic::ParsedQuicVersion& version) override;
98 void OnTransportParametersSent(
99 const quic::TransportParameters& transport_parameters) override;
100 void OnTransportParametersReceived(
101 const quic::TransportParameters& transport_parameters) override;
Renjie Tangb479daa2020-08-14 23:47:59102 void OnTransportParametersResumed(
103 const quic::TransportParameters& transport_parameters) override;
Renjie Tang4d835302020-09-15 22:58:44104 void OnZeroRttRejected(int reason) override;
David Benjaminda386bf2023-05-19 21:27:50105 void OnEncryptedClientHelloSent(std::string_view client_hello) override;
Victor Vasiliev44b94222020-08-07 19:05:15106
107 // Events that are not received via the visitor and have to be called manually
108 // from the session.
109 void OnCryptoHandshakeMessageReceived(
110 const quic::CryptoHandshakeMessage& message);
111 void OnCryptoHandshakeMessageSent(
112 const quic::CryptoHandshakeMessage& message);
113 void OnCertificateVerified(const CertVerifyResult& result);
114
115 private:
Keishi Hattori0e45c022021-11-27 09:25:52116 raw_ptr<quic::QuicSession> session_; // Unowned.
Victor Vasiliev44b94222020-08-07 19:05:15117 NetLogWithSource net_log_;
118
119 // The quic::kCADR value provided by the server in ServerHello.
120 IPEndPoint local_address_from_shlo_;
121};
122
123} // namespace net
124
Lei Zhang64361922021-04-21 19:43:39125#endif // NET_QUIC_QUIC_EVENT_LOGGER_H_