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