blob: d6d6b3cc3c09785122f98debe6905f734712838f [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"
QUICHE team6dcf6ab2019-12-11 10:10:51 -080012#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050013
14namespace quic {
15
16struct QuicPacketHeader;
17class QuicAlarm;
18class QuicConnectionHelperInterface;
19class QuicConnectionVisitorInterface;
20class QuicEncryptedPacket;
21class QuicFramer;
22class QuicPacketCreator;
QUICHE teama6ef0a62019-03-07 20:34:33 -050023class QuicPacketWriter;
24class QuicSentPacketManager;
25class SendAlgorithmInterface;
26
27namespace test {
28
29// Peer to make public a number of otherwise private QuicConnection methods.
30class QuicConnectionPeer {
31 public:
32 QuicConnectionPeer() = delete;
33
QUICHE teama6ef0a62019-03-07 20:34:33 -050034 static void SetSendAlgorithm(QuicConnection* connection,
35 SendAlgorithmInterface* send_algorithm);
36
37 static void SetLossAlgorithm(QuicConnection* connection,
38 LossDetectionInterface* loss_algorithm);
39
QUICHE teama6ef0a62019-03-07 20:34:33 -050040 static void PopulateStopWaitingFrame(QuicConnection* connection,
41 QuicStopWaitingFrame* stop_waiting);
42
QUICHE teama6ef0a62019-03-07 20:34:33 -050043 static QuicPacketCreator* GetPacketCreator(QuicConnection* connection);
44
QUICHE teama6ef0a62019-03-07 20:34:33 -050045 static QuicSentPacketManager* GetSentPacketManager(
46 QuicConnection* connection);
47
48 static QuicTime::Delta GetNetworkTimeout(QuicConnection* connection);
49
50 static void SetPerspective(QuicConnection* connection,
51 Perspective perspective);
52
53 static void SetSelfAddress(QuicConnection* connection,
54 const QuicSocketAddress& self_address);
55
56 static void SetPeerAddress(QuicConnection* connection,
57 const QuicSocketAddress& peer_address);
58
59 static void SetDirectPeerAddress(
60 QuicConnection* connection,
61 const QuicSocketAddress& direct_peer_address);
62
63 static void SetEffectivePeerAddress(
64 QuicConnection* connection,
65 const QuicSocketAddress& effective_peer_address);
66
67 static bool IsSilentCloseEnabled(QuicConnection* connection);
68
69 static void SwapCrypters(QuicConnection* connection, QuicFramer* framer);
70
71 static void SetCurrentPacket(QuicConnection* connection,
QUICHE team6dcf6ab2019-12-11 10:10:51 -080072 quiche::QuicheStringPiece current_packet);
QUICHE teama6ef0a62019-03-07 20:34:33 -050073
74 static QuicConnectionHelperInterface* GetHelper(QuicConnection* connection);
75
76 static QuicAlarmFactory* GetAlarmFactory(QuicConnection* connection);
77
78 static QuicFramer* GetFramer(QuicConnection* connection);
79
80 static QuicAlarm* GetAckAlarm(QuicConnection* connection);
81 static QuicAlarm* GetPingAlarm(QuicConnection* connection);
82 static QuicAlarm* GetRetransmissionAlarm(QuicConnection* connection);
83 static QuicAlarm* GetSendAlarm(QuicConnection* connection);
84 static QuicAlarm* GetTimeoutAlarm(QuicConnection* connection);
85 static QuicAlarm* GetMtuDiscoveryAlarm(QuicConnection* connection);
86 static QuicAlarm* GetPathDegradingAlarm(QuicConnection* connection);
87 static QuicAlarm* GetProcessUndecryptablePacketsAlarm(
88 QuicConnection* connection);
89
90 static QuicPacketWriter* GetWriter(QuicConnection* connection);
91 // If |owns_writer| is true, takes ownership of |writer|.
92 static void SetWriter(QuicConnection* connection,
93 QuicPacketWriter* writer,
94 bool owns_writer);
95 static void TearDownLocalConnectionState(QuicConnection* connection);
96 static QuicEncryptedPacket* GetConnectionClosePacket(
97 QuicConnection* connection);
98
99 static QuicPacketHeader* GetLastHeader(QuicConnection* connection);
100
101 static QuicConnectionStats* GetStats(QuicConnection* connection);
102
103 static QuicPacketCount GetPacketsBetweenMtuProbes(QuicConnection* connection);
104
wubf76cf2a2019-10-11 18:49:07 -0700105 static void ReInitializeMtuDiscoverer(
106 QuicConnection* connection,
107 QuicPacketCount packets_between_probes_base,
108 QuicPacketNumber next_probe_at);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500109 static void SetAckMode(QuicConnection* connection, AckMode ack_mode);
110 static void SetFastAckAfterQuiescence(QuicConnection* connection,
111 bool fast_ack_after_quiescence);
112 static void SetAckDecimationDelay(QuicConnection* connection,
113 float ack_decimation_delay);
114 static bool HasRetransmittableFrames(QuicConnection* connection,
115 uint64_t packet_number);
116 static bool GetNoStopWaitingFrames(QuicConnection* connection);
117 static void SetNoStopWaitingFrames(QuicConnection* connection,
118 bool no_stop_waiting_frames);
119 static void SetMaxTrackedPackets(QuicConnection* connection,
120 QuicPacketCount max_tracked_packets);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500121 static void SetNegotiatedVersion(QuicConnection* connection);
122 static void SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
123 QuicConnection* connection,
124 size_t new_value);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500125 static bool SupportsReleaseTime(QuicConnection* connection);
126 static QuicConnection::PacketContent GetCurrentPacketContent(
127 QuicConnection* connection);
QUICHE team8c1daa22019-03-13 08:33:41 -0700128 static void SetLastHeaderFormat(QuicConnection* connection,
129 PacketHeaderFormat format);
fayang5f135052019-08-22 17:59:40 -0700130 static void AddBytesReceived(QuicConnection* connection, size_t length);
131 static void SetAddressValidated(QuicConnection* connection);
dschinazidce90b02019-10-14 18:19:54 -0700132
133 static void SendConnectionClosePacket(QuicConnection* connection,
134 QuicErrorCode error,
135 const std::string& details);
rchd672c6d2019-11-27 15:30:54 -0800136
137 static size_t GetNumEncryptionLevels(QuicConnection* connection);
fayangb59c6f12020-03-23 15:06:14 -0700138
139 static QuicNetworkBlackholeDetector& GetBlackholeDetector(
140 QuicConnection* connection);
141
142 static QuicAlarm* GetBlackholeDetectorAlarm(QuicConnection* connection);
143
144 static QuicTime GetPathDegradingDeadline(QuicConnection* connection);
145
146 static QuicTime GetBlackholeDetectionDeadline(QuicConnection* connection);
fayangb9c88442020-03-26 07:03:57 -0700147
148 static QuicAlarm* GetIdleNetworkDetectorAlarm(QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500149};
150
151} // namespace test
152
153} // namespace quic
154
155#endif // QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_