xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // 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 "quiche/quic/test_tools/quic_connection_peer.h"
6 
7 #include "absl/strings/string_view.h"
8 #include "quiche/quic/core/congestion_control/send_algorithm_interface.h"
9 #include "quiche/quic/core/quic_packet_writer.h"
10 #include "quiche/quic/core/quic_received_packet_manager.h"
11 #include "quiche/quic/platform/api/quic_flags.h"
12 #include "quiche/quic/platform/api/quic_socket_address.h"
13 #include "quiche/quic/test_tools/quic_connection_id_manager_peer.h"
14 #include "quiche/quic/test_tools/quic_framer_peer.h"
15 #include "quiche/quic/test_tools/quic_sent_packet_manager_peer.h"
16 
17 namespace quic {
18 namespace test {
19 
20 // static
SetSendAlgorithm(QuicConnection * connection,SendAlgorithmInterface * send_algorithm)21 void QuicConnectionPeer::SetSendAlgorithm(
22     QuicConnection* connection, SendAlgorithmInterface* send_algorithm) {
23   GetSentPacketManager(connection)->SetSendAlgorithm(send_algorithm);
24 }
25 
26 // static
SetLossAlgorithm(QuicConnection * connection,LossDetectionInterface * loss_algorithm)27 void QuicConnectionPeer::SetLossAlgorithm(
28     QuicConnection* connection, LossDetectionInterface* loss_algorithm) {
29   GetSentPacketManager(connection)->loss_algorithm_ = loss_algorithm;
30 }
31 
32 // static
GetPacketCreator(QuicConnection * connection)33 QuicPacketCreator* QuicConnectionPeer::GetPacketCreator(
34     QuicConnection* connection) {
35   return &connection->packet_creator_;
36 }
37 
38 // static
GetSentPacketManager(QuicConnection * connection)39 QuicSentPacketManager* QuicConnectionPeer::GetSentPacketManager(
40     QuicConnection* connection) {
41   return &connection->sent_packet_manager_;
42 }
43 
44 // static
GetNetworkTimeout(QuicConnection * connection)45 QuicTime::Delta QuicConnectionPeer::GetNetworkTimeout(
46     QuicConnection* connection) {
47   return connection->idle_network_detector_.idle_network_timeout_;
48 }
49 
50 // static
GetHandshakeTimeout(QuicConnection * connection)51 QuicTime::Delta QuicConnectionPeer::GetHandshakeTimeout(
52     QuicConnection* connection) {
53   return connection->idle_network_detector_.handshake_timeout_;
54 }
55 
56 // static
SetPerspective(QuicConnection * connection,Perspective perspective)57 void QuicConnectionPeer::SetPerspective(QuicConnection* connection,
58                                         Perspective perspective) {
59   connection->perspective_ = perspective;
60   QuicFramerPeer::SetPerspective(&connection->framer_, perspective);
61   connection->ping_manager_.perspective_ = perspective;
62 }
63 
64 // static
SetSelfAddress(QuicConnection * connection,const QuicSocketAddress & self_address)65 void QuicConnectionPeer::SetSelfAddress(QuicConnection* connection,
66                                         const QuicSocketAddress& self_address) {
67   connection->default_path_.self_address = self_address;
68 }
69 
70 // static
SetPeerAddress(QuicConnection * connection,const QuicSocketAddress & peer_address)71 void QuicConnectionPeer::SetPeerAddress(QuicConnection* connection,
72                                         const QuicSocketAddress& peer_address) {
73   connection->UpdatePeerAddress(peer_address);
74 }
75 
76 // static
SetDirectPeerAddress(QuicConnection * connection,const QuicSocketAddress & direct_peer_address)77 void QuicConnectionPeer::SetDirectPeerAddress(
78     QuicConnection* connection, const QuicSocketAddress& direct_peer_address) {
79   connection->direct_peer_address_ = direct_peer_address;
80 }
81 
82 // static
SetEffectivePeerAddress(QuicConnection * connection,const QuicSocketAddress & effective_peer_address)83 void QuicConnectionPeer::SetEffectivePeerAddress(
84     QuicConnection* connection,
85     const QuicSocketAddress& effective_peer_address) {
86   connection->default_path_.peer_address = effective_peer_address;
87 }
88 
89 // static
SwapCrypters(QuicConnection * connection,QuicFramer * framer)90 void QuicConnectionPeer::SwapCrypters(QuicConnection* connection,
91                                       QuicFramer* framer) {
92   QuicFramerPeer::SwapCrypters(framer, &connection->framer_);
93 }
94 
95 // static
SetCurrentPacket(QuicConnection * connection,absl::string_view current_packet)96 void QuicConnectionPeer::SetCurrentPacket(QuicConnection* connection,
97                                           absl::string_view current_packet) {
98   connection->current_packet_data_ = current_packet.data();
99   connection->last_received_packet_info_.length = current_packet.size();
100 }
101 
102 // static
GetHelper(QuicConnection * connection)103 QuicConnectionHelperInterface* QuicConnectionPeer::GetHelper(
104     QuicConnection* connection) {
105   return connection->helper_;
106 }
107 
108 // static
GetAlarmFactory(QuicConnection * connection)109 QuicAlarmFactory* QuicConnectionPeer::GetAlarmFactory(
110     QuicConnection* connection) {
111   return connection->alarm_factory_;
112 }
113 
114 // static
GetFramer(QuicConnection * connection)115 QuicFramer* QuicConnectionPeer::GetFramer(QuicConnection* connection) {
116   return &connection->framer_;
117 }
118 
119 // static
GetAckAlarm(QuicConnection * connection)120 QuicAlarm* QuicConnectionPeer::GetAckAlarm(QuicConnection* connection) {
121   return connection->ack_alarm_.get();
122 }
123 
124 // static
GetPingAlarm(QuicConnection * connection)125 QuicAlarm* QuicConnectionPeer::GetPingAlarm(QuicConnection* connection) {
126   return connection->ping_manager_.alarm_.get();
127 }
128 
129 // static
GetRetransmissionAlarm(QuicConnection * connection)130 QuicAlarm* QuicConnectionPeer::GetRetransmissionAlarm(
131     QuicConnection* connection) {
132   return connection->retransmission_alarm_.get();
133 }
134 
135 // static
GetSendAlarm(QuicConnection * connection)136 QuicAlarm* QuicConnectionPeer::GetSendAlarm(QuicConnection* connection) {
137   return connection->send_alarm_.get();
138 }
139 
140 // static
GetMtuDiscoveryAlarm(QuicConnection * connection)141 QuicAlarm* QuicConnectionPeer::GetMtuDiscoveryAlarm(
142     QuicConnection* connection) {
143   return connection->mtu_discovery_alarm_.get();
144 }
145 
146 // static
GetProcessUndecryptablePacketsAlarm(QuicConnection * connection)147 QuicAlarm* QuicConnectionPeer::GetProcessUndecryptablePacketsAlarm(
148     QuicConnection* connection) {
149   return connection->process_undecryptable_packets_alarm_.get();
150 }
151 
152 // static
GetDiscardPreviousOneRttKeysAlarm(QuicConnection * connection)153 QuicAlarm* QuicConnectionPeer::GetDiscardPreviousOneRttKeysAlarm(
154     QuicConnection* connection) {
155   return connection->discard_previous_one_rtt_keys_alarm_.get();
156 }
157 
158 // static
GetDiscardZeroRttDecryptionKeysAlarm(QuicConnection * connection)159 QuicAlarm* QuicConnectionPeer::GetDiscardZeroRttDecryptionKeysAlarm(
160     QuicConnection* connection) {
161   return connection->discard_zero_rtt_decryption_keys_alarm_.get();
162 }
163 
164 // static
GetRetirePeerIssuedConnectionIdAlarm(QuicConnection * connection)165 QuicAlarm* QuicConnectionPeer::GetRetirePeerIssuedConnectionIdAlarm(
166     QuicConnection* connection) {
167   if (connection->peer_issued_cid_manager_ == nullptr) {
168     return nullptr;
169   }
170   return QuicConnectionIdManagerPeer::GetRetirePeerIssuedConnectionIdAlarm(
171       connection->peer_issued_cid_manager_.get());
172 }
173 // static
GetRetireSelfIssuedConnectionIdAlarm(QuicConnection * connection)174 QuicAlarm* QuicConnectionPeer::GetRetireSelfIssuedConnectionIdAlarm(
175     QuicConnection* connection) {
176   if (connection->self_issued_cid_manager_ == nullptr) {
177     return nullptr;
178   }
179   return QuicConnectionIdManagerPeer::GetRetireSelfIssuedConnectionIdAlarm(
180       connection->self_issued_cid_manager_.get());
181 }
182 
183 // static
GetWriter(QuicConnection * connection)184 QuicPacketWriter* QuicConnectionPeer::GetWriter(QuicConnection* connection) {
185   return connection->writer_;
186 }
187 
188 // static
SetWriter(QuicConnection * connection,QuicPacketWriter * writer,bool owns_writer)189 void QuicConnectionPeer::SetWriter(QuicConnection* connection,
190                                    QuicPacketWriter* writer, bool owns_writer) {
191   if (connection->owns_writer_) {
192     delete connection->writer_;
193   }
194   connection->writer_ = writer;
195   connection->owns_writer_ = owns_writer;
196 }
197 
198 // static
TearDownLocalConnectionState(QuicConnection * connection)199 void QuicConnectionPeer::TearDownLocalConnectionState(
200     QuicConnection* connection) {
201   connection->connected_ = false;
202 }
203 
204 // static
GetConnectionClosePacket(QuicConnection * connection)205 QuicEncryptedPacket* QuicConnectionPeer::GetConnectionClosePacket(
206     QuicConnection* connection) {
207   if (connection->termination_packets_ == nullptr ||
208       connection->termination_packets_->empty()) {
209     return nullptr;
210   }
211   return (*connection->termination_packets_)[0].get();
212 }
213 
214 // static
GetLastHeader(QuicConnection * connection)215 QuicPacketHeader* QuicConnectionPeer::GetLastHeader(
216     QuicConnection* connection) {
217   return &connection->last_received_packet_info_.header;
218 }
219 
220 // static
GetStats(QuicConnection * connection)221 QuicConnectionStats* QuicConnectionPeer::GetStats(QuicConnection* connection) {
222   return &connection->stats_;
223 }
224 
225 // static
GetPacketsBetweenMtuProbes(QuicConnection * connection)226 QuicPacketCount QuicConnectionPeer::GetPacketsBetweenMtuProbes(
227     QuicConnection* connection) {
228   return connection->mtu_discoverer_.packets_between_probes();
229 }
230 
231 // static
ReInitializeMtuDiscoverer(QuicConnection * connection,QuicPacketCount packets_between_probes_base,QuicPacketNumber next_probe_at)232 void QuicConnectionPeer::ReInitializeMtuDiscoverer(
233     QuicConnection* connection, QuicPacketCount packets_between_probes_base,
234     QuicPacketNumber next_probe_at) {
235   connection->mtu_discoverer_ =
236       QuicConnectionMtuDiscoverer(packets_between_probes_base, next_probe_at);
237 }
238 
239 // static
SetAckDecimationDelay(QuicConnection * connection,float ack_decimation_delay)240 void QuicConnectionPeer::SetAckDecimationDelay(QuicConnection* connection,
241                                                float ack_decimation_delay) {
242   for (auto& received_packet_manager :
243        connection->uber_received_packet_manager_.received_packet_managers_) {
244     received_packet_manager.ack_decimation_delay_ = ack_decimation_delay;
245   }
246 }
247 
248 // static
HasRetransmittableFrames(QuicConnection * connection,uint64_t packet_number)249 bool QuicConnectionPeer::HasRetransmittableFrames(QuicConnection* connection,
250                                                   uint64_t packet_number) {
251   return QuicSentPacketManagerPeer::HasRetransmittableFrames(
252       GetSentPacketManager(connection), packet_number);
253 }
254 
255 // static
SetMaxTrackedPackets(QuicConnection * connection,QuicPacketCount max_tracked_packets)256 void QuicConnectionPeer::SetMaxTrackedPackets(
257     QuicConnection* connection, QuicPacketCount max_tracked_packets) {
258   connection->max_tracked_packets_ = max_tracked_packets;
259 }
260 
261 // static
SetNegotiatedVersion(QuicConnection * connection)262 void QuicConnectionPeer::SetNegotiatedVersion(QuicConnection* connection) {
263   connection->version_negotiated_ = true;
264 }
265 
266 // static
SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(QuicConnection * connection,size_t new_value)267 void QuicConnectionPeer::SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
268     QuicConnection* connection, size_t new_value) {
269   connection->max_consecutive_num_packets_with_no_retransmittable_frames_ =
270       new_value;
271 }
272 
273 // static
SupportsReleaseTime(QuicConnection * connection)274 bool QuicConnectionPeer::SupportsReleaseTime(QuicConnection* connection) {
275   return connection->supports_release_time_;
276 }
277 
278 // static
GetCurrentPacketContent(QuicConnection * connection)279 QuicConnection::PacketContent QuicConnectionPeer::GetCurrentPacketContent(
280     QuicConnection* connection) {
281   return connection->current_packet_content_;
282 }
283 
284 // static
AddBytesReceived(QuicConnection * connection,size_t length)285 void QuicConnectionPeer::AddBytesReceived(QuicConnection* connection,
286                                           size_t length) {
287   if (connection->EnforceAntiAmplificationLimit()) {
288     connection->default_path_.bytes_received_before_address_validation +=
289         length;
290   }
291 }
292 
293 // static
SetAddressValidated(QuicConnection * connection)294 void QuicConnectionPeer::SetAddressValidated(QuicConnection* connection) {
295   connection->default_path_.validated = true;
296 }
297 
298 // static
SendConnectionClosePacket(QuicConnection * connection,QuicIetfTransportErrorCodes ietf_error,QuicErrorCode error,const std::string & details)299 void QuicConnectionPeer::SendConnectionClosePacket(
300     QuicConnection* connection, QuicIetfTransportErrorCodes ietf_error,
301     QuicErrorCode error, const std::string& details) {
302   connection->SendConnectionClosePacket(error, ietf_error, details);
303 }
304 
305 // static
GetNumEncryptionLevels(QuicConnection * connection)306 size_t QuicConnectionPeer::GetNumEncryptionLevels(QuicConnection* connection) {
307   size_t count = 0;
308   for (EncryptionLevel level :
309        {ENCRYPTION_INITIAL, ENCRYPTION_HANDSHAKE, ENCRYPTION_ZERO_RTT,
310         ENCRYPTION_FORWARD_SECURE}) {
311     if (connection->framer_.HasEncrypterOfEncryptionLevel(level)) {
312       ++count;
313     }
314   }
315   return count;
316 }
317 
318 // static
GetBlackholeDetector(QuicConnection * connection)319 QuicNetworkBlackholeDetector& QuicConnectionPeer::GetBlackholeDetector(
320     QuicConnection* connection) {
321   return connection->blackhole_detector_;
322 }
323 
324 // static
GetBlackholeDetectorAlarm(QuicConnection * connection)325 QuicAlarm* QuicConnectionPeer::GetBlackholeDetectorAlarm(
326     QuicConnection* connection) {
327   return connection->blackhole_detector_.alarm_.get();
328 }
329 
330 // static
GetPathDegradingDeadline(QuicConnection * connection)331 QuicTime QuicConnectionPeer::GetPathDegradingDeadline(
332     QuicConnection* connection) {
333   return connection->blackhole_detector_.path_degrading_deadline_;
334 }
335 
336 // static
GetBlackholeDetectionDeadline(QuicConnection * connection)337 QuicTime QuicConnectionPeer::GetBlackholeDetectionDeadline(
338     QuicConnection* connection) {
339   return connection->blackhole_detector_.blackhole_deadline_;
340 }
341 
342 // static
GetPathMtuReductionDetectionDeadline(QuicConnection * connection)343 QuicTime QuicConnectionPeer::GetPathMtuReductionDetectionDeadline(
344     QuicConnection* connection) {
345   return connection->blackhole_detector_.path_mtu_reduction_deadline_;
346 }
347 
348 // static
GetIdleNetworkDeadline(QuicConnection * connection)349 QuicTime QuicConnectionPeer::GetIdleNetworkDeadline(
350     QuicConnection* connection) {
351   return connection->idle_network_detector_.GetIdleNetworkDeadline();
352 }
353 
354 // static
GetIdleNetworkDetectorAlarm(QuicConnection * connection)355 QuicAlarm* QuicConnectionPeer::GetIdleNetworkDetectorAlarm(
356     QuicConnection* connection) {
357   return connection->idle_network_detector_.alarm_.get();
358 }
359 
360 // static
GetIdleNetworkDetector(QuicConnection * connection)361 QuicIdleNetworkDetector& QuicConnectionPeer::GetIdleNetworkDetector(
362     QuicConnection* connection) {
363   return connection->idle_network_detector_;
364 }
365 
366 // static
GetMultiPortProbingAlarm(QuicConnection * connection)367 QuicAlarm* QuicConnectionPeer::GetMultiPortProbingAlarm(
368     QuicConnection* connection) {
369   return connection->multi_port_probing_alarm_.get();
370 }
371 
372 // static
SetServerConnectionId(QuicConnection * connection,const QuicConnectionId & server_connection_id)373 void QuicConnectionPeer::SetServerConnectionId(
374     QuicConnection* connection, const QuicConnectionId& server_connection_id) {
375   connection->default_path_.server_connection_id = server_connection_id;
376   connection->InstallInitialCrypters(server_connection_id);
377 }
378 
379 // static
NumUndecryptablePackets(QuicConnection * connection)380 size_t QuicConnectionPeer::NumUndecryptablePackets(QuicConnection* connection) {
381   return connection->undecryptable_packets_.size();
382 }
383 
SetConnectionClose(QuicConnection * connection)384 void QuicConnectionPeer::SetConnectionClose(QuicConnection* connection) {
385   connection->connected_ = false;
386 }
387 
388 // static
SendPing(QuicConnection * connection)389 void QuicConnectionPeer::SendPing(QuicConnection* connection) {
390   connection->SendPingAtLevel(connection->encryption_level());
391 }
392 
393 // static
SetLastPacketDestinationAddress(QuicConnection * connection,const QuicSocketAddress & address)394 void QuicConnectionPeer::SetLastPacketDestinationAddress(
395     QuicConnection* connection, const QuicSocketAddress& address) {
396   connection->last_received_packet_info_.destination_address = address;
397 }
398 
399 // static
path_validator(QuicConnection * connection)400 QuicPathValidator* QuicConnectionPeer::path_validator(
401     QuicConnection* connection) {
402   return &connection->path_validator_;
403 }
404 
405 // static
BytesReceivedOnDefaultPath(QuicConnection * connection)406 QuicByteCount QuicConnectionPeer::BytesReceivedOnDefaultPath(
407     QuicConnection* connection) {
408   return connection->default_path_.bytes_received_before_address_validation;
409 }
410 
411 //  static
BytesSentOnAlternativePath(QuicConnection * connection)412 QuicByteCount QuicConnectionPeer::BytesSentOnAlternativePath(
413     QuicConnection* connection) {
414   return connection->alternative_path_.bytes_sent_before_address_validation;
415 }
416 
417 //  static
BytesReceivedOnAlternativePath(QuicConnection * connection)418 QuicByteCount QuicConnectionPeer::BytesReceivedOnAlternativePath(
419     QuicConnection* connection) {
420   return connection->alternative_path_.bytes_received_before_address_validation;
421 }
422 
423 // static
GetClientConnectionIdOnAlternativePath(const QuicConnection * connection)424 QuicConnectionId QuicConnectionPeer::GetClientConnectionIdOnAlternativePath(
425     const QuicConnection* connection) {
426   return connection->alternative_path_.client_connection_id;
427 }
428 
429 // static
GetServerConnectionIdOnAlternativePath(const QuicConnection * connection)430 QuicConnectionId QuicConnectionPeer::GetServerConnectionIdOnAlternativePath(
431     const QuicConnection* connection) {
432   return connection->alternative_path_.server_connection_id;
433 }
434 
435 // static
IsAlternativePathValidated(QuicConnection * connection)436 bool QuicConnectionPeer::IsAlternativePathValidated(
437     QuicConnection* connection) {
438   return connection->alternative_path_.validated;
439 }
440 
441 // static
IsAlternativePath(QuicConnection * connection,const QuicSocketAddress & self_address,const QuicSocketAddress & peer_address)442 bool QuicConnectionPeer::IsAlternativePath(
443     QuicConnection* connection, const QuicSocketAddress& self_address,
444     const QuicSocketAddress& peer_address) {
445   return connection->IsAlternativePath(self_address, peer_address);
446 }
447 
448 // static
BytesReceivedBeforeAddressValidation(QuicConnection * connection)449 QuicByteCount QuicConnectionPeer::BytesReceivedBeforeAddressValidation(
450     QuicConnection* connection) {
451   return connection->default_path_.bytes_received_before_address_validation;
452 }
453 
454 // static
ResetPeerIssuedConnectionIdManager(QuicConnection * connection)455 void QuicConnectionPeer::ResetPeerIssuedConnectionIdManager(
456     QuicConnection* connection) {
457   connection->peer_issued_cid_manager_ = nullptr;
458 }
459 
460 // static
GetDefaultPath(QuicConnection * connection)461 QuicConnection::PathState* QuicConnectionPeer::GetDefaultPath(
462     QuicConnection* connection) {
463   return &connection->default_path_;
464 }
465 
466 // static
IsDefaultPath(QuicConnection * connection,const QuicSocketAddress & self_address,const QuicSocketAddress & peer_address)467 bool QuicConnectionPeer::IsDefaultPath(QuicConnection* connection,
468                                        const QuicSocketAddress& self_address,
469                                        const QuicSocketAddress& peer_address) {
470   return connection->IsDefaultPath(self_address, peer_address);
471 }
472 
473 // static
GetAlternativePath(QuicConnection * connection)474 QuicConnection::PathState* QuicConnectionPeer::GetAlternativePath(
475     QuicConnection* connection) {
476   return &connection->alternative_path_;
477 }
478 
479 // static
RetirePeerIssuedConnectionIdsNoLongerOnPath(QuicConnection * connection)480 void QuicConnectionPeer::RetirePeerIssuedConnectionIdsNoLongerOnPath(
481     QuicConnection* connection) {
482   connection->RetirePeerIssuedConnectionIdsNoLongerOnPath();
483 }
484 
485 // static
HasUnusedPeerIssuedConnectionId(const QuicConnection * connection)486 bool QuicConnectionPeer::HasUnusedPeerIssuedConnectionId(
487     const QuicConnection* connection) {
488   return connection->peer_issued_cid_manager_->HasUnusedConnectionId();
489 }
490 
491 // static
HasSelfIssuedConnectionIdToConsume(const QuicConnection * connection)492 bool QuicConnectionPeer::HasSelfIssuedConnectionIdToConsume(
493     const QuicConnection* connection) {
494   return connection->self_issued_cid_manager_->HasConnectionIdToConsume();
495 }
496 
497 // static
498 QuicSelfIssuedConnectionIdManager*
GetSelfIssuedConnectionIdManager(QuicConnection * connection)499 QuicConnectionPeer::GetSelfIssuedConnectionIdManager(
500     QuicConnection* connection) {
501   return connection->self_issued_cid_manager_.get();
502 }
503 
504 // static
505 std::unique_ptr<QuicSelfIssuedConnectionIdManager>
MakeSelfIssuedConnectionIdManager(QuicConnection * connection)506 QuicConnectionPeer::MakeSelfIssuedConnectionIdManager(
507     QuicConnection* connection) {
508   return connection->MakeSelfIssuedConnectionIdManager();
509 }
510 
511 // static
SetLastDecryptedLevel(QuicConnection * connection,EncryptionLevel level)512 void QuicConnectionPeer::SetLastDecryptedLevel(QuicConnection* connection,
513                                                EncryptionLevel level) {
514   connection->last_received_packet_info_.decrypted_level = level;
515 }
516 
517 // static
GetCoalescedPacket(QuicConnection * connection)518 QuicCoalescedPacket& QuicConnectionPeer::GetCoalescedPacket(
519     QuicConnection* connection) {
520   return connection->coalesced_packet_;
521 }
522 
523 // static
FlushCoalescedPacket(QuicConnection * connection)524 void QuicConnectionPeer::FlushCoalescedPacket(QuicConnection* connection) {
525   connection->FlushCoalescedPacket();
526 }
527 
528 // static
SetInProbeTimeOut(QuicConnection * connection,bool value)529 void QuicConnectionPeer::SetInProbeTimeOut(QuicConnection* connection,
530                                            bool value) {
531   connection->in_probe_time_out_ = value;
532 }
533 
534 // static
GetReceivedServerPreferredAddress(QuicConnection * connection)535 QuicSocketAddress QuicConnectionPeer::GetReceivedServerPreferredAddress(
536     QuicConnection* connection) {
537   return connection->received_server_preferred_address_;
538 }
539 
540 // static
TestLastReceivedPacketInfoDefaults()541 bool QuicConnectionPeer::TestLastReceivedPacketInfoDefaults() {
542   QuicConnection::ReceivedPacketInfo info{QuicTime::Zero()};
543   QUIC_DVLOG(2)
544       << "QuicConnectionPeer::TestLastReceivedPacketInfoDefaults"
545       << " dest_addr passed: "
546       << (info.destination_address == QuicSocketAddress())
547       << " source_addr passed: " << (info.source_address == QuicSocketAddress())
548       << " receipt_time passed: " << (info.receipt_time == QuicTime::Zero())
549       << " received_bytes_counted passed: " << !info.received_bytes_counted
550       << " destination_connection_id passed: "
551       << (info.destination_connection_id == QuicConnectionId())
552       << " length passed: " << (info.length == 0)
553       << " decrypted passed: " << !info.decrypted << " decrypted_level passed: "
554       << (info.decrypted_level == ENCRYPTION_INITIAL)
555       << " frames.empty passed: " << info.frames.empty()
556       << " ecn_codepoint passed: " << (info.ecn_codepoint == ECN_NOT_ECT)
557       << " sizeof(ReceivedPacketInfo) passed: "
558       << (sizeof(size_t) != 8 ||
559           sizeof(QuicConnection::ReceivedPacketInfo) == 280);
560   return info.destination_address == QuicSocketAddress() &&
561          info.source_address == QuicSocketAddress() &&
562          info.receipt_time == QuicTime::Zero() &&
563          !info.received_bytes_counted && info.length == 0 &&
564          info.destination_connection_id == QuicConnectionId() &&
565          !info.decrypted && info.decrypted_level == ENCRYPTION_INITIAL &&
566          // There's no simple way to compare all the values of QuicPacketHeader.
567          info.frames.empty() && info.ecn_codepoint == ECN_NOT_ECT &&
568          info.actual_destination_address == QuicSocketAddress() &&
569          // If the condition below fails, the contents of ReceivedPacketInfo
570          // have changed. Please add the relevant conditions and update the
571          // length below.
572          (sizeof(size_t) != 8 ||
573           sizeof(QuicConnection::ReceivedPacketInfo) == 280);
574 }
575 
576 // static
DisableEcnCodepointValidation(QuicConnection * connection)577 void QuicConnectionPeer::DisableEcnCodepointValidation(
578     QuicConnection* connection) {
579   // disable_ecn_codepoint_validation_ doesn't work correctly if the flag
580   // isn't set; all tests that don't set the flag should hit this bug.
581   QUIC_BUG_IF(quic_bug_518619343_03, !GetQuicRestartFlag(quic_support_ect1))
582       << "Test disables ECN validation without setting quic_support_ect1";
583   connection->disable_ecn_codepoint_validation_ = true;
584 }
585 
586 // static
OnForwardProgressMade(QuicConnection * connection)587 void QuicConnectionPeer::OnForwardProgressMade(QuicConnection* connection) {
588   connection->OnForwardProgressMade();
589 }
590 
591 }  // namespace test
592 }  // namespace quic
593