blob: fa708a10c7f2e49b1f55b4def2d55b88e71c7fc7 [file] [log] [blame]
Victor Vasiliev44b94222020-08-07 19:05:151// Copyright 2020 The Chromium Authors. All rights reserved.
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 "net/base/ip_endpoint.h"
9#include "net/base/net_export.h"
10#include "net/cert/cert_verify_result.h"
11#include "net/log/net_log_with_source.h"
12#include "net/third_party/quiche/src/quic/core/quic_connection.h"
13#include "net/third_party/quiche/src/quic/core/quic_packet_creator.h"
14#include "net/third_party/quiche/src/quic/core/quic_session.h"
15
16namespace net {
17
18// Logs QUIC-related events into the supplied NetLog. Note that while most of
19// the logging is done by registering this object as a debug delegate, some of
20// the methods have to be called manually.
21class NET_EXPORT_PRIVATE QuicEventLogger
22 : public quic::QuicConnectionDebugVisitor,
23 public quic::QuicPacketCreator::DebugDelegate {
24 public:
25 QuicEventLogger(quic::QuicSession* session, const NetLogWithSource& net_log);
26
27 // quic::QuicPacketCreator::DebugDelegateInterface
28 void OnFrameAddedToPacket(const quic::QuicFrame& frame) override;
29 void OnStreamFrameCoalesced(const quic::QuicStreamFrame& frame) override;
30
David Schinazi24bfaa02020-10-22 19:54:3831 // quic::QuicConnectionDebugVisitor Interface
David Schinazi24bfaa02020-10-22 19:54:3832 void OnPacketSent(quic::QuicPacketNumber packet_number,
33 quic::QuicPacketLength packet_length,
34 bool has_crypto_handshake,
35 quic::TransmissionType transmission_type,
36 quic::EncryptionLevel encryption_level,
37 const quic::QuicFrames& retransmittable_frames,
38 const quic::QuicFrames& nonretransmittable_frames,
39 quic::QuicTime sent_time) override;
Victor Vasiliev44b94222020-08-07 19:05:1540 void OnIncomingAck(quic::QuicPacketNumber ack_packet_number,
41 quic::EncryptionLevel ack_decrypted_level,
42 const quic::QuicAckFrame& frame,
43 quic::QuicTime ack_receive_time,
44 quic::QuicPacketNumber largest_observed,
45 bool rtt_updated,
46 quic::QuicPacketNumber least_unacked_sent_packet) override;
47 void OnPacketLoss(quic::QuicPacketNumber lost_packet_number,
48 quic::EncryptionLevel encryption_level,
49 quic::TransmissionType transmission_type,
50 quic::QuicTime detection_time) override;
51 void OnPacketReceived(const quic::QuicSocketAddress& self_address,
52 const quic::QuicSocketAddress& peer_address,
53 const quic::QuicEncryptedPacket& packet) override;
54 void OnUnauthenticatedHeader(const quic::QuicPacketHeader& header) override;
55 void OnUndecryptablePacket(quic::EncryptionLevel decryption_level,
56 bool dropped) override;
57 void OnAttemptingToProcessUndecryptablePacket(
58 quic::EncryptionLevel decryption_level) override;
59 void OnDuplicatePacket(quic::QuicPacketNumber packet_number) override;
Nick Harperd049f192020-10-02 02:56:1060 void OnPacketHeader(const quic::QuicPacketHeader& header,
61 quic::QuicTime receive_time,
62 quic::EncryptionLevel level) override;
Victor Vasiliev44b94222020-08-07 19:05:1563 void OnPathChallengeFrame(const quic::QuicPathChallengeFrame& frame) override;
64 void OnPathResponseFrame(const quic::QuicPathResponseFrame& frame) override;
65 void OnCryptoFrame(const quic::QuicCryptoFrame& frame) override;
66 void OnStopSendingFrame(const quic::QuicStopSendingFrame& frame) override;
67 void OnStreamsBlockedFrame(
68 const quic::QuicStreamsBlockedFrame& frame) override;
69 void OnMaxStreamsFrame(const quic::QuicMaxStreamsFrame& frame) override;
70 void OnStreamFrame(const quic::QuicStreamFrame& frame) override;
71 void OnStopWaitingFrame(const quic::QuicStopWaitingFrame& frame) override;
72 void OnRstStreamFrame(const quic::QuicRstStreamFrame& frame) override;
73 void OnConnectionCloseFrame(
74 const quic::QuicConnectionCloseFrame& frame) override;
75 void OnWindowUpdateFrame(const quic::QuicWindowUpdateFrame& frame,
76 const quic::QuicTime& receive_time) override;
77 void OnBlockedFrame(const quic::QuicBlockedFrame& frame) override;
78 void OnGoAwayFrame(const quic::QuicGoAwayFrame& frame) override;
Dan Zhang3e347f42020-08-14 23:58:4279 void OnPingFrame(const quic::QuicPingFrame& frame,
80 quic::QuicTime::Delta ping_received_delay) override;
Victor Vasiliev44b94222020-08-07 19:05:1581 void OnPaddingFrame(const quic::QuicPaddingFrame& frame) override;
82 void OnNewConnectionIdFrame(
83 const quic::QuicNewConnectionIdFrame& frame) override;
84 void OnNewTokenFrame(const quic::QuicNewTokenFrame& frame) override;
85 void OnRetireConnectionIdFrame(
86 const quic::QuicRetireConnectionIdFrame& frame) override;
87 void OnMessageFrame(const quic::QuicMessageFrame& frame) override;
88 void OnHandshakeDoneFrame(const quic::QuicHandshakeDoneFrame& frame) override;
89 void OnCoalescedPacketSent(const quic::QuicCoalescedPacket& coalesced_packet,
90 size_t length) override;
91 void OnPublicResetPacket(const quic::QuicPublicResetPacket& packet) override;
92 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;
Victor Vasiliev44b94222020-08-07 19:05:15105
106 // Events that are not received via the visitor and have to be called manually
107 // from the session.
108 void OnCryptoHandshakeMessageReceived(
109 const quic::CryptoHandshakeMessage& message);
110 void OnCryptoHandshakeMessageSent(
111 const quic::CryptoHandshakeMessage& message);
112 void OnCertificateVerified(const CertVerifyResult& result);
113
114 private:
115 quic::QuicSession* session_; // Unowned.
116 NetLogWithSource net_log_;
117
118 // The quic::kCADR value provided by the server in ServerHello.
119 IPEndPoint local_address_from_shlo_;
120};
121
122} // namespace net
123
Lei Zhang64361922021-04-21 19:43:39124#endif // NET_QUIC_QUIC_EVENT_LOGGER_H_