blob: 001f1ca2b87156b5eb7be2d3815a3f0d584e3ed0 [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";
fkastenholzd3a1de92019-05-15 07:00:07 -070078 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) {
renjietangd1d00852019-09-06 10:43:12 -070091 DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
fkastenholzd3a1de92019-05-15 07:00:07 -070092 << "SetmaxOpenOutgoingBidirectionalStreams not supported for Google "
fkastenholz305e1732019-06-18 05:01:22 -070093 "QUIC";
fkastenholzd3a1de92019-05-15 07:00:07 -070094 session->v99_streamid_manager_.SetMaxOpenOutgoingBidirectionalStreams(
95 max_streams);
96}
97// static
98void QuicSessionPeer::SetMaxOpenOutgoingUnidirectionalStreams(
99 QuicSession* session,
100 uint32_t max_streams) {
renjietangd1d00852019-09-06 10:43:12 -0700101 DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
fkastenholzd3a1de92019-05-15 07:00:07 -0700102 << "SetmaxOpenOutgoingUnidirectionalStreams not supported for Google "
fkastenholz305e1732019-06-18 05:01:22 -0700103 "QUIC";
fkastenholzd3a1de92019-05-15 07:00:07 -0700104 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
renjietang880d2432019-07-16 13:14:37 -0700121QuicStream* QuicSessionPeer::GetOrCreateStream(QuicSession* session,
122 QuicStreamId stream_id) {
123 return session->GetOrCreateStream(stream_id);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500124}
125
126// static
127std::map<QuicStreamId, QuicStreamOffset>&
128QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(QuicSession* session) {
129 return session->locally_closed_streams_highest_offset_;
130}
131
132// static
renjietang55d182a2019-07-12 10:26:25 -0700133QuicSession::StreamMap& QuicSessionPeer::stream_map(QuicSession* session) {
134 return session->stream_map();
QUICHE teama6ef0a62019-03-07 20:34:33 -0500135}
136
137// static
138const QuicSession::ClosedStreams& QuicSessionPeer::closed_streams(
139 QuicSession* session) {
140 return *session->closed_streams();
141}
142
143// static
144QuicSession::ZombieStreamMap& QuicSessionPeer::zombie_streams(
145 QuicSession* session) {
146 return session->zombie_streams_;
147}
148
149// static
150QuicUnorderedSet<QuicStreamId>* QuicSessionPeer::GetDrainingStreams(
151 QuicSession* session) {
152 return &session->draining_streams_;
153}
154
155// static
156void QuicSessionPeer::ActivateStream(QuicSession* session,
157 std::unique_ptr<QuicStream> stream) {
158 return session->ActivateStream(std::move(stream));
159}
160
161// static
162bool QuicSessionPeer::IsStreamClosed(QuicSession* session, QuicStreamId id) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500163 return session->IsClosedStream(id);
164}
165
166// static
167bool QuicSessionPeer::IsStreamCreated(QuicSession* session, QuicStreamId id) {
renjietang55d182a2019-07-12 10:26:25 -0700168 return QuicContainsKey(session->stream_map(), id);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500169}
170
171// static
172bool QuicSessionPeer::IsStreamAvailable(QuicSession* session, QuicStreamId id) {
renjietangd1d00852019-09-06 10:43:12 -0700173 if (VersionHasIetfQuicFrames(session->transport_version())) {
174 if (id % QuicUtils::StreamIdDelta(session->transport_version()) < 2) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500175 return QuicContainsKey(
176 session->v99_streamid_manager_.bidirectional_stream_id_manager_
177 .available_streams_,
178 id);
179 }
180 return QuicContainsKey(
181 session->v99_streamid_manager_.unidirectional_stream_id_manager_
182 .available_streams_,
183 id);
184 }
185 return QuicContainsKey(session->stream_id_manager_.available_streams_, id);
186}
187
188// static
189QuicStream* QuicSessionPeer::GetStream(QuicSession* session, QuicStreamId id) {
190 return session->GetStream(id);
191}
192
193// static
194bool QuicSessionPeer::IsStreamWriteBlocked(QuicSession* session,
195 QuicStreamId id) {
196 return session->write_blocked_streams_.IsStreamBlocked(id);
197}
198
199// static
200QuicAlarm* QuicSessionPeer::GetCleanUpClosedStreamsAlarm(QuicSession* session) {
201 return session->closed_streams_clean_up_alarm_.get();
202}
203
204// static
205LegacyQuicStreamIdManager* QuicSessionPeer::GetStreamIdManager(
206 QuicSession* session) {
207 return &session->stream_id_manager_;
208}
209
210// static
211UberQuicStreamIdManager* QuicSessionPeer::v99_streamid_manager(
212 QuicSession* session) {
213 return &session->v99_streamid_manager_;
214}
215
216// static
217QuicStreamIdManager* QuicSessionPeer::v99_bidirectional_stream_id_manager(
218 QuicSession* session) {
219 return &session->v99_streamid_manager_.bidirectional_stream_id_manager_;
220}
221
222// static
223QuicStreamIdManager* QuicSessionPeer::v99_unidirectional_stream_id_manager(
224 QuicSession* session) {
225 return &session->v99_streamid_manager_.unidirectional_stream_id_manager_;
226}
227
228// static
229void QuicSessionPeer::SendRstStreamInner(QuicSession* session,
230 QuicStreamId id,
231 QuicRstStreamErrorCode error,
232 QuicStreamOffset bytes_written,
233 bool close_write_side_only) {
234 session->SendRstStreamInner(id, error, bytes_written, close_write_side_only);
235}
236
bnc092d8212019-08-07 11:53:20 -0700237// static
238PendingStream* QuicSessionPeer::GetPendingStream(QuicSession* session,
239 QuicStreamId stream_id) {
240 auto it = session->pending_stream_map_.find(stream_id);
241 return it == session->pending_stream_map_.end() ? nullptr : it->second.get();
242}
243
fkastenholz56055be2019-09-17 11:17:37 -0700244// static
245void QuicSessionPeer::set_is_configured(QuicSession* session, bool value) {
246 session->is_configured_ = value;
247}
248
QUICHE teama6ef0a62019-03-07 20:34:33 -0500249} // namespace test
250} // namespace quic