1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "net/spdy/multiplexed_http_stream.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <utility> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/notreached.h" 10*6777b538SAndroid Build Coastguard Worker #include "net/http/http_raw_request_headers.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/spdy/core/http2_header_block.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace net { 14*6777b538SAndroid Build Coastguard Worker MultiplexedHttpStream(std::unique_ptr<MultiplexedSessionHandle> session)15*6777b538SAndroid Build Coastguard WorkerMultiplexedHttpStream::MultiplexedHttpStream( 16*6777b538SAndroid Build Coastguard Worker std::unique_ptr<MultiplexedSessionHandle> session) 17*6777b538SAndroid Build Coastguard Worker : session_(std::move(session)) {} 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker MultiplexedHttpStream::~MultiplexedHttpStream() = default; 20*6777b538SAndroid Build Coastguard Worker GetRemoteEndpoint(IPEndPoint * endpoint)21*6777b538SAndroid Build Coastguard Workerint MultiplexedHttpStream::GetRemoteEndpoint(IPEndPoint* endpoint) { 22*6777b538SAndroid Build Coastguard Worker return session_->GetRemoteEndpoint(endpoint); 23*6777b538SAndroid Build Coastguard Worker } 24*6777b538SAndroid Build Coastguard Worker GetSSLInfo(SSLInfo * ssl_info)25*6777b538SAndroid Build Coastguard Workervoid MultiplexedHttpStream::GetSSLInfo(SSLInfo* ssl_info) { 26*6777b538SAndroid Build Coastguard Worker session_->GetSSLInfo(ssl_info); 27*6777b538SAndroid Build Coastguard Worker } 28*6777b538SAndroid Build Coastguard Worker SaveSSLInfo()29*6777b538SAndroid Build Coastguard Workervoid MultiplexedHttpStream::SaveSSLInfo() { 30*6777b538SAndroid Build Coastguard Worker session_->SaveSSLInfo(); 31*6777b538SAndroid Build Coastguard Worker } 32*6777b538SAndroid Build Coastguard Worker Drain(HttpNetworkSession * session)33*6777b538SAndroid Build Coastguard Workervoid MultiplexedHttpStream::Drain(HttpNetworkSession* session) { 34*6777b538SAndroid Build Coastguard Worker NOTREACHED(); 35*6777b538SAndroid Build Coastguard Worker Close(false); 36*6777b538SAndroid Build Coastguard Worker delete this; 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker RenewStreamForAuth()39*6777b538SAndroid Build Coastguard Workerstd::unique_ptr<HttpStream> MultiplexedHttpStream::RenewStreamForAuth() { 40*6777b538SAndroid Build Coastguard Worker return nullptr; 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker SetConnectionReused()43*6777b538SAndroid Build Coastguard Workervoid MultiplexedHttpStream::SetConnectionReused() {} 44*6777b538SAndroid Build Coastguard Worker CanReuseConnection() const45*6777b538SAndroid Build Coastguard Workerbool MultiplexedHttpStream::CanReuseConnection() const { 46*6777b538SAndroid Build Coastguard Worker // Multiplexed streams aren't considered reusable. 47*6777b538SAndroid Build Coastguard Worker return false; 48*6777b538SAndroid Build Coastguard Worker } 49*6777b538SAndroid Build Coastguard Worker SetRequestHeadersCallback(RequestHeadersCallback callback)50*6777b538SAndroid Build Coastguard Workervoid MultiplexedHttpStream::SetRequestHeadersCallback( 51*6777b538SAndroid Build Coastguard Worker RequestHeadersCallback callback) { 52*6777b538SAndroid Build Coastguard Worker request_headers_callback_ = std::move(callback); 53*6777b538SAndroid Build Coastguard Worker } 54*6777b538SAndroid Build Coastguard Worker DispatchRequestHeadersCallback(const spdy::Http2HeaderBlock & spdy_headers)55*6777b538SAndroid Build Coastguard Workervoid MultiplexedHttpStream::DispatchRequestHeadersCallback( 56*6777b538SAndroid Build Coastguard Worker const spdy::Http2HeaderBlock& spdy_headers) { 57*6777b538SAndroid Build Coastguard Worker if (!request_headers_callback_) 58*6777b538SAndroid Build Coastguard Worker return; 59*6777b538SAndroid Build Coastguard Worker HttpRawRequestHeaders raw_headers; 60*6777b538SAndroid Build Coastguard Worker for (const auto& entry : spdy_headers) { 61*6777b538SAndroid Build Coastguard Worker raw_headers.Add(entry.first, entry.second); 62*6777b538SAndroid Build Coastguard Worker } 63*6777b538SAndroid Build Coastguard Worker request_headers_callback_.Run(std::move(raw_headers)); 64*6777b538SAndroid Build Coastguard Worker } 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker } // namespace net 67