xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.h (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 #ifndef QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
6 #define QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
7 
8 #include <cstddef>
9 
10 #include "absl/strings/string_view.h"
11 #include "quiche/quic/core/quic_connection.h"
12 #include "quiche/quic/core/quic_connection_id.h"
13 #include "quiche/quic/core/quic_connection_stats.h"
14 #include "quiche/quic/core/quic_packets.h"
15 #include "quiche/quic/core/quic_path_validator.h"
16 #include "quiche/quic/core/quic_types.h"
17 #include "quiche/quic/platform/api/quic_socket_address.h"
18 
19 namespace quic {
20 
21 struct QuicPacketHeader;
22 class QuicAlarm;
23 class QuicConnectionHelperInterface;
24 class QuicConnectionVisitorInterface;
25 class QuicEncryptedPacket;
26 class QuicFramer;
27 class QuicPacketCreator;
28 class QuicPacketWriter;
29 class QuicSentPacketManager;
30 class SendAlgorithmInterface;
31 
32 namespace test {
33 
34 // Peer to make public a number of otherwise private QuicConnection methods.
35 class QuicConnectionPeer {
36  public:
37   QuicConnectionPeer() = delete;
38 
39   static void SetSendAlgorithm(QuicConnection* connection,
40                                SendAlgorithmInterface* send_algorithm);
41 
42   static void SetLossAlgorithm(QuicConnection* connection,
43                                LossDetectionInterface* loss_algorithm);
44 
45   static QuicPacketCreator* GetPacketCreator(QuicConnection* connection);
46 
47   static QuicSentPacketManager* GetSentPacketManager(
48       QuicConnection* connection);
49 
50   static QuicTime::Delta GetNetworkTimeout(QuicConnection* connection);
51 
52   static QuicTime::Delta GetHandshakeTimeout(QuicConnection* connection);
53 
54   static void SetPerspective(QuicConnection* connection,
55                              Perspective perspective);
56 
57   static void SetSelfAddress(QuicConnection* connection,
58                              const QuicSocketAddress& self_address);
59 
60   static void SetPeerAddress(QuicConnection* connection,
61                              const QuicSocketAddress& peer_address);
62 
63   static void SetDirectPeerAddress(
64       QuicConnection* connection, const QuicSocketAddress& direct_peer_address);
65 
66   static void SetEffectivePeerAddress(
67       QuicConnection* connection,
68       const QuicSocketAddress& effective_peer_address);
69 
70   static void SwapCrypters(QuicConnection* connection, QuicFramer* framer);
71 
72   static void SetCurrentPacket(QuicConnection* connection,
73                                absl::string_view current_packet);
74 
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);
85   static QuicAlarm* GetMtuDiscoveryAlarm(QuicConnection* connection);
86   static QuicAlarm* GetProcessUndecryptablePacketsAlarm(
87       QuicConnection* connection);
88   static QuicAlarm* GetDiscardPreviousOneRttKeysAlarm(
89       QuicConnection* connection);
90   static QuicAlarm* GetDiscardZeroRttDecryptionKeysAlarm(
91       QuicConnection* connection);
92   static QuicAlarm* GetRetirePeerIssuedConnectionIdAlarm(
93       QuicConnection* connection);
94   static QuicAlarm* GetRetireSelfIssuedConnectionIdAlarm(
95       QuicConnection* connection);
96 
97   static QuicPacketWriter* GetWriter(QuicConnection* connection);
98   // If |owns_writer| is true, takes ownership of |writer|.
99   static void SetWriter(QuicConnection* connection, QuicPacketWriter* writer,
100                         bool owns_writer);
101   static void TearDownLocalConnectionState(QuicConnection* connection);
102   static QuicEncryptedPacket* GetConnectionClosePacket(
103       QuicConnection* connection);
104 
105   static QuicPacketHeader* GetLastHeader(QuicConnection* connection);
106 
107   static QuicConnectionStats* GetStats(QuicConnection* connection);
108 
109   static QuicPacketCount GetPacketsBetweenMtuProbes(QuicConnection* connection);
110 
111   static void ReInitializeMtuDiscoverer(
112       QuicConnection* connection, QuicPacketCount packets_between_probes_base,
113       QuicPacketNumber next_probe_at);
114   static void SetAckDecimationDelay(QuicConnection* connection,
115                                     float ack_decimation_delay);
116   static bool HasRetransmittableFrames(QuicConnection* connection,
117                                        uint64_t packet_number);
118   static void SetMaxTrackedPackets(QuicConnection* connection,
119                                    QuicPacketCount max_tracked_packets);
120   static void SetNegotiatedVersion(QuicConnection* connection);
121   static void SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
122       QuicConnection* connection, size_t new_value);
123   static bool SupportsReleaseTime(QuicConnection* connection);
124   static QuicConnection::PacketContent GetCurrentPacketContent(
125       QuicConnection* connection);
126   static void AddBytesReceived(QuicConnection* connection, size_t length);
127   static void SetAddressValidated(QuicConnection* connection);
128 
129   static void SendConnectionClosePacket(QuicConnection* connection,
130                                         QuicIetfTransportErrorCodes ietf_error,
131                                         QuicErrorCode error,
132                                         const std::string& details);
133 
134   static size_t GetNumEncryptionLevels(QuicConnection* connection);
135 
136   static QuicNetworkBlackholeDetector& GetBlackholeDetector(
137       QuicConnection* connection);
138 
139   static QuicAlarm* GetBlackholeDetectorAlarm(QuicConnection* connection);
140 
141   static QuicTime GetPathDegradingDeadline(QuicConnection* connection);
142 
143   static QuicTime GetBlackholeDetectionDeadline(QuicConnection* connection);
144 
145   static QuicTime GetPathMtuReductionDetectionDeadline(
146       QuicConnection* connection);
147 
148   static QuicAlarm* GetIdleNetworkDetectorAlarm(QuicConnection* connection);
149 
150   static QuicTime GetIdleNetworkDeadline(QuicConnection* connection);
151 
152   static QuicIdleNetworkDetector& GetIdleNetworkDetector(
153       QuicConnection* connection);
154 
155   static void SetServerConnectionId(
156       QuicConnection* connection, const QuicConnectionId& server_connection_id);
157 
158   static size_t NumUndecryptablePackets(QuicConnection* connection);
159 
160   static void SetConnectionClose(QuicConnection* connection);
161 
162   static void SendPing(QuicConnection* connection);
163 
164   static void SetLastPacketDestinationAddress(QuicConnection* connection,
165                                               const QuicSocketAddress& address);
166 
167   static QuicPathValidator* path_validator(QuicConnection* connection);
168 
169   static QuicByteCount BytesReceivedOnDefaultPath(QuicConnection* connection);
170 
171   static QuicByteCount BytesSentOnAlternativePath(QuicConnection* connection);
172 
173   static QuicByteCount BytesReceivedOnAlternativePath(
174       QuicConnection* connection);
175 
176   static QuicConnectionId GetClientConnectionIdOnAlternativePath(
177       const QuicConnection* connection);
178 
179   static QuicConnectionId GetServerConnectionIdOnAlternativePath(
180       const QuicConnection* connection);
181 
182   static bool IsAlternativePath(QuicConnection* connection,
183                                 const QuicSocketAddress& self_address,
184                                 const QuicSocketAddress& peer_address);
185 
186   static bool IsAlternativePathValidated(QuicConnection* connection);
187 
188   static QuicByteCount BytesReceivedBeforeAddressValidation(
189       QuicConnection* connection);
190 
191   static void ResetPeerIssuedConnectionIdManager(QuicConnection* connection);
192 
193   static QuicConnection::PathState* GetDefaultPath(QuicConnection* connection);
194 
195   static bool IsDefaultPath(QuicConnection* connection,
196                             const QuicSocketAddress& self_address,
197                             const QuicSocketAddress& peer_address);
198 
199   static QuicConnection::PathState* GetAlternativePath(
200       QuicConnection* connection);
201 
202   static void RetirePeerIssuedConnectionIdsNoLongerOnPath(
203       QuicConnection* connection);
204 
205   static bool HasUnusedPeerIssuedConnectionId(const QuicConnection* connection);
206 
207   static bool HasSelfIssuedConnectionIdToConsume(
208       const QuicConnection* connection);
209 
210   static QuicSelfIssuedConnectionIdManager* GetSelfIssuedConnectionIdManager(
211       QuicConnection* connection);
212 
213   static std::unique_ptr<QuicSelfIssuedConnectionIdManager>
214   MakeSelfIssuedConnectionIdManager(QuicConnection* connection);
215 
216   static void SetLastDecryptedLevel(QuicConnection* connection,
217                                     EncryptionLevel level);
218 
219   static QuicCoalescedPacket& GetCoalescedPacket(QuicConnection* connection);
220 
221   static void FlushCoalescedPacket(QuicConnection* connection);
222 
223   static QuicAlarm* GetMultiPortProbingAlarm(QuicConnection* connection);
224 
225   static void SetInProbeTimeOut(QuicConnection* connection, bool value);
226 
227   static QuicSocketAddress GetReceivedServerPreferredAddress(
228       QuicConnection* connection);
229 
230   static bool TestLastReceivedPacketInfoDefaults();
231 
232   // Overrides restrictions on sending ECN for test purposes.
233   static void DisableEcnCodepointValidation(QuicConnection* connection);
234 
235   static void OnForwardProgressMade(QuicConnection* connection);
236 };
237 
238 }  // namespace test
239 
240 }  // namespace quic
241 
242 #endif  // QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_
243