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