blob: 9eee49447731e24e33eb36eb3900baa3680bb126 [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) {
30 if (session->connection()->transport_version() == QUIC_VERSION_99) {
31 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) {
41 if (session->connection()->transport_version() == QUIC_VERSION_99) {
fkastenholzd3a1de92019-05-15 07:00:07 -070042 QUIC_BUG << "SetmaxOpenIncomingStreams deprecated for IETF QUIC/V99";
43 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) {
56 DCHECK_EQ(QUIC_VERSION_99, session->connection()->transport_version())
57 << "SetmaxOpenIncomingBidirectionalStreams not supported for Google "
58 "QUIC/not-V99";
59 session->v99_streamid_manager_.SetMaxOpenIncomingBidirectionalStreams(
60 max_streams);
61}
62// static
63void QuicSessionPeer::SetMaxOpenIncomingUnidirectionalStreams(
64 QuicSession* session,
65 uint32_t max_streams) {
66 DCHECK_EQ(QUIC_VERSION_99, session->connection()->transport_version())
67 << "SetmaxOpenIncomingUnidirectionalStreams not supported for Google "
68 "QUIC/not-V99";
69 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) {
76 if (session->connection()->transport_version() == QUIC_VERSION_99) {
fkastenholzd3a1de92019-05-15 07:00:07 -070077 QUIC_BUG << "SetmaxOpenOutgoingStreams deprecated for IETF QUIC/V99";
78 session->v99_streamid_manager_.SetMaxOpenOutgoingUnidirectionalStreams(
79 max_streams);
80 session->v99_streamid_manager_.SetMaxOpenOutgoingBidirectionalStreams(
81 max_streams);
QUICHE teama6ef0a62019-03-07 20:34:33 -050082 return;
83 }
84 session->stream_id_manager_.set_max_open_outgoing_streams(max_streams);
85}
86
87// static
fkastenholzd3a1de92019-05-15 07:00:07 -070088void QuicSessionPeer::SetMaxOpenOutgoingBidirectionalStreams(
89 QuicSession* session,
90 uint32_t max_streams) {
91 DCHECK_EQ(QUIC_VERSION_99, session->connection()->transport_version())
92 << "SetmaxOpenOutgoingBidirectionalStreams not supported for Google "
93 "QUIC/not-V99";
94 session->v99_streamid_manager_.SetMaxOpenOutgoingBidirectionalStreams(
95 max_streams);
96}
97// static
98void QuicSessionPeer::SetMaxOpenOutgoingUnidirectionalStreams(
99 QuicSession* session,
100 uint32_t max_streams) {
101 DCHECK_EQ(QUIC_VERSION_99, session->connection()->transport_version())
102 << "SetmaxOpenOutgoingUnidirectionalStreams not supported for Google "
103 "QUIC/not-V99";
104 session->v99_streamid_manager_.SetMaxOpenOutgoingUnidirectionalStreams(
105 max_streams);
106}
107
108// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500109QuicCryptoStream* QuicSessionPeer::GetMutableCryptoStream(
110 QuicSession* session) {
111 return session->GetMutableCryptoStream();
112}
113
114// static
115QuicWriteBlockedList* QuicSessionPeer::GetWriteBlockedStreams(
116 QuicSession* session) {
117 return &session->write_blocked_streams_;
118}
119
120// static
121QuicStream* QuicSessionPeer::GetOrCreateDynamicStream(QuicSession* session,
122 QuicStreamId stream_id) {
123 return session->GetOrCreateDynamicStream(stream_id);
124}
125
126// static
127std::map<QuicStreamId, QuicStreamOffset>&
128QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(QuicSession* session) {
129 return session->locally_closed_streams_highest_offset_;
130}
131
132// static
133QuicSession::StaticStreamMap& QuicSessionPeer::static_streams(
134 QuicSession* session) {
135 return session->static_stream_map_;
136}
137
138// static
139QuicSession::DynamicStreamMap& QuicSessionPeer::dynamic_streams(
140 QuicSession* session) {
141 return session->dynamic_streams();
142}
143
144// static
145const QuicSession::ClosedStreams& QuicSessionPeer::closed_streams(
146 QuicSession* session) {
147 return *session->closed_streams();
148}
149
150// static
151QuicSession::ZombieStreamMap& QuicSessionPeer::zombie_streams(
152 QuicSession* session) {
153 return session->zombie_streams_;
154}
155
156// static
157QuicUnorderedSet<QuicStreamId>* QuicSessionPeer::GetDrainingStreams(
158 QuicSession* session) {
159 return &session->draining_streams_;
160}
161
162// static
163void QuicSessionPeer::ActivateStream(QuicSession* session,
164 std::unique_ptr<QuicStream> stream) {
165 return session->ActivateStream(std::move(stream));
166}
167
168// static
nharper46833c32019-05-15 21:33:05 -0700169void QuicSessionPeer::RegisterStaticStream(QuicSession* session,
170 QuicStreamId id,
171 QuicStream* stream) {
172 return session->RegisterStaticStream(id, stream);
173}
174
175// static
176void QuicSessionPeer::RegisterStaticStreamNew(
177 QuicSession* session,
178 std::unique_ptr<QuicStream> stream) {
179 return session->RegisterStaticStreamNew(std::move(stream));
180}
181
182// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500183bool QuicSessionPeer::IsStreamClosed(QuicSession* session, QuicStreamId id) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500184 return session->IsClosedStream(id);
185}
186
187// static
188bool QuicSessionPeer::IsStreamCreated(QuicSession* session, QuicStreamId id) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500189 return QuicContainsKey(session->dynamic_streams(), id);
190}
191
192// static
193bool QuicSessionPeer::IsStreamAvailable(QuicSession* session, QuicStreamId id) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500194 if (session->connection()->transport_version() == QUIC_VERSION_99) {
fkastenholz3c4eabf2019-04-22 07:49:59 -0700195 if (id % QuicUtils::StreamIdDelta(QUIC_VERSION_99) < 2) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500196 return QuicContainsKey(
197 session->v99_streamid_manager_.bidirectional_stream_id_manager_
198 .available_streams_,
199 id);
200 }
201 return QuicContainsKey(
202 session->v99_streamid_manager_.unidirectional_stream_id_manager_
203 .available_streams_,
204 id);
205 }
206 return QuicContainsKey(session->stream_id_manager_.available_streams_, id);
207}
208
209// static
210QuicStream* QuicSessionPeer::GetStream(QuicSession* session, QuicStreamId id) {
211 return session->GetStream(id);
212}
213
214// static
215bool QuicSessionPeer::IsStreamWriteBlocked(QuicSession* session,
216 QuicStreamId id) {
217 return session->write_blocked_streams_.IsStreamBlocked(id);
218}
219
220// static
221QuicAlarm* QuicSessionPeer::GetCleanUpClosedStreamsAlarm(QuicSession* session) {
222 return session->closed_streams_clean_up_alarm_.get();
223}
224
225// static
226LegacyQuicStreamIdManager* QuicSessionPeer::GetStreamIdManager(
227 QuicSession* session) {
228 return &session->stream_id_manager_;
229}
230
231// static
232UberQuicStreamIdManager* QuicSessionPeer::v99_streamid_manager(
233 QuicSession* session) {
234 return &session->v99_streamid_manager_;
235}
236
237// static
238QuicStreamIdManager* QuicSessionPeer::v99_bidirectional_stream_id_manager(
239 QuicSession* session) {
240 return &session->v99_streamid_manager_.bidirectional_stream_id_manager_;
241}
242
243// static
244QuicStreamIdManager* QuicSessionPeer::v99_unidirectional_stream_id_manager(
245 QuicSession* session) {
246 return &session->v99_streamid_manager_.unidirectional_stream_id_manager_;
247}
248
249// static
250void QuicSessionPeer::SendRstStreamInner(QuicSession* session,
251 QuicStreamId id,
252 QuicRstStreamErrorCode error,
253 QuicStreamOffset bytes_written,
254 bool close_write_side_only) {
255 session->SendRstStreamInner(id, error, bytes_written, close_write_side_only);
256}
257
258} // namespace test
259} // namespace quic