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