blob: 176e22accf10ab8e5bcabbf4842f1ced9d7ad799 [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) {
42 session->v99_streamid_manager_.SetMaxOpenIncomingStreams(max_streams);
43 return;
44 }
45 session->stream_id_manager_.set_max_open_incoming_streams(max_streams);
46}
47
48// static
49void QuicSessionPeer::SetMaxOpenOutgoingStreams(QuicSession* session,
50 uint32_t max_streams) {
51 if (session->connection()->transport_version() == QUIC_VERSION_99) {
52 session->v99_streamid_manager_.SetMaxOpenOutgoingStreams(max_streams);
53 return;
54 }
55 session->stream_id_manager_.set_max_open_outgoing_streams(max_streams);
56}
57
58// static
59QuicCryptoStream* QuicSessionPeer::GetMutableCryptoStream(
60 QuicSession* session) {
61 return session->GetMutableCryptoStream();
62}
63
64// static
65QuicWriteBlockedList* QuicSessionPeer::GetWriteBlockedStreams(
66 QuicSession* session) {
67 return &session->write_blocked_streams_;
68}
69
70// static
71QuicStream* QuicSessionPeer::GetOrCreateDynamicStream(QuicSession* session,
72 QuicStreamId stream_id) {
73 return session->GetOrCreateDynamicStream(stream_id);
74}
75
76// static
77std::map<QuicStreamId, QuicStreamOffset>&
78QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(QuicSession* session) {
79 return session->locally_closed_streams_highest_offset_;
80}
81
82// static
83QuicSession::StaticStreamMap& QuicSessionPeer::static_streams(
84 QuicSession* session) {
85 return session->static_stream_map_;
86}
87
88// static
89QuicSession::DynamicStreamMap& QuicSessionPeer::dynamic_streams(
90 QuicSession* session) {
91 return session->dynamic_streams();
92}
93
94// static
95const QuicSession::ClosedStreams& QuicSessionPeer::closed_streams(
96 QuicSession* session) {
97 return *session->closed_streams();
98}
99
100// static
101QuicSession::ZombieStreamMap& QuicSessionPeer::zombie_streams(
102 QuicSession* session) {
103 return session->zombie_streams_;
104}
105
106// static
107QuicUnorderedSet<QuicStreamId>* QuicSessionPeer::GetDrainingStreams(
108 QuicSession* session) {
109 return &session->draining_streams_;
110}
111
112// static
113void QuicSessionPeer::ActivateStream(QuicSession* session,
114 std::unique_ptr<QuicStream> stream) {
115 return session->ActivateStream(std::move(stream));
116}
117
118// static
119bool QuicSessionPeer::IsStreamClosed(QuicSession* session, QuicStreamId id) {
120 DCHECK_NE(0u, id);
121 return session->IsClosedStream(id);
122}
123
124// static
125bool QuicSessionPeer::IsStreamCreated(QuicSession* session, QuicStreamId id) {
126 DCHECK_NE(0u, id);
127 return QuicContainsKey(session->dynamic_streams(), id);
128}
129
130// static
131bool QuicSessionPeer::IsStreamAvailable(QuicSession* session, QuicStreamId id) {
132 DCHECK_NE(0u, id);
133 if (session->connection()->transport_version() == QUIC_VERSION_99) {
fkastenholz3c4eabf2019-04-22 07:49:59 -0700134 if (id % QuicUtils::StreamIdDelta(QUIC_VERSION_99) < 2) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500135 return QuicContainsKey(
136 session->v99_streamid_manager_.bidirectional_stream_id_manager_
137 .available_streams_,
138 id);
139 }
140 return QuicContainsKey(
141 session->v99_streamid_manager_.unidirectional_stream_id_manager_
142 .available_streams_,
143 id);
144 }
145 return QuicContainsKey(session->stream_id_manager_.available_streams_, id);
146}
147
148// static
149QuicStream* QuicSessionPeer::GetStream(QuicSession* session, QuicStreamId id) {
150 return session->GetStream(id);
151}
152
153// static
154bool QuicSessionPeer::IsStreamWriteBlocked(QuicSession* session,
155 QuicStreamId id) {
156 return session->write_blocked_streams_.IsStreamBlocked(id);
157}
158
159// static
160QuicAlarm* QuicSessionPeer::GetCleanUpClosedStreamsAlarm(QuicSession* session) {
161 return session->closed_streams_clean_up_alarm_.get();
162}
163
164// static
165LegacyQuicStreamIdManager* QuicSessionPeer::GetStreamIdManager(
166 QuicSession* session) {
167 return &session->stream_id_manager_;
168}
169
170// static
171UberQuicStreamIdManager* QuicSessionPeer::v99_streamid_manager(
172 QuicSession* session) {
173 return &session->v99_streamid_manager_;
174}
175
176// static
177QuicStreamIdManager* QuicSessionPeer::v99_bidirectional_stream_id_manager(
178 QuicSession* session) {
179 return &session->v99_streamid_manager_.bidirectional_stream_id_manager_;
180}
181
182// static
183QuicStreamIdManager* QuicSessionPeer::v99_unidirectional_stream_id_manager(
184 QuicSession* session) {
185 return &session->v99_streamid_manager_.unidirectional_stream_id_manager_;
186}
187
188// static
189void QuicSessionPeer::SendRstStreamInner(QuicSession* session,
190 QuicStreamId id,
191 QuicRstStreamErrorCode error,
192 QuicStreamOffset bytes_written,
193 bool close_write_side_only) {
194 session->SendRstStreamInner(id, error, bytes_written, close_write_side_only);
195}
196
197} // namespace test
198} // namespace quic