1 // Copyright (c) 2013 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_CONNECTION_LOGGER_H_ 6 #define NET_QUIC_QUIC_CONNECTION_LOGGER_H_ 7 8 #include "net/quic/quic_connection.h" 9 10 namespace net { 11 12 class BoundNetLog; 13 14 // This class is a debug visitor of a QuicConnection which logs 15 // events to |net_log|. 16 class NET_EXPORT_PRIVATE QuicConnectionLogger 17 : public QuicConnectionDebugVisitorInterface { 18 public: 19 explicit QuicConnectionLogger(const BoundNetLog& net_log); 20 21 virtual ~QuicConnectionLogger(); 22 23 // QuicPacketGenerator::DebugDelegateInterface 24 virtual void OnFrameAddedToPacket(const QuicFrame& frame) OVERRIDE; 25 26 // QuicConnectionDebugVisitorInterface 27 virtual void OnPacketSent(QuicPacketSequenceNumber sequence_number, 28 EncryptionLevel level, 29 const QuicEncryptedPacket& packet, 30 int rv) OVERRIDE; 31 32 virtual void OnPacketReceived(const IPEndPoint& self_address, 33 const IPEndPoint& peer_address, 34 const QuicEncryptedPacket& packet) OVERRIDE; 35 virtual void OnProtocolVersionMismatch(QuicVersion version) OVERRIDE; 36 virtual void OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; 37 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; 38 virtual void OnAckFrame(const QuicAckFrame& frame) OVERRIDE; 39 virtual void OnCongestionFeedbackFrame( 40 const QuicCongestionFeedbackFrame& frame) OVERRIDE; 41 virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE; 42 virtual void OnConnectionCloseFrame( 43 const QuicConnectionCloseFrame& frame) OVERRIDE; 44 virtual void OnPublicResetPacket( 45 const QuicPublicResetPacket& packet) OVERRIDE; 46 virtual void OnVersionNegotiationPacket( 47 const QuicVersionNegotiationPacket& packet) OVERRIDE; 48 virtual void OnRevivedPacket(const QuicPacketHeader& revived_header, 49 base::StringPiece payload) OVERRIDE; 50 51 private: 52 BoundNetLog net_log_; 53 // The last packet sequence number received. 54 QuicPacketSequenceNumber last_received_packet_sequence_number_; 55 // The largest packet sequence number received. In case of that a packet is 56 // received late, this value will not be updated. 57 QuicPacketSequenceNumber largest_received_packet_sequence_number_; 58 // The largest packet sequence number which the peer has failed to 59 // receive, according to the missing packet set in their ack frames. 60 QuicPacketSequenceNumber largest_received_missing_packet_sequence_number_; 61 // Number of times that the current received packet sequence number is 62 // smaller than the last received packet sequence number. 63 size_t out_of_order_recieved_packet_count_; 64 DISALLOW_COPY_AND_ASSIGN(QuicConnectionLogger); 65 }; 66 67 } // namespace net 68 69 #endif // NET_QUIC_QUIC_CONNECTION_LOGGER_H_ 70