blob: 6f9c8c6e83744623ca67ce6e6b615cbfa0717d59 [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#include "net/third_party/quiche/src/quic/test_tools/quic_connection_peer.h"
6
7#include "net/third_party/quiche/src/quic/core/congestion_control/send_algorithm_interface.h"
8#include "net/third_party/quiche/src/quic/core/quic_packet_writer.h"
9#include "net/third_party/quiche/src/quic/core/quic_received_packet_manager.h"
10#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
11#include "net/third_party/quiche/src/quic/test_tools/quic_framer_peer.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050012#include "net/third_party/quiche/src/quic/test_tools/quic_sent_packet_manager_peer.h"
QUICHE team6dcf6ab2019-12-11 10:10:51 -080013#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050014
15namespace quic {
16namespace test {
17
18// static
QUICHE teama6ef0a62019-03-07 20:34:33 -050019void QuicConnectionPeer::SetSendAlgorithm(
20 QuicConnection* connection,
21 SendAlgorithmInterface* send_algorithm) {
22 GetSentPacketManager(connection)->SetSendAlgorithm(send_algorithm);
23}
24
25// static
26void QuicConnectionPeer::SetLossAlgorithm(
27 QuicConnection* connection,
28 LossDetectionInterface* loss_algorithm) {
29 GetSentPacketManager(connection)->loss_algorithm_ = loss_algorithm;
30}
31
32// static
QUICHE teama6ef0a62019-03-07 20:34:33 -050033void QuicConnectionPeer::PopulateStopWaitingFrame(
34 QuicConnection* connection,
35 QuicStopWaitingFrame* stop_waiting) {
36 connection->PopulateStopWaitingFrame(stop_waiting);
37}
38
39// static
QUICHE teama6ef0a62019-03-07 20:34:33 -050040QuicPacketCreator* QuicConnectionPeer::GetPacketCreator(
41 QuicConnection* connection) {
fayang4245c212019-11-05 13:33:46 -080042 return &connection->packet_creator_;
QUICHE teama6ef0a62019-03-07 20:34:33 -050043}
44
45// static
46QuicSentPacketManager* QuicConnectionPeer::GetSentPacketManager(
47 QuicConnection* connection) {
48 return &connection->sent_packet_manager_;
49}
50
51// static
52QuicTime::Delta QuicConnectionPeer::GetNetworkTimeout(
53 QuicConnection* connection) {
fayang3a58dc42020-06-29 11:27:14 -070054 return connection->idle_network_detector_.idle_network_timeout_;
QUICHE teama6ef0a62019-03-07 20:34:33 -050055}
56
57// static
58void QuicConnectionPeer::SetPerspective(QuicConnection* connection,
59 Perspective perspective) {
60 connection->perspective_ = perspective;
61 QuicFramerPeer::SetPerspective(&connection->framer_, perspective);
62}
63
64// static
65void QuicConnectionPeer::SetSelfAddress(QuicConnection* connection,
66 const QuicSocketAddress& self_address) {
67 connection->self_address_ = self_address;
68}
69
70// static
71void QuicConnectionPeer::SetPeerAddress(QuicConnection* connection,
72 const QuicSocketAddress& peer_address) {
73 connection->peer_address_ = peer_address;
74}
75
76// static
77void QuicConnectionPeer::SetDirectPeerAddress(
78 QuicConnection* connection,
79 const QuicSocketAddress& direct_peer_address) {
80 connection->direct_peer_address_ = direct_peer_address;
81}
82
83// static
84void QuicConnectionPeer::SetEffectivePeerAddress(
85 QuicConnection* connection,
86 const QuicSocketAddress& effective_peer_address) {
87 connection->effective_peer_address_ = effective_peer_address;
88}
89
90// static
QUICHE teama6ef0a62019-03-07 20:34:33 -050091void QuicConnectionPeer::SwapCrypters(QuicConnection* connection,
92 QuicFramer* framer) {
93 QuicFramerPeer::SwapCrypters(framer, &connection->framer_);
94}
95
96// static
QUICHE team6dcf6ab2019-12-11 10:10:51 -080097void QuicConnectionPeer::SetCurrentPacket(
98 QuicConnection* connection,
99 quiche::QuicheStringPiece current_packet) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500100 connection->current_packet_data_ = current_packet.data();
101 connection->last_size_ = current_packet.size();
102}
103
104// static
105QuicConnectionHelperInterface* QuicConnectionPeer::GetHelper(
106 QuicConnection* connection) {
107 return connection->helper_;
108}
109
110// static
111QuicAlarmFactory* QuicConnectionPeer::GetAlarmFactory(
112 QuicConnection* connection) {
113 return connection->alarm_factory_;
114}
115
116// static
117QuicFramer* QuicConnectionPeer::GetFramer(QuicConnection* connection) {
118 return &connection->framer_;
119}
120
121// static
122QuicAlarm* QuicConnectionPeer::GetAckAlarm(QuicConnection* connection) {
123 return connection->ack_alarm_.get();
124}
125
126// static
127QuicAlarm* QuicConnectionPeer::GetPingAlarm(QuicConnection* connection) {
128 return connection->ping_alarm_.get();
129}
130
131// static
132QuicAlarm* QuicConnectionPeer::GetRetransmissionAlarm(
133 QuicConnection* connection) {
134 return connection->retransmission_alarm_.get();
135}
136
137// static
138QuicAlarm* QuicConnectionPeer::GetSendAlarm(QuicConnection* connection) {
139 return connection->send_alarm_.get();
140}
141
142// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500143QuicAlarm* QuicConnectionPeer::GetMtuDiscoveryAlarm(
144 QuicConnection* connection) {
145 return connection->mtu_discovery_alarm_.get();
146}
147
148// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500149QuicAlarm* QuicConnectionPeer::GetProcessUndecryptablePacketsAlarm(
150 QuicConnection* connection) {
151 return connection->process_undecryptable_packets_alarm_.get();
152}
153
154// static
155QuicPacketWriter* QuicConnectionPeer::GetWriter(QuicConnection* connection) {
156 return connection->writer_;
157}
158
159// static
160void QuicConnectionPeer::SetWriter(QuicConnection* connection,
161 QuicPacketWriter* writer,
162 bool owns_writer) {
163 if (connection->owns_writer_) {
164 delete connection->writer_;
165 }
166 connection->writer_ = writer;
167 connection->owns_writer_ = owns_writer;
168}
169
170// static
171void QuicConnectionPeer::TearDownLocalConnectionState(
172 QuicConnection* connection) {
173 connection->connected_ = false;
174}
175
176// static
177QuicEncryptedPacket* QuicConnectionPeer::GetConnectionClosePacket(
178 QuicConnection* connection) {
179 if (connection->termination_packets_ == nullptr ||
180 connection->termination_packets_->empty()) {
181 return nullptr;
182 }
183 return (*connection->termination_packets_)[0].get();
184}
185
186// static
187QuicPacketHeader* QuicConnectionPeer::GetLastHeader(
188 QuicConnection* connection) {
189 return &connection->last_header_;
190}
191
192// static
193QuicConnectionStats* QuicConnectionPeer::GetStats(QuicConnection* connection) {
194 return &connection->stats_;
195}
196
197// static
198QuicPacketCount QuicConnectionPeer::GetPacketsBetweenMtuProbes(
199 QuicConnection* connection) {
wub173916e2019-11-27 14:36:24 -0800200 return connection->mtu_discoverer_.packets_between_probes();
QUICHE teama6ef0a62019-03-07 20:34:33 -0500201}
202
203// static
wubf76cf2a2019-10-11 18:49:07 -0700204void QuicConnectionPeer::ReInitializeMtuDiscoverer(
205 QuicConnection* connection,
206 QuicPacketCount packets_between_probes_base,
207 QuicPacketNumber next_probe_at) {
208 connection->mtu_discoverer_ =
209 QuicConnectionMtuDiscoverer(packets_between_probes_base, next_probe_at);
210}
211
212// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500213void QuicConnectionPeer::SetAckMode(QuicConnection* connection,
214 AckMode ack_mode) {
fayang5f464302019-06-20 12:57:33 -0700215 for (auto& received_packet_manager :
216 connection->uber_received_packet_manager_.received_packet_managers_) {
217 received_packet_manager.ack_mode_ = ack_mode;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500218 }
219}
220
221// static
222void QuicConnectionPeer::SetFastAckAfterQuiescence(
223 QuicConnection* connection,
224 bool fast_ack_after_quiescence) {
fayang5f464302019-06-20 12:57:33 -0700225 for (auto& received_packet_manager :
226 connection->uber_received_packet_manager_.received_packet_managers_) {
227 received_packet_manager.fast_ack_after_quiescence_ =
fayangf477f732019-06-20 07:03:06 -0700228 fast_ack_after_quiescence;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500229 }
230}
231
232// static
233void QuicConnectionPeer::SetAckDecimationDelay(QuicConnection* connection,
234 float ack_decimation_delay) {
fayang5f464302019-06-20 12:57:33 -0700235 for (auto& received_packet_manager :
236 connection->uber_received_packet_manager_.received_packet_managers_) {
237 received_packet_manager.ack_decimation_delay_ = ack_decimation_delay;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500238 }
239}
240
241// static
242bool QuicConnectionPeer::HasRetransmittableFrames(QuicConnection* connection,
243 uint64_t packet_number) {
244 return QuicSentPacketManagerPeer::HasRetransmittableFrames(
245 GetSentPacketManager(connection), packet_number);
246}
247
248// static
249bool QuicConnectionPeer::GetNoStopWaitingFrames(QuicConnection* connection) {
250 return connection->no_stop_waiting_frames_;
251}
252
253// static
254void QuicConnectionPeer::SetNoStopWaitingFrames(QuicConnection* connection,
255 bool no_stop_waiting_frames) {
256 connection->no_stop_waiting_frames_ = no_stop_waiting_frames;
257}
258
259// static
260void QuicConnectionPeer::SetMaxTrackedPackets(
261 QuicConnection* connection,
262 QuicPacketCount max_tracked_packets) {
263 connection->max_tracked_packets_ = max_tracked_packets;
264}
265
266// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500267void QuicConnectionPeer::SetNegotiatedVersion(QuicConnection* connection) {
fayang8aba1ff2019-06-21 12:00:54 -0700268 connection->version_negotiated_ = true;
wub256b2d62019-11-25 08:46:55 -0800269 if (connection->perspective() == Perspective::IS_SERVER &&
270 !QuicFramerPeer::infer_packet_header_type_from_version(
271 &connection->framer_)) {
272 connection->framer_.InferPacketHeaderTypeFromVersion();
273 }
QUICHE teama6ef0a62019-03-07 20:34:33 -0500274}
275
276// static
277void QuicConnectionPeer::SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
278 QuicConnection* connection,
279 size_t new_value) {
280 connection->max_consecutive_num_packets_with_no_retransmittable_frames_ =
281 new_value;
282}
283
284// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500285bool QuicConnectionPeer::SupportsReleaseTime(QuicConnection* connection) {
286 return connection->supports_release_time_;
287}
288
289// static
290QuicConnection::PacketContent QuicConnectionPeer::GetCurrentPacketContent(
291 QuicConnection* connection) {
292 return connection->current_packet_content_;
293}
294
QUICHE team8c1daa22019-03-13 08:33:41 -0700295// static
296void QuicConnectionPeer::SetLastHeaderFormat(QuicConnection* connection,
297 PacketHeaderFormat format) {
298 connection->last_header_.form = format;
299}
300
fayang5f135052019-08-22 17:59:40 -0700301// static
302void QuicConnectionPeer::AddBytesReceived(QuicConnection* connection,
303 size_t length) {
304 if (connection->EnforceAntiAmplificationLimit()) {
305 connection->bytes_received_before_address_validation_ += length;
306 }
307}
308
309// static
310void QuicConnectionPeer::SetAddressValidated(QuicConnection* connection) {
311 connection->address_validated_ = true;
312}
313
dschinazidce90b02019-10-14 18:19:54 -0700314// static
315void QuicConnectionPeer::SendConnectionClosePacket(QuicConnection* connection,
316 QuicErrorCode error,
317 const std::string& details) {
318 connection->SendConnectionClosePacket(error, details);
319}
320
rchd672c6d2019-11-27 15:30:54 -0800321// static
322size_t QuicConnectionPeer::GetNumEncryptionLevels(QuicConnection* connection) {
323 size_t count = 0;
324 for (EncryptionLevel level :
325 {ENCRYPTION_INITIAL, ENCRYPTION_HANDSHAKE, ENCRYPTION_ZERO_RTT,
326 ENCRYPTION_FORWARD_SECURE}) {
327 if (connection->framer_.HasEncrypterOfEncryptionLevel(level)) {
328 ++count;
329 }
330 }
331 return count;
332}
333
fayangb59c6f12020-03-23 15:06:14 -0700334// static
335QuicNetworkBlackholeDetector& QuicConnectionPeer::GetBlackholeDetector(
336 QuicConnection* connection) {
337 return connection->blackhole_detector_;
338}
339
340// static
341QuicAlarm* QuicConnectionPeer::GetBlackholeDetectorAlarm(
342 QuicConnection* connection) {
343 return connection->blackhole_detector_.alarm_.get();
344}
345
346// static
347QuicTime QuicConnectionPeer::GetPathDegradingDeadline(
348 QuicConnection* connection) {
349 return connection->blackhole_detector_.path_degrading_deadline_;
350}
351
352// static
353QuicTime QuicConnectionPeer::GetBlackholeDetectionDeadline(
354 QuicConnection* connection) {
355 return connection->blackhole_detector_.blackhole_deadline_;
356}
357
fayangb9c88442020-03-26 07:03:57 -0700358// static
wub8add68a2020-07-27 12:07:38 -0700359QuicTime QuicConnectionPeer::GetPathMtuReductionDetectionDeadline(
360 QuicConnection* connection) {
361 return connection->blackhole_detector_.path_mtu_reduction_deadline_;
362}
363
364// static
fayang001c8282020-07-29 12:39:29 -0700365QuicTime QuicConnectionPeer::GetIdleNetworkDeadline(
366 QuicConnection* connection) {
367 return connection->idle_network_detector_.GetIdleNetworkDeadline();
368}
369
370// static
fayangb9c88442020-03-26 07:03:57 -0700371QuicAlarm* QuicConnectionPeer::GetIdleNetworkDetectorAlarm(
372 QuicConnection* connection) {
373 return connection->idle_network_detector_.alarm_.get();
374}
375
dschinazi39e5e552020-05-06 13:55:24 -0700376// static
fayang001c8282020-07-29 12:39:29 -0700377QuicIdleNetworkDetector& QuicConnectionPeer::GetIdleNetworkDetector(
378 QuicConnection* connection) {
379 return connection->idle_network_detector_;
380}
381
382// static
dschinazi39e5e552020-05-06 13:55:24 -0700383void QuicConnectionPeer::SetServerConnectionId(
384 QuicConnection* connection,
385 const QuicConnectionId& server_connection_id) {
386 connection->server_connection_id_ = server_connection_id;
387 connection->InstallInitialCrypters(server_connection_id);
388}
389
fayang750b54f2020-06-18 06:26:54 -0700390// static
391size_t QuicConnectionPeer::NumUndecryptablePackets(QuicConnection* connection) {
392 return connection->undecryptable_packets_.size();
393}
394
QUICHE teama6ef0a62019-03-07 20:34:33 -0500395} // namespace test
396} // namespace quic