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_SESSION_PEER_H_ 6 #define QUICHE_QUIC_TEST_TOOLS_QUIC_SESSION_PEER_H_ 7 8 #include <cstdint> 9 #include <map> 10 #include <memory> 11 12 #include "absl/container/flat_hash_map.h" 13 #include "quiche/quic/core/quic_packets.h" 14 #include "quiche/quic/core/quic_session.h" 15 #include "quiche/quic/core/quic_write_blocked_list.h" 16 17 namespace quic { 18 19 class QuicCryptoStream; 20 class QuicSession; 21 class QuicStream; 22 23 namespace test { 24 25 class QuicSessionPeer { 26 public: 27 QuicSessionPeer() = delete; 28 29 static QuicStreamId GetNextOutgoingBidirectionalStreamId( 30 QuicSession* session); 31 static QuicStreamId GetNextOutgoingUnidirectionalStreamId( 32 QuicSession* session); 33 static void SetNextOutgoingBidirectionalStreamId(QuicSession* session, 34 QuicStreamId id); 35 // Following is only for Google-QUIC, will QUIC_BUG if called for IETF 36 // QUIC. 37 static void SetMaxOpenIncomingStreams(QuicSession* session, 38 uint32_t max_streams); 39 // Following two are only for IETF-QUIC, will QUIC_BUG if called for Google 40 // QUIC. 41 static void SetMaxOpenIncomingBidirectionalStreams(QuicSession* session, 42 uint32_t max_streams); 43 static void SetMaxOpenIncomingUnidirectionalStreams(QuicSession* session, 44 uint32_t max_streams); 45 46 static void SetMaxOpenOutgoingStreams(QuicSession* session, 47 uint32_t max_streams); 48 static void SetMaxOpenOutgoingBidirectionalStreams(QuicSession* session, 49 uint32_t max_streams); 50 static void SetMaxOpenOutgoingUnidirectionalStreams(QuicSession* session, 51 uint32_t max_streams); 52 53 static QuicCryptoStream* GetMutableCryptoStream(QuicSession* session); 54 static QuicWriteBlockedListInterface* GetWriteBlockedStreams( 55 QuicSession* session); 56 static QuicStream* GetOrCreateStream(QuicSession* session, 57 QuicStreamId stream_id); 58 static absl::flat_hash_map<QuicStreamId, QuicStreamOffset>& 59 GetLocallyClosedStreamsHighestOffset(QuicSession* session); 60 static QuicSession::StreamMap& stream_map(QuicSession* session); 61 static const QuicSession::ClosedStreams& closed_streams(QuicSession* session); 62 static void ActivateStream(QuicSession* session, 63 std::unique_ptr<QuicStream> stream); 64 65 // Discern the state of a stream. Exactly one of these should be true at a 66 // time for any stream id > 0 (other than the special streams 1 and 3). 67 static bool IsStreamClosed(QuicSession* session, QuicStreamId id); 68 static bool IsStreamCreated(QuicSession* session, QuicStreamId id); 69 static bool IsStreamAvailable(QuicSession* session, QuicStreamId id); 70 71 static QuicStream* GetStream(QuicSession* session, QuicStreamId id); 72 static bool IsStreamWriteBlocked(QuicSession* session, QuicStreamId id); 73 static QuicAlarm* GetCleanUpClosedStreamsAlarm(QuicSession* session); 74 static LegacyQuicStreamIdManager* GetStreamIdManager(QuicSession* session); 75 static UberQuicStreamIdManager* ietf_streamid_manager(QuicSession* session); 76 static QuicStreamIdManager* ietf_bidirectional_stream_id_manager( 77 QuicSession* session); 78 static QuicStreamIdManager* ietf_unidirectional_stream_id_manager( 79 QuicSession* session); 80 static PendingStream* GetPendingStream(QuicSession* session, 81 QuicStreamId stream_id); 82 static void set_is_configured(QuicSession* session, bool value); 83 static void SetPerspective(QuicSession* session, Perspective perspective); 84 static size_t GetNumOpenDynamicStreams(QuicSession* session); 85 static size_t GetNumDrainingStreams(QuicSession* session); GetLargestPeerCreatedStreamId(QuicSession * session,bool unidirectional)86 static QuicStreamId GetLargestPeerCreatedStreamId(QuicSession* session, 87 bool unidirectional) { 88 return session->GetLargestPeerCreatedStreamId(unidirectional); 89 } 90 static QuicAlarm* GetStreamCountResetAlarm(QuicSession* session); 91 }; 92 93 } // namespace test 94 95 } // namespace quic 96 97 #endif // QUICHE_QUIC_TEST_TOOLS_QUIC_SESSION_PEER_H_ 98