1// Copyright (c) 2012 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_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
6#define NET_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
7
8#include "base/basictypes.h"
9#include "net/base/ip_endpoint.h"
10#include "net/quic/quic_connection_stats.h"
11#include "net/quic/quic_protocol.h"
12
13namespace net {
14
15struct QuicAckFrame;
16struct QuicPacketHeader;
17class QuicAlarm;
18class QuicConnection;
19class QuicConnectionHelperInterface;
20class QuicConnectionVisitorInterface;
21class QuicEncryptedPacket;
22class QuicFecGroup;
23class QuicFramer;
24class QuicPacketCreator;
25class QuicPacketGenerator;
26class QuicPacketWriter;
27class QuicReceivedPacketManager;
28class QuicSentPacketManager;
29class ReceiveAlgorithmInterface;
30class SendAlgorithmInterface;
31
32namespace test {
33
34// Peer to make public a number of otherwise private QuicConnection methods.
35class QuicConnectionPeer {
36 public:
37  static void SendAck(QuicConnection* connection);
38
39  static void SetReceiveAlgorithm(QuicConnection* connection,
40                                  ReceiveAlgorithmInterface* receive_algorithm);
41
42  static void SetSendAlgorithm(QuicConnection* connection,
43                               SendAlgorithmInterface* send_algorithm);
44
45  static QuicAckFrame* CreateAckFrame(QuicConnection* connection);
46
47  static QuicStopWaitingFrame* CreateStopWaitingFrame(
48      QuicConnection* connection);
49
50  static QuicConnectionVisitorInterface* GetVisitor(
51      QuicConnection* connection);
52
53  static QuicPacketCreator* GetPacketCreator(QuicConnection* connection);
54
55  static QuicPacketGenerator* GetPacketGenerator(QuicConnection* connection);
56
57  static QuicSentPacketManager* GetSentPacketManager(
58      QuicConnection* connection);
59
60  static QuicReceivedPacketManager* GetReceivedPacketManager(
61      QuicConnection* connection);
62
63  static QuicTime::Delta GetNetworkTimeout(QuicConnection* connection);
64
65  static bool IsSavedForRetransmission(
66      QuicConnection* connection,
67      QuicPacketSequenceNumber sequence_number);
68
69  static bool IsRetransmission(QuicConnection* connection,
70                               QuicPacketSequenceNumber sequence_number);
71
72  static QuicPacketEntropyHash GetSentEntropyHash(
73      QuicConnection* connection,
74      QuicPacketSequenceNumber sequence_number);
75
76  static QuicPacketEntropyHash PacketEntropy(
77      QuicConnection* connection,
78      QuicPacketSequenceNumber sequence_number);
79
80  static QuicPacketEntropyHash ReceivedEntropyHash(
81      QuicConnection* connection,
82      QuicPacketSequenceNumber sequence_number);
83
84  static bool IsServer(QuicConnection* connection);
85
86  static void SetIsServer(QuicConnection* connection, bool is_server);
87
88  static void SetSelfAddress(QuicConnection* connection,
89                             const IPEndPoint& self_address);
90
91  static void SetPeerAddress(QuicConnection* connection,
92                             const IPEndPoint& peer_address);
93
94  static void SwapCrypters(QuicConnection* connection, QuicFramer* framer);
95
96  static QuicConnectionHelperInterface* GetHelper(QuicConnection* connection);
97
98  static QuicFramer* GetFramer(QuicConnection* connection);
99
100  // Set last_header_->fec_group = fec_group and return connection->GetFecGroup
101  static QuicFecGroup* GetFecGroup(QuicConnection* connection, int fec_group);
102
103  static QuicAlarm* GetAckAlarm(QuicConnection* connection);
104  static QuicAlarm* GetPingAlarm(QuicConnection* connection);
105  static QuicAlarm* GetResumeWritesAlarm(QuicConnection* connection);
106  static QuicAlarm* GetRetransmissionAlarm(QuicConnection* connection);
107  static QuicAlarm* GetSendAlarm(QuicConnection* connection);
108  static QuicAlarm* GetTimeoutAlarm(QuicConnection* connection);
109
110  static QuicPacketWriter* GetWriter(QuicConnection* connection);
111  // If |owns_writer| is true, takes ownership of |writer|.
112  static void SetWriter(QuicConnection* connection,
113                        QuicPacketWriter* writer,
114                        bool owns_writer);
115  static void CloseConnection(QuicConnection* connection);
116  static QuicEncryptedPacket* GetConnectionClosePacket(
117      QuicConnection* connection);
118
119  static void SetSupportedVersions(QuicConnection* connection,
120                                   QuicVersionVector versions);
121
122 private:
123  DISALLOW_COPY_AND_ASSIGN(QuicConnectionPeer);
124};
125
126}  // namespace test
127
128}  // namespace net
129
130#endif  // NET_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
131