1 // Copyright 2016 The Chromium Authors 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/spdy/multiplexed_http_stream.h" 6 7 #include <utility> 8 9 #include "base/notreached.h" 10 #include "net/http/http_raw_request_headers.h" 11 #include "net/third_party/quiche/src/quiche/spdy/core/http2_header_block.h" 12 13 namespace net { 14 MultiplexedHttpStream(std::unique_ptr<MultiplexedSessionHandle> session)15MultiplexedHttpStream::MultiplexedHttpStream( 16 std::unique_ptr<MultiplexedSessionHandle> session) 17 : session_(std::move(session)) {} 18 19 MultiplexedHttpStream::~MultiplexedHttpStream() = default; 20 GetRemoteEndpoint(IPEndPoint * endpoint)21int MultiplexedHttpStream::GetRemoteEndpoint(IPEndPoint* endpoint) { 22 return session_->GetRemoteEndpoint(endpoint); 23 } 24 GetSSLInfo(SSLInfo * ssl_info)25void MultiplexedHttpStream::GetSSLInfo(SSLInfo* ssl_info) { 26 session_->GetSSLInfo(ssl_info); 27 } 28 SaveSSLInfo()29void MultiplexedHttpStream::SaveSSLInfo() { 30 session_->SaveSSLInfo(); 31 } 32 GetSSLCertRequestInfo(SSLCertRequestInfo * cert_request_info)33void MultiplexedHttpStream::GetSSLCertRequestInfo( 34 SSLCertRequestInfo* cert_request_info) { 35 // A multiplexed stream cannot request client certificates. Client 36 // authentication may only occur during the initial SSL handshake. 37 NOTREACHED(); 38 } 39 Drain(HttpNetworkSession * session)40void MultiplexedHttpStream::Drain(HttpNetworkSession* session) { 41 NOTREACHED(); 42 Close(false); 43 delete this; 44 } 45 RenewStreamForAuth()46std::unique_ptr<HttpStream> MultiplexedHttpStream::RenewStreamForAuth() { 47 return nullptr; 48 } 49 SetConnectionReused()50void MultiplexedHttpStream::SetConnectionReused() {} 51 CanReuseConnection() const52bool MultiplexedHttpStream::CanReuseConnection() const { 53 // Multiplexed streams aren't considered reusable. 54 return false; 55 } 56 SetRequestHeadersCallback(RequestHeadersCallback callback)57void MultiplexedHttpStream::SetRequestHeadersCallback( 58 RequestHeadersCallback callback) { 59 request_headers_callback_ = std::move(callback); 60 } 61 DispatchRequestHeadersCallback(const spdy::Http2HeaderBlock & spdy_headers)62void MultiplexedHttpStream::DispatchRequestHeadersCallback( 63 const spdy::Http2HeaderBlock& spdy_headers) { 64 if (!request_headers_callback_) 65 return; 66 HttpRawRequestHeaders raw_headers; 67 for (const auto& entry : spdy_headers) { 68 raw_headers.Add(entry.first, entry.second); 69 } 70 request_headers_callback_.Run(std::move(raw_headers)); 71 } 72 73 } // namespace net 74