blob: 887ac8aabc91be7a3dc5aecd67bdab230041e36b [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
danzh9cb85b72020-12-30 07:17:09 -08008#include <cstddef>
vasilvv5f225b02020-10-08 11:49:09 -04009#include "absl/strings/string_view.h"
QUICHE team5be974e2020-12-29 18:35:24 -050010#include "quic/core/quic_connection.h"
haoyuewange3c51d92021-03-08 07:35:03 -080011#include "quic/core/quic_connection_id.h"
QUICHE team5be974e2020-12-29 18:35:24 -050012#include "quic/core/quic_connection_stats.h"
13#include "quic/core/quic_packets.h"
danzh9cb85b72020-12-30 07:17:09 -080014#include "quic/core/quic_types.h"
QUICHE team5be974e2020-12-29 18:35:24 -050015#include "quic/platform/api/quic_socket_address.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050016
17namespace quic {
18
19struct QuicPacketHeader;
20class QuicAlarm;
21class QuicConnectionHelperInterface;
22class QuicConnectionVisitorInterface;
23class QuicEncryptedPacket;
24class QuicFramer;
25class QuicPacketCreator;
QUICHE teama6ef0a62019-03-07 20:34:33 -050026class QuicPacketWriter;
27class QuicSentPacketManager;
28class SendAlgorithmInterface;
29
30namespace test {
31
32// Peer to make public a number of otherwise private QuicConnection methods.
33class QuicConnectionPeer {
34 public:
35 QuicConnectionPeer() = delete;
36
QUICHE teama6ef0a62019-03-07 20:34:33 -050037 static void SetSendAlgorithm(QuicConnection* connection,
38 SendAlgorithmInterface* send_algorithm);
39
40 static void SetLossAlgorithm(QuicConnection* connection,
41 LossDetectionInterface* loss_algorithm);
42
QUICHE teama6ef0a62019-03-07 20:34:33 -050043 static void PopulateStopWaitingFrame(QuicConnection* connection,
44 QuicStopWaitingFrame* stop_waiting);
45
QUICHE teama6ef0a62019-03-07 20:34:33 -050046 static QuicPacketCreator* GetPacketCreator(QuicConnection* connection);
47
QUICHE teama6ef0a62019-03-07 20:34:33 -050048 static QuicSentPacketManager* GetSentPacketManager(
49 QuicConnection* connection);
50
51 static QuicTime::Delta GetNetworkTimeout(QuicConnection* connection);
52
53 static void SetPerspective(QuicConnection* connection,
54 Perspective perspective);
55
56 static void SetSelfAddress(QuicConnection* connection,
57 const QuicSocketAddress& self_address);
58
59 static void SetPeerAddress(QuicConnection* connection,
60 const QuicSocketAddress& peer_address);
61
62 static void SetDirectPeerAddress(
63 QuicConnection* connection,
64 const QuicSocketAddress& direct_peer_address);
65
66 static void SetEffectivePeerAddress(
67 QuicConnection* connection,
68 const QuicSocketAddress& effective_peer_address);
69
QUICHE teama6ef0a62019-03-07 20:34:33 -050070 static void SwapCrypters(QuicConnection* connection, QuicFramer* framer);
71
72 static void SetCurrentPacket(QuicConnection* connection,
vasilvv5f225b02020-10-08 11:49:09 -040073 absl::string_view current_packet);
QUICHE teama6ef0a62019-03-07 20:34:33 -050074
75 static QuicConnectionHelperInterface* GetHelper(QuicConnection* connection);
76
77 static QuicAlarmFactory* GetAlarmFactory(QuicConnection* connection);
78
79 static QuicFramer* GetFramer(QuicConnection* connection);
80
81 static QuicAlarm* GetAckAlarm(QuicConnection* connection);
82 static QuicAlarm* GetPingAlarm(QuicConnection* connection);
83 static QuicAlarm* GetRetransmissionAlarm(QuicConnection* connection);
84 static QuicAlarm* GetSendAlarm(QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -050085 static QuicAlarm* GetMtuDiscoveryAlarm(QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -050086 static QuicAlarm* GetProcessUndecryptablePacketsAlarm(
87 QuicConnection* connection);
mattm072a7e32020-10-09 16:16:56 -070088 static QuicAlarm* GetDiscardPreviousOneRttKeysAlarm(
89 QuicConnection* connection);
mattmad5eb5d2020-12-03 16:12:15 -080090 static QuicAlarm* GetDiscardZeroRttDecryptionKeysAlarm(
91 QuicConnection* connection);
haoyuewange3c51d92021-03-08 07:35:03 -080092 static QuicAlarm* GetRetirePeerIssuedConnectionIdAlarm(
93 QuicConnection* connection);
94 static QuicAlarm* GetRetireSelfIssuedConnectionIdAlarm(
95 QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -050096
97 static QuicPacketWriter* GetWriter(QuicConnection* connection);
98 // If |owns_writer| is true, takes ownership of |writer|.
99 static void SetWriter(QuicConnection* connection,
100 QuicPacketWriter* writer,
101 bool owns_writer);
102 static void TearDownLocalConnectionState(QuicConnection* connection);
103 static QuicEncryptedPacket* GetConnectionClosePacket(
104 QuicConnection* connection);
105
106 static QuicPacketHeader* GetLastHeader(QuicConnection* connection);
107
108 static QuicConnectionStats* GetStats(QuicConnection* connection);
109
110 static QuicPacketCount GetPacketsBetweenMtuProbes(QuicConnection* connection);
111
wubf76cf2a2019-10-11 18:49:07 -0700112 static void ReInitializeMtuDiscoverer(
113 QuicConnection* connection,
114 QuicPacketCount packets_between_probes_base,
115 QuicPacketNumber next_probe_at);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500116 static void SetAckDecimationDelay(QuicConnection* connection,
117 float ack_decimation_delay);
118 static bool HasRetransmittableFrames(QuicConnection* connection,
119 uint64_t packet_number);
120 static bool GetNoStopWaitingFrames(QuicConnection* connection);
121 static void SetNoStopWaitingFrames(QuicConnection* connection,
122 bool no_stop_waiting_frames);
123 static void SetMaxTrackedPackets(QuicConnection* connection,
124 QuicPacketCount max_tracked_packets);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500125 static void SetNegotiatedVersion(QuicConnection* connection);
126 static void SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
127 QuicConnection* connection,
128 size_t new_value);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500129 static bool SupportsReleaseTime(QuicConnection* connection);
130 static QuicConnection::PacketContent GetCurrentPacketContent(
131 QuicConnection* connection);
QUICHE team8c1daa22019-03-13 08:33:41 -0700132 static void SetLastHeaderFormat(QuicConnection* connection,
133 PacketHeaderFormat format);
fayang5f135052019-08-22 17:59:40 -0700134 static void AddBytesReceived(QuicConnection* connection, size_t length);
135 static void SetAddressValidated(QuicConnection* connection);
dschinazidce90b02019-10-14 18:19:54 -0700136
137 static void SendConnectionClosePacket(QuicConnection* connection,
mattm55006b02021-01-14 15:09:54 -0800138 QuicIetfTransportErrorCodes ietf_error,
dschinazidce90b02019-10-14 18:19:54 -0700139 QuicErrorCode error,
140 const std::string& details);
rchd672c6d2019-11-27 15:30:54 -0800141
142 static size_t GetNumEncryptionLevels(QuicConnection* connection);
fayangb59c6f12020-03-23 15:06:14 -0700143
144 static QuicNetworkBlackholeDetector& GetBlackholeDetector(
145 QuicConnection* connection);
146
147 static QuicAlarm* GetBlackholeDetectorAlarm(QuicConnection* connection);
148
149 static QuicTime GetPathDegradingDeadline(QuicConnection* connection);
150
151 static QuicTime GetBlackholeDetectionDeadline(QuicConnection* connection);
fayangb9c88442020-03-26 07:03:57 -0700152
wub8add68a2020-07-27 12:07:38 -0700153 static QuicTime GetPathMtuReductionDetectionDeadline(
154 QuicConnection* connection);
155
fayangb9c88442020-03-26 07:03:57 -0700156 static QuicAlarm* GetIdleNetworkDetectorAlarm(QuicConnection* connection);
dschinazi39e5e552020-05-06 13:55:24 -0700157
fayang001c8282020-07-29 12:39:29 -0700158 static QuicTime GetIdleNetworkDeadline(QuicConnection* connection);
159
160 static QuicIdleNetworkDetector& GetIdleNetworkDetector(
161 QuicConnection* connection);
162
dschinazi39e5e552020-05-06 13:55:24 -0700163 static void SetServerConnectionId(
164 QuicConnection* connection,
165 const QuicConnectionId& server_connection_id);
fayang750b54f2020-06-18 06:26:54 -0700166
167 static size_t NumUndecryptablePackets(QuicConnection* connection);
danzh8a27a1a2020-09-02 10:26:28 -0700168
danzh9cb85b72020-12-30 07:17:09 -0800169 static size_t NumPendingPathChallengesToResponse(QuicConnection* connection);
renjietang052df7c2020-10-13 14:46:09 -0700170
171 static void SetConnectionClose(QuicConnection* connection);
fayang29ce0bd2020-10-29 08:28:44 -0700172
173 static void SendPing(QuicConnection* connection);
danzhe6211dc2020-11-19 09:19:00 -0800174
175 static void SetLastPacketDestinationAddress(QuicConnection* connection,
176 const QuicSocketAddress& address);
177
178 static QuicPathValidator* path_validator(QuicConnection* connection);
danzh9cb85b72020-12-30 07:17:09 -0800179
danzha4b519c2021-02-05 12:10:55 -0800180 static QuicByteCount BytesSentOnAlternativePath(QuicConnection* connection);
181
182 static QuicByteCount BytesReceivedOnAlternativePath(
danzh9cb85b72020-12-30 07:17:09 -0800183 QuicConnection* connection);
184
haoyuewang5c49d3e2021-04-08 07:33:33 -0700185 static QuicConnectionId GetClientConnectionIdOnAlternativePath(
186 const QuicConnection* connection);
187
188 static QuicConnectionId GetServerConnectionIdOnAlternativePath(
189 const QuicConnection* connection);
190
danzha4b519c2021-02-05 12:10:55 -0800191 static bool IsAlternativePath(QuicConnection* connection,
192 const QuicSocketAddress& self_address,
193 const QuicSocketAddress& peer_address);
danzha25ed9d2021-02-19 12:40:26 -0800194
195 static bool IsAlternativePathValidated(QuicConnection* connection);
196
197 static QuicByteCount BytesReceivedBeforeAddressValidation(
198 QuicConnection* connection);
haoyuewange3c51d92021-03-08 07:35:03 -0800199
200 static void EnableMultipleConnectionIdSupport(QuicConnection* connection);
201
202 static void ResetPeerIssuedConnectionIdManager(QuicConnection* connection);
haoyuewangb9142bc2021-04-13 06:28:22 -0700203
204 static QuicConnection::PathState* GetDefaultPath(QuicConnection* connection);
205
206 static QuicConnection::PathState* GetAlternativePath(
207 QuicConnection* connection);
haoyuewangdc60baf2021-04-19 14:03:14 -0700208
209 static void RetirePeerIssuedConnectionIdsNoLongerOnPath(
210 QuicConnection* connection);
haoyuewangb25dd212021-05-05 07:33:07 -0700211
212 static bool HasUnusedPeerIssuedConnectionId(const QuicConnection* connection);
213
214 static bool HasSelfIssuedConnectionIdToConsume(
215 const QuicConnection* connection);
haoyuewang095051f2021-07-16 12:11:35 -0700216
217 static QuicSelfIssuedConnectionIdManager* GetSelfIssuedConnectionIdManager(
218 QuicConnection* connection);
haoyuewang7711cc82021-09-07 12:26:00 -0700219
220 static std::unique_ptr<QuicSelfIssuedConnectionIdManager>
221 MakeSelfIssuedConnectionIdManager(QuicConnection* connection);
haoyuewang063d88c2021-10-21 15:06:26 -0700222
223 static void SetLastDecryptedLevel(QuicConnection* connection,
224 EncryptionLevel level);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500225};
226
227} // namespace test
228
229} // namespace quic
230
231#endif // QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_