xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/test_tools/quic_session_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_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