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