blob: 66d1a51434e5d862561592c571cb986e87faffd3 [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"
12#include "net/third_party/quiche/src/quic/test_tools/quic_packet_generator_peer.h"
13#include "net/third_party/quiche/src/quic/test_tools/quic_sent_packet_manager_peer.h"
14
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
40QuicConnectionVisitorInterface* QuicConnectionPeer::GetVisitor(
41 QuicConnection* connection) {
42 return connection->visitor_;
43}
44
45// static
46QuicPacketCreator* QuicConnectionPeer::GetPacketCreator(
47 QuicConnection* connection) {
48 return QuicPacketGeneratorPeer::GetPacketCreator(
49 &connection->packet_generator_);
50}
51
52// static
53QuicPacketGenerator* QuicConnectionPeer::GetPacketGenerator(
54 QuicConnection* connection) {
55 return &connection->packet_generator_;
56}
57
58// static
59QuicSentPacketManager* QuicConnectionPeer::GetSentPacketManager(
60 QuicConnection* connection) {
61 return &connection->sent_packet_manager_;
62}
63
64// static
65QuicTime::Delta QuicConnectionPeer::GetNetworkTimeout(
66 QuicConnection* connection) {
67 return connection->idle_network_timeout_;
68}
69
70// static
71void QuicConnectionPeer::SetPerspective(QuicConnection* connection,
72 Perspective perspective) {
73 connection->perspective_ = perspective;
74 QuicFramerPeer::SetPerspective(&connection->framer_, perspective);
75}
76
77// static
78void QuicConnectionPeer::SetSelfAddress(QuicConnection* connection,
79 const QuicSocketAddress& self_address) {
80 connection->self_address_ = self_address;
81}
82
83// static
84void QuicConnectionPeer::SetPeerAddress(QuicConnection* connection,
85 const QuicSocketAddress& peer_address) {
86 connection->peer_address_ = peer_address;
87}
88
89// static
90void QuicConnectionPeer::SetDirectPeerAddress(
91 QuicConnection* connection,
92 const QuicSocketAddress& direct_peer_address) {
93 connection->direct_peer_address_ = direct_peer_address;
94}
95
96// static
97void QuicConnectionPeer::SetEffectivePeerAddress(
98 QuicConnection* connection,
99 const QuicSocketAddress& effective_peer_address) {
100 connection->effective_peer_address_ = effective_peer_address;
101}
102
103// static
104bool QuicConnectionPeer::IsSilentCloseEnabled(QuicConnection* connection) {
105 return connection->idle_timeout_connection_close_behavior_ ==
106 ConnectionCloseBehavior::SILENT_CLOSE;
107}
108
109// static
110void QuicConnectionPeer::SwapCrypters(QuicConnection* connection,
111 QuicFramer* framer) {
112 QuicFramerPeer::SwapCrypters(framer, &connection->framer_);
113}
114
115// static
116void QuicConnectionPeer::SetCurrentPacket(QuicConnection* connection,
117 QuicStringPiece current_packet) {
118 connection->current_packet_data_ = current_packet.data();
119 connection->last_size_ = current_packet.size();
120}
121
122// static
123QuicConnectionHelperInterface* QuicConnectionPeer::GetHelper(
124 QuicConnection* connection) {
125 return connection->helper_;
126}
127
128// static
129QuicAlarmFactory* QuicConnectionPeer::GetAlarmFactory(
130 QuicConnection* connection) {
131 return connection->alarm_factory_;
132}
133
134// static
135QuicFramer* QuicConnectionPeer::GetFramer(QuicConnection* connection) {
136 return &connection->framer_;
137}
138
139// static
140QuicAlarm* QuicConnectionPeer::GetAckAlarm(QuicConnection* connection) {
141 return connection->ack_alarm_.get();
142}
143
144// static
145QuicAlarm* QuicConnectionPeer::GetPingAlarm(QuicConnection* connection) {
146 return connection->ping_alarm_.get();
147}
148
149// static
150QuicAlarm* QuicConnectionPeer::GetRetransmissionAlarm(
151 QuicConnection* connection) {
152 return connection->retransmission_alarm_.get();
153}
154
155// static
156QuicAlarm* QuicConnectionPeer::GetSendAlarm(QuicConnection* connection) {
157 return connection->send_alarm_.get();
158}
159
160// static
161QuicAlarm* QuicConnectionPeer::GetTimeoutAlarm(QuicConnection* connection) {
162 return connection->timeout_alarm_.get();
163}
164
165// static
166QuicAlarm* QuicConnectionPeer::GetMtuDiscoveryAlarm(
167 QuicConnection* connection) {
168 return connection->mtu_discovery_alarm_.get();
169}
170
171// static
172QuicAlarm* QuicConnectionPeer::GetPathDegradingAlarm(
173 QuicConnection* connection) {
174 return connection->path_degrading_alarm_.get();
175}
176
177// static
178QuicAlarm* QuicConnectionPeer::GetProcessUndecryptablePacketsAlarm(
179 QuicConnection* connection) {
180 return connection->process_undecryptable_packets_alarm_.get();
181}
182
183// static
184QuicPacketWriter* QuicConnectionPeer::GetWriter(QuicConnection* connection) {
185 return connection->writer_;
186}
187
188// static
189void QuicConnectionPeer::SetWriter(QuicConnection* connection,
190 QuicPacketWriter* writer,
191 bool owns_writer) {
192 if (connection->owns_writer_) {
193 delete connection->writer_;
194 }
195 connection->writer_ = writer;
196 connection->owns_writer_ = owns_writer;
197}
198
199// static
200void QuicConnectionPeer::TearDownLocalConnectionState(
201 QuicConnection* connection) {
202 connection->connected_ = false;
203}
204
205// static
206QuicEncryptedPacket* QuicConnectionPeer::GetConnectionClosePacket(
207 QuicConnection* connection) {
208 if (connection->termination_packets_ == nullptr ||
209 connection->termination_packets_->empty()) {
210 return nullptr;
211 }
212 return (*connection->termination_packets_)[0].get();
213}
214
215// static
216QuicPacketHeader* QuicConnectionPeer::GetLastHeader(
217 QuicConnection* connection) {
218 return &connection->last_header_;
219}
220
221// static
222QuicConnectionStats* QuicConnectionPeer::GetStats(QuicConnection* connection) {
223 return &connection->stats_;
224}
225
226// static
227QuicPacketCount QuicConnectionPeer::GetPacketsBetweenMtuProbes(
228 QuicConnection* connection) {
229 return connection->packets_between_mtu_probes_;
230}
231
232// static
233void QuicConnectionPeer::SetPacketsBetweenMtuProbes(QuicConnection* connection,
234 QuicPacketCount packets) {
235 connection->packets_between_mtu_probes_ = packets;
236}
237
238// static
239void QuicConnectionPeer::SetNextMtuProbeAt(QuicConnection* connection,
240 QuicPacketNumber number) {
241 connection->next_mtu_probe_at_ = number;
242}
243
244// static
245void QuicConnectionPeer::SetAckMode(QuicConnection* connection,
246 AckMode ack_mode) {
fayang5f464302019-06-20 12:57:33 -0700247 for (auto& received_packet_manager :
248 connection->uber_received_packet_manager_.received_packet_managers_) {
249 received_packet_manager.ack_mode_ = ack_mode;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500250 }
251}
252
253// static
254void QuicConnectionPeer::SetFastAckAfterQuiescence(
255 QuicConnection* connection,
256 bool fast_ack_after_quiescence) {
fayang5f464302019-06-20 12:57:33 -0700257 for (auto& received_packet_manager :
258 connection->uber_received_packet_manager_.received_packet_managers_) {
259 received_packet_manager.fast_ack_after_quiescence_ =
fayangf477f732019-06-20 07:03:06 -0700260 fast_ack_after_quiescence;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500261 }
262}
263
264// static
265void QuicConnectionPeer::SetAckDecimationDelay(QuicConnection* connection,
266 float ack_decimation_delay) {
fayang5f464302019-06-20 12:57:33 -0700267 for (auto& received_packet_manager :
268 connection->uber_received_packet_manager_.received_packet_managers_) {
269 received_packet_manager.ack_decimation_delay_ = ack_decimation_delay;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500270 }
271}
272
273// static
274bool QuicConnectionPeer::HasRetransmittableFrames(QuicConnection* connection,
275 uint64_t packet_number) {
276 return QuicSentPacketManagerPeer::HasRetransmittableFrames(
277 GetSentPacketManager(connection), packet_number);
278}
279
280// static
281bool QuicConnectionPeer::GetNoStopWaitingFrames(QuicConnection* connection) {
282 return connection->no_stop_waiting_frames_;
283}
284
285// static
286void QuicConnectionPeer::SetNoStopWaitingFrames(QuicConnection* connection,
287 bool no_stop_waiting_frames) {
288 connection->no_stop_waiting_frames_ = no_stop_waiting_frames;
289}
290
291// static
292void QuicConnectionPeer::SetMaxTrackedPackets(
293 QuicConnection* connection,
294 QuicPacketCount max_tracked_packets) {
295 connection->max_tracked_packets_ = max_tracked_packets;
296}
297
298// static
299void QuicConnectionPeer::SetSessionDecidesWhatToWrite(
300 QuicConnection* connection) {
301 connection->sent_packet_manager_.SetSessionDecideWhatToWrite(true);
302 connection->packet_generator_.SetCanSetTransmissionType(true);
303}
304
305// static
306void QuicConnectionPeer::SetNegotiatedVersion(QuicConnection* connection) {
fayang8aba1ff2019-06-21 12:00:54 -0700307 connection->version_negotiated_ = true;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500308}
309
310// static
311void QuicConnectionPeer::SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
312 QuicConnection* connection,
313 size_t new_value) {
314 connection->max_consecutive_num_packets_with_no_retransmittable_frames_ =
315 new_value;
316}
317
318// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500319bool QuicConnectionPeer::SupportsReleaseTime(QuicConnection* connection) {
320 return connection->supports_release_time_;
321}
322
323// static
324QuicConnection::PacketContent QuicConnectionPeer::GetCurrentPacketContent(
325 QuicConnection* connection) {
326 return connection->current_packet_content_;
327}
328
QUICHE team8c1daa22019-03-13 08:33:41 -0700329// static
330void QuicConnectionPeer::SetLastHeaderFormat(QuicConnection* connection,
331 PacketHeaderFormat format) {
332 connection->last_header_.form = format;
333}
334
QUICHE teama6ef0a62019-03-07 20:34:33 -0500335} // namespace test
336} // namespace quic