blob: 682369179212cc641f8e97fadee63571c1d871c1 [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#include "net/third_party/quiche/src/quic/test_tools/quic_session_peer.h"
6
7#include "net/third_party/quiche/src/quic/core/quic_session.h"
8#include "net/third_party/quiche/src/quic/core/quic_stream.h"
fkastenholz3c4eabf2019-04-22 07:49:59 -07009#include "net/third_party/quiche/src/quic/core/quic_utils.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050010#include "net/third_party/quiche/src/quic/platform/api/quic_map_util.h"
11
12namespace quic {
13namespace test {
14
15// static
16QuicStreamId QuicSessionPeer::GetNextOutgoingBidirectionalStreamId(
17 QuicSession* session) {
18 return session->GetNextOutgoingBidirectionalStreamId();
19}
20
21// static
22QuicStreamId QuicSessionPeer::GetNextOutgoingUnidirectionalStreamId(
23 QuicSession* session) {
24 return session->GetNextOutgoingUnidirectionalStreamId();
25}
26
27// static
28void QuicSessionPeer::SetNextOutgoingBidirectionalStreamId(QuicSession* session,
29 QuicStreamId id) {
renjietangd1d00852019-09-06 10:43:12 -070030 if (VersionHasIetfQuicFrames(session->transport_version())) {
QUICHE teama6ef0a62019-03-07 20:34:33 -050031 session->v99_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
39void QuicSessionPeer::SetMaxOpenIncomingStreams(QuicSession* session,
40 uint32_t max_streams) {
renjietangd1d00852019-09-06 10:43:12 -070041 if (VersionHasIetfQuicFrames(session->transport_version())) {
fkastenholz305e1732019-06-18 05:01:22 -070042 QUIC_BUG << "SetmaxOpenIncomingStreams deprecated for IETF QUIC";
fkastenholzd3a1de92019-05-15 07:00:07 -070043 session->v99_streamid_manager_.SetMaxOpenIncomingUnidirectionalStreams(
44 max_streams);
45 session->v99_streamid_manager_.SetMaxOpenIncomingBidirectionalStreams(
46 max_streams);
QUICHE teama6ef0a62019-03-07 20:34:33 -050047 return;
48 }
49 session->stream_id_manager_.set_max_open_incoming_streams(max_streams);
50}
51
52// static
fkastenholzd3a1de92019-05-15 07:00:07 -070053void QuicSessionPeer::SetMaxOpenIncomingBidirectionalStreams(
54 QuicSession* session,
55 uint32_t max_streams) {
renjietangd1d00852019-09-06 10:43:12 -070056 DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
fkastenholzd3a1de92019-05-15 07:00:07 -070057 << "SetmaxOpenIncomingBidirectionalStreams not supported for Google "
fkastenholz305e1732019-06-18 05:01:22 -070058 "QUIC";
fkastenholzd3a1de92019-05-15 07:00:07 -070059 session->v99_streamid_manager_.SetMaxOpenIncomingBidirectionalStreams(
60 max_streams);
61}
62// static
63void QuicSessionPeer::SetMaxOpenIncomingUnidirectionalStreams(
64 QuicSession* session,
65 uint32_t max_streams) {
renjietangd1d00852019-09-06 10:43:12 -070066 DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
fkastenholzd3a1de92019-05-15 07:00:07 -070067 << "SetmaxOpenIncomingUnidirectionalStreams not supported for Google "
fkastenholz305e1732019-06-18 05:01:22 -070068 "QUIC";
fkastenholzd3a1de92019-05-15 07:00:07 -070069 session->v99_streamid_manager_.SetMaxOpenIncomingUnidirectionalStreams(
70 max_streams);
71}
72
73// static
QUICHE teama6ef0a62019-03-07 20:34:33 -050074void QuicSessionPeer::SetMaxOpenOutgoingStreams(QuicSession* session,
75 uint32_t max_streams) {
renjietangd1d00852019-09-06 10:43:12 -070076 if (VersionHasIetfQuicFrames(session->transport_version())) {
fkastenholz305e1732019-06-18 05:01:22 -070077 QUIC_BUG << "SetmaxOpenOutgoingStreams deprecated for IETF QUIC";
QUICHE teama6ef0a62019-03-07 20:34:33 -050078 return;
79 }
80 session->stream_id_manager_.set_max_open_outgoing_streams(max_streams);
81}
82
83// static
fkastenholzd3a1de92019-05-15 07:00:07 -070084void QuicSessionPeer::SetMaxOpenOutgoingBidirectionalStreams(
85 QuicSession* session,
86 uint32_t max_streams) {
renjietangd1d00852019-09-06 10:43:12 -070087 DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
fkastenholzd3a1de92019-05-15 07:00:07 -070088 << "SetmaxOpenOutgoingBidirectionalStreams not supported for Google "
fkastenholz305e1732019-06-18 05:01:22 -070089 "QUIC";
renjietangab9039a2020-03-30 14:53:19 -070090 session->v99_streamid_manager_.MaybeAllowNewOutgoingBidirectionalStreams(
fkastenholzd3a1de92019-05-15 07:00:07 -070091 max_streams);
92}
93// static
94void QuicSessionPeer::SetMaxOpenOutgoingUnidirectionalStreams(
95 QuicSession* session,
96 uint32_t max_streams) {
renjietangd1d00852019-09-06 10:43:12 -070097 DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
fkastenholzd3a1de92019-05-15 07:00:07 -070098 << "SetmaxOpenOutgoingUnidirectionalStreams not supported for Google "
fkastenholz305e1732019-06-18 05:01:22 -070099 "QUIC";
renjietangab9039a2020-03-30 14:53:19 -0700100 session->v99_streamid_manager_.MaybeAllowNewOutgoingUnidirectionalStreams(
fkastenholzd3a1de92019-05-15 07:00:07 -0700101 max_streams);
102}
103
104// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500105QuicCryptoStream* QuicSessionPeer::GetMutableCryptoStream(
106 QuicSession* session) {
107 return session->GetMutableCryptoStream();
108}
109
110// static
111QuicWriteBlockedList* QuicSessionPeer::GetWriteBlockedStreams(
112 QuicSession* session) {
113 return &session->write_blocked_streams_;
114}
115
116// static
renjietang880d2432019-07-16 13:14:37 -0700117QuicStream* QuicSessionPeer::GetOrCreateStream(QuicSession* session,
118 QuicStreamId stream_id) {
119 return session->GetOrCreateStream(stream_id);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500120}
121
122// static
QUICHE team67bd25d2020-06-27 12:53:53 -0700123QuicHashMap<QuicStreamId, QuicStreamOffset>&
QUICHE teama6ef0a62019-03-07 20:34:33 -0500124QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(QuicSession* session) {
125 return session->locally_closed_streams_highest_offset_;
126}
127
128// static
renjietang55d182a2019-07-12 10:26:25 -0700129QuicSession::StreamMap& QuicSessionPeer::stream_map(QuicSession* session) {
130 return session->stream_map();
QUICHE teama6ef0a62019-03-07 20:34:33 -0500131}
132
133// static
134const QuicSession::ClosedStreams& QuicSessionPeer::closed_streams(
135 QuicSession* session) {
136 return *session->closed_streams();
137}
138
139// static
140QuicSession::ZombieStreamMap& QuicSessionPeer::zombie_streams(
141 QuicSession* session) {
142 return session->zombie_streams_;
143}
144
145// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500146void QuicSessionPeer::ActivateStream(QuicSession* session,
147 std::unique_ptr<QuicStream> stream) {
148 return session->ActivateStream(std::move(stream));
149}
150
151// static
152bool QuicSessionPeer::IsStreamClosed(QuicSession* session, QuicStreamId id) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500153 return session->IsClosedStream(id);
154}
155
156// static
157bool QuicSessionPeer::IsStreamCreated(QuicSession* session, QuicStreamId id) {
renjietang55d182a2019-07-12 10:26:25 -0700158 return QuicContainsKey(session->stream_map(), id);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500159}
160
161// static
162bool QuicSessionPeer::IsStreamAvailable(QuicSession* session, QuicStreamId id) {
renjietangd1d00852019-09-06 10:43:12 -0700163 if (VersionHasIetfQuicFrames(session->transport_version())) {
164 if (id % QuicUtils::StreamIdDelta(session->transport_version()) < 2) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500165 return QuicContainsKey(
166 session->v99_streamid_manager_.bidirectional_stream_id_manager_
167 .available_streams_,
168 id);
169 }
170 return QuicContainsKey(
171 session->v99_streamid_manager_.unidirectional_stream_id_manager_
172 .available_streams_,
173 id);
174 }
175 return QuicContainsKey(session->stream_id_manager_.available_streams_, id);
176}
177
178// static
179QuicStream* QuicSessionPeer::GetStream(QuicSession* session, QuicStreamId id) {
180 return session->GetStream(id);
181}
182
183// static
184bool QuicSessionPeer::IsStreamWriteBlocked(QuicSession* session,
185 QuicStreamId id) {
186 return session->write_blocked_streams_.IsStreamBlocked(id);
187}
188
189// static
190QuicAlarm* QuicSessionPeer::GetCleanUpClosedStreamsAlarm(QuicSession* session) {
191 return session->closed_streams_clean_up_alarm_.get();
192}
193
194// static
195LegacyQuicStreamIdManager* QuicSessionPeer::GetStreamIdManager(
196 QuicSession* session) {
197 return &session->stream_id_manager_;
198}
199
200// static
201UberQuicStreamIdManager* QuicSessionPeer::v99_streamid_manager(
202 QuicSession* session) {
203 return &session->v99_streamid_manager_;
204}
205
206// static
207QuicStreamIdManager* QuicSessionPeer::v99_bidirectional_stream_id_manager(
208 QuicSession* session) {
209 return &session->v99_streamid_manager_.bidirectional_stream_id_manager_;
210}
211
212// static
213QuicStreamIdManager* QuicSessionPeer::v99_unidirectional_stream_id_manager(
214 QuicSession* session) {
215 return &session->v99_streamid_manager_.unidirectional_stream_id_manager_;
216}
217
218// static
bnc092d8212019-08-07 11:53:20 -0700219PendingStream* QuicSessionPeer::GetPendingStream(QuicSession* session,
220 QuicStreamId stream_id) {
221 auto it = session->pending_stream_map_.find(stream_id);
222 return it == session->pending_stream_map_.end() ? nullptr : it->second.get();
223}
224
fkastenholz56055be2019-09-17 11:17:37 -0700225// static
226void QuicSessionPeer::set_is_configured(QuicSession* session, bool value) {
227 session->is_configured_ = value;
228}
229
dschinazi31e94d42019-12-18 11:55:39 -0800230// static
231void QuicSessionPeer::SetPerspective(QuicSession* session,
232 Perspective perspective) {
233 session->perspective_ = perspective;
234}
235
fayang01591ae2020-04-23 14:14:56 -0700236// static
237size_t QuicSessionPeer::GetNumOpenDynamicStreams(QuicSession* session) {
238 size_t result = 0;
239 for (const auto& it : session->stream_map_) {
240 if (!it.second->is_static()) {
241 ++result;
242 }
243 }
244 // Exclude draining streams.
fayang116fa4c2020-06-02 08:10:49 -0700245 result -= session->num_draining_streams_;
fayang01591ae2020-04-23 14:14:56 -0700246 // Add locally closed streams.
247 result += session->locally_closed_streams_highest_offset_.size();
248
249 return result;
250}
251
fayang116fa4c2020-06-02 08:10:49 -0700252// static
253size_t QuicSessionPeer::GetNumDrainingStreams(QuicSession* session) {
254 return session->num_draining_streams_;
255}
256
QUICHE teama6ef0a62019-03-07 20:34:33 -0500257} // namespace test
258} // namespace quic