1 // Copyright (c) 2015 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 "quiche/quic/test_tools/quic_spdy_session_peer.h"
6
7
8 #include "quiche/quic/core/http/quic_spdy_session.h"
9 #include "quiche/quic/core/qpack/qpack_receive_stream.h"
10 #include "quiche/quic/core/quic_utils.h"
11 #include "quiche/quic/platform/api/quic_flags.h"
12 #include "quiche/quic/test_tools/quic_session_peer.h"
13 #include "quiche/common/platform/api/quiche_logging.h"
14
15 namespace quic {
16 namespace test {
17
18 // static
GetHeadersStream(QuicSpdySession * session)19 QuicHeadersStream* QuicSpdySessionPeer::GetHeadersStream(
20 QuicSpdySession* session) {
21 QUICHE_DCHECK(!VersionUsesHttp3(session->transport_version()));
22 return session->headers_stream();
23 }
24
SetHeadersStream(QuicSpdySession * session,QuicHeadersStream * headers_stream)25 void QuicSpdySessionPeer::SetHeadersStream(QuicSpdySession* session,
26 QuicHeadersStream* headers_stream) {
27 QUICHE_DCHECK(!VersionUsesHttp3(session->transport_version()));
28 for (auto& it : QuicSessionPeer::stream_map(session)) {
29 if (it.first ==
30 QuicUtils::GetHeadersStreamId(session->transport_version())) {
31 it.second.reset(headers_stream);
32 session->headers_stream_ = static_cast<QuicHeadersStream*>(it.second.get());
33 break;
34 }
35 }
36 }
37
38 // static
GetSpdyFramer(QuicSpdySession * session)39 spdy::SpdyFramer* QuicSpdySessionPeer::GetSpdyFramer(QuicSpdySession* session) {
40 return &session->spdy_framer_;
41 }
42
SetMaxInboundHeaderListSize(QuicSpdySession * session,size_t max_inbound_header_size)43 void QuicSpdySessionPeer::SetMaxInboundHeaderListSize(
44 QuicSpdySession* session, size_t max_inbound_header_size) {
45 session->set_max_inbound_header_list_size(max_inbound_header_size);
46 }
47
48 // static
WriteHeadersOnHeadersStream(QuicSpdySession * session,QuicStreamId id,spdy::Http2HeaderBlock headers,bool fin,const spdy::SpdyStreamPrecedence & precedence,quiche::QuicheReferenceCountedPointer<QuicAckListenerInterface> ack_listener)49 size_t QuicSpdySessionPeer::WriteHeadersOnHeadersStream(
50 QuicSpdySession* session, QuicStreamId id, spdy::Http2HeaderBlock headers,
51 bool fin, const spdy::SpdyStreamPrecedence& precedence,
52 quiche::QuicheReferenceCountedPointer<QuicAckListenerInterface>
53 ack_listener) {
54 return session->WriteHeadersOnHeadersStream(
55 id, std::move(headers), fin, precedence, std::move(ack_listener));
56 }
57
58 // static
GetNextOutgoingUnidirectionalStreamId(QuicSpdySession * session)59 QuicStreamId QuicSpdySessionPeer::GetNextOutgoingUnidirectionalStreamId(
60 QuicSpdySession* session) {
61 return session->GetNextOutgoingUnidirectionalStreamId();
62 }
63
64 // static
GetReceiveControlStream(QuicSpdySession * session)65 QuicReceiveControlStream* QuicSpdySessionPeer::GetReceiveControlStream(
66 QuicSpdySession* session) {
67 return session->receive_control_stream_;
68 }
69
70 // static
GetSendControlStream(QuicSpdySession * session)71 QuicSendControlStream* QuicSpdySessionPeer::GetSendControlStream(
72 QuicSpdySession* session) {
73 return session->send_control_stream_;
74 }
75
76 // static
GetQpackDecoderSendStream(QuicSpdySession * session)77 QpackSendStream* QuicSpdySessionPeer::GetQpackDecoderSendStream(
78 QuicSpdySession* session) {
79 return session->qpack_decoder_send_stream_;
80 }
81
82 // static
GetQpackEncoderSendStream(QuicSpdySession * session)83 QpackSendStream* QuicSpdySessionPeer::GetQpackEncoderSendStream(
84 QuicSpdySession* session) {
85 return session->qpack_encoder_send_stream_;
86 }
87
88 // static
GetQpackDecoderReceiveStream(QuicSpdySession * session)89 QpackReceiveStream* QuicSpdySessionPeer::GetQpackDecoderReceiveStream(
90 QuicSpdySession* session) {
91 return session->qpack_decoder_receive_stream_;
92 }
93
94 // static
GetQpackEncoderReceiveStream(QuicSpdySession * session)95 QpackReceiveStream* QuicSpdySessionPeer::GetQpackEncoderReceiveStream(
96 QuicSpdySession* session) {
97 return session->qpack_encoder_receive_stream_;
98 }
99
100 // static
SetHttpDatagramSupport(QuicSpdySession * session,HttpDatagramSupport http_datagram_support)101 void QuicSpdySessionPeer::SetHttpDatagramSupport(
102 QuicSpdySession* session, HttpDatagramSupport http_datagram_support) {
103 session->http_datagram_support_ = http_datagram_support;
104 }
105
106 // static
LocalHttpDatagramSupport(QuicSpdySession * session)107 HttpDatagramSupport QuicSpdySessionPeer::LocalHttpDatagramSupport(
108 QuicSpdySession* session) {
109 return session->LocalHttpDatagramSupport();
110 }
111
112 // static
EnableWebTransport(QuicSpdySession * session)113 void QuicSpdySessionPeer::EnableWebTransport(QuicSpdySession* session) {
114 QUICHE_DCHECK(session->WillNegotiateWebTransport());
115 SetHttpDatagramSupport(session, HttpDatagramSupport::kRfc);
116 session->peer_web_transport_versions_ = kDefaultSupportedWebTransportVersions;
117 }
118
119 } // namespace test
120 } // namespace quic
121