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 10namespace net { 11 12class BoundNetLog; 13 14// This class is a debug visitor of a QuicConnection which logs 15// events to |net_log|. 16class 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