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