xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/test_tools/quic_session_peer.cc (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 #include "quiche/quic/test_tools/quic_session_peer.h"
6 
7 #include "absl/container/flat_hash_map.h"
8 #include "quiche/quic/core/quic_session.h"
9 #include "quiche/quic/core/quic_stream.h"
10 #include "quiche/quic/core/quic_utils.h"
11 
12 namespace quic {
13 namespace test {
14 
15 // static
GetNextOutgoingBidirectionalStreamId(QuicSession * session)16 QuicStreamId QuicSessionPeer::GetNextOutgoingBidirectionalStreamId(
17     QuicSession* session) {
18   return session->GetNextOutgoingBidirectionalStreamId();
19 }
20 
21 // static
GetNextOutgoingUnidirectionalStreamId(QuicSession * session)22 QuicStreamId QuicSessionPeer::GetNextOutgoingUnidirectionalStreamId(
23     QuicSession* session) {
24   return session->GetNextOutgoingUnidirectionalStreamId();
25 }
26 
27 // static
SetNextOutgoingBidirectionalStreamId(QuicSession * session,QuicStreamId id)28 void QuicSessionPeer::SetNextOutgoingBidirectionalStreamId(QuicSession* session,
29                                                            QuicStreamId id) {
30   if (VersionHasIetfQuicFrames(session->transport_version())) {
31     session->ietf_streamid_manager_.bidirectional_stream_id_manager_
32         .next_outgoing_stream_id_ = id;
33     return;
34   }
35   session->stream_id_manager_.next_outgoing_stream_id_ = id;
36 }
37 
38 // static
SetMaxOpenIncomingStreams(QuicSession * session,uint32_t max_streams)39 void QuicSessionPeer::SetMaxOpenIncomingStreams(QuicSession* session,
40                                                 uint32_t max_streams) {
41   if (VersionHasIetfQuicFrames(session->transport_version())) {
42     QUIC_BUG(quic_bug_10193_1)
43         << "SetmaxOpenIncomingStreams deprecated for IETF QUIC";
44     session->ietf_streamid_manager_.SetMaxOpenIncomingUnidirectionalStreams(
45         max_streams);
46     session->ietf_streamid_manager_.SetMaxOpenIncomingBidirectionalStreams(
47         max_streams);
48     return;
49   }
50   session->stream_id_manager_.set_max_open_incoming_streams(max_streams);
51 }
52 
53 // static
SetMaxOpenIncomingBidirectionalStreams(QuicSession * session,uint32_t max_streams)54 void QuicSessionPeer::SetMaxOpenIncomingBidirectionalStreams(
55     QuicSession* session, uint32_t max_streams) {
56   QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
57       << "SetmaxOpenIncomingBidirectionalStreams not supported for Google "
58          "QUIC";
59   session->ietf_streamid_manager_.SetMaxOpenIncomingBidirectionalStreams(
60       max_streams);
61 }
62 // static
SetMaxOpenIncomingUnidirectionalStreams(QuicSession * session,uint32_t max_streams)63 void QuicSessionPeer::SetMaxOpenIncomingUnidirectionalStreams(
64     QuicSession* session, uint32_t max_streams) {
65   QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
66       << "SetmaxOpenIncomingUnidirectionalStreams not supported for Google "
67          "QUIC";
68   session->ietf_streamid_manager_.SetMaxOpenIncomingUnidirectionalStreams(
69       max_streams);
70 }
71 
72 // static
SetMaxOpenOutgoingStreams(QuicSession * session,uint32_t max_streams)73 void QuicSessionPeer::SetMaxOpenOutgoingStreams(QuicSession* session,
74                                                 uint32_t max_streams) {
75   if (VersionHasIetfQuicFrames(session->transport_version())) {
76     QUIC_BUG(quic_bug_10193_2)
77         << "SetmaxOpenOutgoingStreams deprecated for IETF QUIC";
78     return;
79   }
80   session->stream_id_manager_.set_max_open_outgoing_streams(max_streams);
81 }
82 
83 // static
SetMaxOpenOutgoingBidirectionalStreams(QuicSession * session,uint32_t max_streams)84 void QuicSessionPeer::SetMaxOpenOutgoingBidirectionalStreams(
85     QuicSession* session, uint32_t max_streams) {
86   QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
87       << "SetmaxOpenOutgoingBidirectionalStreams not supported for Google "
88          "QUIC";
89   session->ietf_streamid_manager_.MaybeAllowNewOutgoingBidirectionalStreams(
90       max_streams);
91 }
92 // static
SetMaxOpenOutgoingUnidirectionalStreams(QuicSession * session,uint32_t max_streams)93 void QuicSessionPeer::SetMaxOpenOutgoingUnidirectionalStreams(
94     QuicSession* session, uint32_t max_streams) {
95   QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
96       << "SetmaxOpenOutgoingUnidirectionalStreams not supported for Google "
97          "QUIC";
98   session->ietf_streamid_manager_.MaybeAllowNewOutgoingUnidirectionalStreams(
99       max_streams);
100 }
101 
102 // static
GetMutableCryptoStream(QuicSession * session)103 QuicCryptoStream* QuicSessionPeer::GetMutableCryptoStream(
104     QuicSession* session) {
105   return session->GetMutableCryptoStream();
106 }
107 
108 // static
GetWriteBlockedStreams(QuicSession * session)109 QuicWriteBlockedListInterface* QuicSessionPeer::GetWriteBlockedStreams(
110     QuicSession* session) {
111   return session->write_blocked_streams();
112 }
113 
114 // static
GetOrCreateStream(QuicSession * session,QuicStreamId stream_id)115 QuicStream* QuicSessionPeer::GetOrCreateStream(QuicSession* session,
116                                                QuicStreamId stream_id) {
117   return session->GetOrCreateStream(stream_id);
118 }
119 
120 // static
121 absl::flat_hash_map<QuicStreamId, QuicStreamOffset>&
GetLocallyClosedStreamsHighestOffset(QuicSession * session)122 QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(QuicSession* session) {
123   return session->locally_closed_streams_highest_offset_;
124 }
125 
126 // static
stream_map(QuicSession * session)127 QuicSession::StreamMap& QuicSessionPeer::stream_map(QuicSession* session) {
128   return session->stream_map_;
129 }
130 
131 // static
closed_streams(QuicSession * session)132 const QuicSession::ClosedStreams& QuicSessionPeer::closed_streams(
133     QuicSession* session) {
134   return *session->closed_streams();
135 }
136 
137 // static
ActivateStream(QuicSession * session,std::unique_ptr<QuicStream> stream)138 void QuicSessionPeer::ActivateStream(QuicSession* session,
139                                      std::unique_ptr<QuicStream> stream) {
140   return session->ActivateStream(std::move(stream));
141 }
142 
143 // static
IsStreamClosed(QuicSession * session,QuicStreamId id)144 bool QuicSessionPeer::IsStreamClosed(QuicSession* session, QuicStreamId id) {
145   return session->IsClosedStream(id);
146 }
147 
148 // static
IsStreamCreated(QuicSession * session,QuicStreamId id)149 bool QuicSessionPeer::IsStreamCreated(QuicSession* session, QuicStreamId id) {
150   return session->stream_map_.contains(id);
151 }
152 
153 // static
IsStreamAvailable(QuicSession * session,QuicStreamId id)154 bool QuicSessionPeer::IsStreamAvailable(QuicSession* session, QuicStreamId id) {
155   if (VersionHasIetfQuicFrames(session->transport_version())) {
156     if (id % QuicUtils::StreamIdDelta(session->transport_version()) < 2) {
157       return session->ietf_streamid_manager_.bidirectional_stream_id_manager_
158           .available_streams_.contains(id);
159     }
160     return session->ietf_streamid_manager_.unidirectional_stream_id_manager_
161         .available_streams_.contains(id);
162   }
163   return session->stream_id_manager_.available_streams_.contains(id);
164 }
165 
166 // static
GetStream(QuicSession * session,QuicStreamId id)167 QuicStream* QuicSessionPeer::GetStream(QuicSession* session, QuicStreamId id) {
168   return session->GetStream(id);
169 }
170 
171 // static
IsStreamWriteBlocked(QuicSession * session,QuicStreamId id)172 bool QuicSessionPeer::IsStreamWriteBlocked(QuicSession* session,
173                                            QuicStreamId id) {
174   return session->write_blocked_streams()->IsStreamBlocked(id);
175 }
176 
177 // static
GetCleanUpClosedStreamsAlarm(QuicSession * session)178 QuicAlarm* QuicSessionPeer::GetCleanUpClosedStreamsAlarm(QuicSession* session) {
179   return session->closed_streams_clean_up_alarm_.get();
180 }
181 
182 // static
GetStreamIdManager(QuicSession * session)183 LegacyQuicStreamIdManager* QuicSessionPeer::GetStreamIdManager(
184     QuicSession* session) {
185   return &session->stream_id_manager_;
186 }
187 
188 // static
ietf_streamid_manager(QuicSession * session)189 UberQuicStreamIdManager* QuicSessionPeer::ietf_streamid_manager(
190     QuicSession* session) {
191   return &session->ietf_streamid_manager_;
192 }
193 
194 // static
ietf_bidirectional_stream_id_manager(QuicSession * session)195 QuicStreamIdManager* QuicSessionPeer::ietf_bidirectional_stream_id_manager(
196     QuicSession* session) {
197   return &session->ietf_streamid_manager_.bidirectional_stream_id_manager_;
198 }
199 
200 // static
ietf_unidirectional_stream_id_manager(QuicSession * session)201 QuicStreamIdManager* QuicSessionPeer::ietf_unidirectional_stream_id_manager(
202     QuicSession* session) {
203   return &session->ietf_streamid_manager_.unidirectional_stream_id_manager_;
204 }
205 
206 // static
GetPendingStream(QuicSession * session,QuicStreamId stream_id)207 PendingStream* QuicSessionPeer::GetPendingStream(QuicSession* session,
208                                                  QuicStreamId stream_id) {
209   auto it = session->pending_stream_map_.find(stream_id);
210   return it == session->pending_stream_map_.end() ? nullptr : it->second.get();
211 }
212 
213 // static
set_is_configured(QuicSession * session,bool value)214 void QuicSessionPeer::set_is_configured(QuicSession* session, bool value) {
215   session->is_configured_ = value;
216 }
217 
218 // static
SetPerspective(QuicSession * session,Perspective perspective)219 void QuicSessionPeer::SetPerspective(QuicSession* session,
220                                      Perspective perspective) {
221   session->perspective_ = perspective;
222 }
223 
224 // static
GetNumOpenDynamicStreams(QuicSession * session)225 size_t QuicSessionPeer::GetNumOpenDynamicStreams(QuicSession* session) {
226   size_t result = 0;
227   for (const auto& it : session->stream_map_) {
228     if (!it.second->is_static()) {
229       ++result;
230     }
231   }
232   // Exclude draining streams.
233   result -= session->num_draining_streams_;
234   // Add locally closed streams.
235   result += session->locally_closed_streams_highest_offset_.size();
236 
237   return result;
238 }
239 
240 // static
GetNumDrainingStreams(QuicSession * session)241 size_t QuicSessionPeer::GetNumDrainingStreams(QuicSession* session) {
242   return session->num_draining_streams_;
243 }
244 
245 // static
GetStreamCountResetAlarm(QuicSession * session)246 QuicAlarm* QuicSessionPeer::GetStreamCountResetAlarm(QuicSession* session) {
247   return session->stream_count_reset_alarm_.get();
248 }
249 
250 }  // namespace test
251 }  // namespace quic
252