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