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