blob: 783b05525487cbd73f571077f65d6063ab2a53eb [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
vasilvv5f225b02020-10-08 11:49:09 -04008#include "absl/strings/string_view.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -05009#include "net/third_party/quiche/src/quic/core/quic_connection.h"
10#include "net/third_party/quiche/src/quic/core/quic_connection_stats.h"
11#include "net/third_party/quiche/src/quic/core/quic_packets.h"
12#include "net/third_party/quiche/src/quic/platform/api/quic_socket_address.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050013
14namespace quic {
15
16struct QuicPacketHeader;
17class QuicAlarm;
18class QuicConnectionHelperInterface;
19class QuicConnectionVisitorInterface;
20class QuicEncryptedPacket;
21class QuicFramer;
22class QuicPacketCreator;
QUICHE teama6ef0a62019-03-07 20:34:33 -050023class QuicPacketWriter;
24class QuicSentPacketManager;
25class SendAlgorithmInterface;
26
27namespace test {
28
29// Peer to make public a number of otherwise private QuicConnection methods.
30class QuicConnectionPeer {
31 public:
32 QuicConnectionPeer() = delete;
33
QUICHE teama6ef0a62019-03-07 20:34:33 -050034 static void SetSendAlgorithm(QuicConnection* connection,
35 SendAlgorithmInterface* send_algorithm);
36
37 static void SetLossAlgorithm(QuicConnection* connection,
38 LossDetectionInterface* loss_algorithm);
39
QUICHE teama6ef0a62019-03-07 20:34:33 -050040 static void PopulateStopWaitingFrame(QuicConnection* connection,
41 QuicStopWaitingFrame* stop_waiting);
42
QUICHE teama6ef0a62019-03-07 20:34:33 -050043 static QuicPacketCreator* GetPacketCreator(QuicConnection* connection);
44
QUICHE teama6ef0a62019-03-07 20:34:33 -050045 static QuicSentPacketManager* GetSentPacketManager(
46 QuicConnection* connection);
47
48 static QuicTime::Delta GetNetworkTimeout(QuicConnection* connection);
49
50 static void SetPerspective(QuicConnection* connection,
51 Perspective perspective);
52
53 static void SetSelfAddress(QuicConnection* connection,
54 const QuicSocketAddress& self_address);
55
56 static void SetPeerAddress(QuicConnection* connection,
57 const QuicSocketAddress& peer_address);
58
59 static void SetDirectPeerAddress(
60 QuicConnection* connection,
61 const QuicSocketAddress& direct_peer_address);
62
63 static void SetEffectivePeerAddress(
64 QuicConnection* connection,
65 const QuicSocketAddress& effective_peer_address);
66
QUICHE teama6ef0a62019-03-07 20:34:33 -050067 static void SwapCrypters(QuicConnection* connection, QuicFramer* framer);
68
69 static void SetCurrentPacket(QuicConnection* connection,
vasilvv5f225b02020-10-08 11:49:09 -040070 absl::string_view current_packet);
QUICHE teama6ef0a62019-03-07 20:34:33 -050071
72 static QuicConnectionHelperInterface* GetHelper(QuicConnection* connection);
73
74 static QuicAlarmFactory* GetAlarmFactory(QuicConnection* connection);
75
76 static QuicFramer* GetFramer(QuicConnection* connection);
77
78 static QuicAlarm* GetAckAlarm(QuicConnection* connection);
79 static QuicAlarm* GetPingAlarm(QuicConnection* connection);
80 static QuicAlarm* GetRetransmissionAlarm(QuicConnection* connection);
81 static QuicAlarm* GetSendAlarm(QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -050082 static QuicAlarm* GetMtuDiscoveryAlarm(QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -050083 static QuicAlarm* GetProcessUndecryptablePacketsAlarm(
84 QuicConnection* connection);
mattm072a7e32020-10-09 16:16:56 -070085 static QuicAlarm* GetDiscardPreviousOneRttKeysAlarm(
86 QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -050087
88 static QuicPacketWriter* GetWriter(QuicConnection* connection);
89 // If |owns_writer| is true, takes ownership of |writer|.
90 static void SetWriter(QuicConnection* connection,
91 QuicPacketWriter* writer,
92 bool owns_writer);
93 static void TearDownLocalConnectionState(QuicConnection* connection);
94 static QuicEncryptedPacket* GetConnectionClosePacket(
95 QuicConnection* connection);
96
97 static QuicPacketHeader* GetLastHeader(QuicConnection* connection);
98
99 static QuicConnectionStats* GetStats(QuicConnection* connection);
100
101 static QuicPacketCount GetPacketsBetweenMtuProbes(QuicConnection* connection);
102
wubf76cf2a2019-10-11 18:49:07 -0700103 static void ReInitializeMtuDiscoverer(
104 QuicConnection* connection,
105 QuicPacketCount packets_between_probes_base,
106 QuicPacketNumber next_probe_at);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500107 static void SetAckDecimationDelay(QuicConnection* connection,
108 float ack_decimation_delay);
109 static bool HasRetransmittableFrames(QuicConnection* connection,
110 uint64_t packet_number);
111 static bool GetNoStopWaitingFrames(QuicConnection* connection);
112 static void SetNoStopWaitingFrames(QuicConnection* connection,
113 bool no_stop_waiting_frames);
114 static void SetMaxTrackedPackets(QuicConnection* connection,
115 QuicPacketCount max_tracked_packets);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500116 static void SetNegotiatedVersion(QuicConnection* connection);
117 static void SetMaxConsecutiveNumPacketsWithNoRetransmittableFrames(
118 QuicConnection* connection,
119 size_t new_value);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500120 static bool SupportsReleaseTime(QuicConnection* connection);
121 static QuicConnection::PacketContent GetCurrentPacketContent(
122 QuicConnection* connection);
QUICHE team8c1daa22019-03-13 08:33:41 -0700123 static void SetLastHeaderFormat(QuicConnection* connection,
124 PacketHeaderFormat format);
fayang5f135052019-08-22 17:59:40 -0700125 static void AddBytesReceived(QuicConnection* connection, size_t length);
126 static void SetAddressValidated(QuicConnection* connection);
dschinazidce90b02019-10-14 18:19:54 -0700127
128 static void SendConnectionClosePacket(QuicConnection* connection,
129 QuicErrorCode error,
130 const std::string& details);
rchd672c6d2019-11-27 15:30:54 -0800131
132 static size_t GetNumEncryptionLevels(QuicConnection* connection);
fayangb59c6f12020-03-23 15:06:14 -0700133
134 static QuicNetworkBlackholeDetector& GetBlackholeDetector(
135 QuicConnection* connection);
136
137 static QuicAlarm* GetBlackholeDetectorAlarm(QuicConnection* connection);
138
139 static QuicTime GetPathDegradingDeadline(QuicConnection* connection);
140
141 static QuicTime GetBlackholeDetectionDeadline(QuicConnection* connection);
fayangb9c88442020-03-26 07:03:57 -0700142
wub8add68a2020-07-27 12:07:38 -0700143 static QuicTime GetPathMtuReductionDetectionDeadline(
144 QuicConnection* connection);
145
fayangb9c88442020-03-26 07:03:57 -0700146 static QuicAlarm* GetIdleNetworkDetectorAlarm(QuicConnection* connection);
dschinazi39e5e552020-05-06 13:55:24 -0700147
fayang001c8282020-07-29 12:39:29 -0700148 static QuicTime GetIdleNetworkDeadline(QuicConnection* connection);
149
150 static QuicIdleNetworkDetector& GetIdleNetworkDetector(
151 QuicConnection* connection);
152
dschinazi39e5e552020-05-06 13:55:24 -0700153 static void SetServerConnectionId(
154 QuicConnection* connection,
155 const QuicConnectionId& server_connection_id);
fayang750b54f2020-06-18 06:26:54 -0700156
157 static size_t NumUndecryptablePackets(QuicConnection* connection);
danzh8a27a1a2020-09-02 10:26:28 -0700158
159 static const QuicCircularDeque<
160 std::pair<QuicPathFrameBuffer, QuicSocketAddress>>&
161 pending_path_challenge_payloads(QuicConnection* connection);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500162};
163
164} // namespace test
165
166} // namespace quic
167
168#endif // QUICHE_QUIC_TEST_TOOLS_QUIC_CONNECTION_PEER_H_