blob: d0797f52adf8eaf04948337f0deef7719df9303e [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// 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 QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
6#define QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
7
QUICHE teama6ef0a62019-03-07 20:34:33 -05008#include "net/third_party/quiche/src/quic/core/quic_connection.h"
9#include "net/third_party/quiche/src/quic/core/quic_connection_stats.h"
10#include "net/third_party/quiche/src/quic/core/quic_packets.h"
11#include "net/third_party/quiche/src/quic/platform/api/quic_socket_address.h"
12#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
13
14namespace quic {
15
16struct QuicPacketHeader;
17class QuicAlarm;
18class QuicConnectionHelperInterface;
19class QuicConnectionVisitorInterface;
20class QuicEncryptedPacket;
21class QuicFramer;
22class QuicPacketCreator;
23class QuicPacketGenerator;
24class QuicPacketWriter;
25class QuicSentPacketManager;
26class SendAlgorithmInterface;
27
28namespace test {
29
30// Peer to make public a number of otherwise private QuicConnection methods.
31class QuicConnectionPeer {
32 public:
33 QuicConnectionPeer() = delete;
34
QUICHE teama6ef0a62019-03-07 20:34:33 -050035 static void SetSendAlgorithm(QuicConnection* connection,
36 SendAlgorithmInterface* send_algorithm);
37
38 static void SetLossAlgorithm(QuicConnection* connection,
39 LossDetectionInterface* loss_algorithm);
40
QUICHE teama6ef0a62019-03-07 20:34:33 -050041 static void PopulateStopWaitingFrame(QuicConnection* connection,
42 QuicStopWaitingFrame* stop_waiting);
43
44 static QuicConnectionVisitorInterface* GetVisitor(QuicConnection* connection);
45
46 static QuicPacketCreator* GetPacketCreator(QuicConnection* connection);
47
48 static QuicPacketGenerator* GetPacketGenerator(QuicConnection* connection);
49
50 static QuicSentPacketManager* GetSentPacketManager(
51 QuicConnection* connection);
52
53 static QuicTime::Delta GetNetworkTimeout(QuicConnection* connection);
54
55 static void SetPerspective(QuicConnection* connection,
56 Perspective perspective);
57
58 static void SetSelfAddress(QuicConnection* connection,
59 const QuicSocketAddress& self_address);
60
61 static void SetPeerAddress(QuicConnection* connection,
62 const QuicSocketAddress& peer_address);
63
64 static void SetDirectPeerAddress(
65 QuicConnection* connection,
66 const QuicSocketAddress& direct_peer_address);
67
68 static void SetEffectivePeerAddress(
69 QuicConnection* connection,
70 const QuicSocketAddress& effective_peer_address);
71
72 static bool IsSilentCloseEnabled(QuicConnection* connection);
73
74 static void SwapCrypters(QuicConnection* connection, QuicFramer* framer);
75
76 static void SetCurrentPacket(QuicConnection* connection,
77 QuicStringPiece current_packet);
78
79 static QuicConnectionHelperInterface* GetHelper(QuicConnection* connection);
80
81 static QuicAlarmFactory* GetAlarmFactory(QuicConnection* connection);
82
83 static QuicFramer* GetFramer(QuicConnection* connection);
84
85 static QuicAlarm* GetAckAlarm(QuicConnection* connection);
86 static QuicAlarm* GetPingAlarm(QuicConnection* connection);
87 static QuicAlarm* GetRetransmissionAlarm(QuicConnection* connection);
88 static QuicAlarm* GetSendAlarm(QuicConnection* connection);
89 static QuicAlarm* GetTimeoutAlarm(QuicConnection* connection);
90 static QuicAlarm* GetMtuDiscoveryAlarm(QuicConnection* connection);
91 static QuicAlarm* GetPathDegradingAlarm(QuicConnection* connection);
92 static QuicAlarm* GetProcessUndecryptablePacketsAlarm(
93 QuicConnection* connection);
94
95 static QuicPacketWriter* GetWriter(QuicConnection* connection);
96 // If |owns_writer| is true, takes ownership of |writer|.
97 static void SetWriter(QuicConnection* connection,
98 QuicPacketWriter* writer,
99 bool owns_writer);
100 static void TearDownLocalConnectionState(QuicConnection* connection);
101 static QuicEncryptedPacket* GetConnectionClosePacket(
102 QuicConnection* connection);
103
104 static QuicPacketHeader* GetLastHeader(QuicConnection* connection);
105
106 static QuicConnectionStats* GetStats(QuicConnection* connection);
107
108 static QuicPacketCount GetPacketsBetweenMtuProbes(QuicConnection* connection);
109
110 static void SetPacketsBetweenMtuProbes(QuicConnection* connection,
111 QuicPacketCount packets);
112 static void SetNextMtuProbeAt(QuicConnection* connection,
113 QuicPacketNumber number);
114 static void SetAckMode(QuicConnection* connection, AckMode ack_mode);
115 static void SetFastAckAfterQuiescence(QuicConnection* connection,
116 bool fast_ack_after_quiescence);
117 static void SetAckDecimationDelay(QuicConnection* connection,
118 float ack_decimation_delay);
119 static bool HasRetransmittableFrames(QuicConnection* connection,
120 uint64_t packet_number);
121 static bool GetNoStopWaitingFrames(QuicConnection* connection);
122 static void SetNoStopWaitingFrames(QuicConnection* connection,
123 bool no_stop_waiting_frames);
124 static void SetMaxTrackedPackets(QuicConnection* connection,
125 QuicPacketCount max_tracked_packets);
126 static void SetSessionDecidesWhatToWrite(QuicConnection* connection);
127 static void SetNegotiatedVersion(QuicConnection* connection);
128 static void SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
129 QuicConnection* connection,
130 size_t new_value);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500131 static bool SupportsReleaseTime(QuicConnection* connection);
132 static QuicConnection::PacketContent GetCurrentPacketContent(
133 QuicConnection* connection);
QUICHE team8c1daa22019-03-13 08:33:41 -0700134 static void SetLastHeaderFormat(QuicConnection* connection,
135 PacketHeaderFormat format);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500136};
137
138} // namespace test
139
140} // namespace quic
141
142#endif // QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_