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 #ifndef NET_SPDY_MULTIPLEXED_SESSION_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_SPDY_MULTIPLEXED_SESSION_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <string_view> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "net/base/ip_endpoint.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/base/net_errors.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/http/http_stream.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/ssl/ssl_info.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace url { 16*6777b538SAndroid Build Coastguard Worker class SchemeHostPort; 17*6777b538SAndroid Build Coastguard Worker } 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker namespace net { 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker // Base class for SPDY and QUIC sessions. 22*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE MultiplexedSession { 23*6777b538SAndroid Build Coastguard Worker public: 24*6777b538SAndroid Build Coastguard Worker virtual ~MultiplexedSession() = default; 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker // Fills SSL info in |ssl_info| and returns true when SSL is in use. 27*6777b538SAndroid Build Coastguard Worker virtual bool GetSSLInfo(SSLInfo* ssl_info) const = 0; 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker // Gets the remote endpoint of the socket that the HTTP stream is using, if 30*6777b538SAndroid Build Coastguard Worker // any. Returns OK and fills in |endpoint| if it is available; returns an 31*6777b538SAndroid Build Coastguard Worker // error and does not modify |endpoint| otherwise. 32*6777b538SAndroid Build Coastguard Worker virtual int GetRemoteEndpoint(IPEndPoint* endpoint) = 0; 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker // The value corresponding to |scheme_host_port| in the ACCEPT_CH frame 35*6777b538SAndroid Build Coastguard Worker // received during TLS handshake via the ALPS extension, or the empty string 36*6777b538SAndroid Build Coastguard Worker // if the server did not send one. Unlike Accept-CH header fields received in 37*6777b538SAndroid Build Coastguard Worker // HTTP responses, this value is available before any requests are made. 38*6777b538SAndroid Build Coastguard Worker // 39*6777b538SAndroid Build Coastguard Worker // Note that this uses url::SchemeHostPort instead of url::Origin because this 40*6777b538SAndroid Build Coastguard Worker // is based around network authorities, as opposed to general RFC 6454 41*6777b538SAndroid Build Coastguard Worker // origins. 42*6777b538SAndroid Build Coastguard Worker virtual std::string_view GetAcceptChViaAlps( 43*6777b538SAndroid Build Coastguard Worker const url::SchemeHostPort& scheme_host_port) const = 0; 44*6777b538SAndroid Build Coastguard Worker }; 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker // A handle to a multiplexed session which will be valid even after the 47*6777b538SAndroid Build Coastguard Worker // underlying session is deleted. 48*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE MultiplexedSessionHandle { 49*6777b538SAndroid Build Coastguard Worker public: 50*6777b538SAndroid Build Coastguard Worker explicit MultiplexedSessionHandle(base::WeakPtr<MultiplexedSession> session); 51*6777b538SAndroid Build Coastguard Worker virtual ~MultiplexedSessionHandle(); 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker // Gets the remote endpoint of the socket that the HTTP stream is using, if 54*6777b538SAndroid Build Coastguard Worker // any. Returns OK and fills in |endpoint| if it is available; returns an 55*6777b538SAndroid Build Coastguard Worker // error and does not modify |endpoint| otherwise. 56*6777b538SAndroid Build Coastguard Worker int GetRemoteEndpoint(IPEndPoint* endpoint); 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Fills SSL info in |ssl_info| and returns true when SSL is in use. 59*6777b538SAndroid Build Coastguard Worker bool GetSSLInfo(SSLInfo* ssl_info) const; 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker // Caches SSL info from the underlying session. 62*6777b538SAndroid Build Coastguard Worker void SaveSSLInfo(); 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Worker // The value corresponding to |scheme_host_port| in the ACCEPT_CH frame 65*6777b538SAndroid Build Coastguard Worker // received during TLS handshake via the ALPS extension, or the empty string 66*6777b538SAndroid Build Coastguard Worker // if the server did not send one or if the underlying session is not 67*6777b538SAndroid Build Coastguard Worker // available. 68*6777b538SAndroid Build Coastguard Worker // 69*6777b538SAndroid Build Coastguard Worker // Note that this uses url::SchemeHostPort instead of url::Origin because this 70*6777b538SAndroid Build Coastguard Worker // is based around network authorities, as opposed to general RFC 6454 71*6777b538SAndroid Build Coastguard Worker // origins. 72*6777b538SAndroid Build Coastguard Worker virtual std::string_view GetAcceptChViaAlps( 73*6777b538SAndroid Build Coastguard Worker const url::SchemeHostPort& scheme_host_port) const; 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker private: 76*6777b538SAndroid Build Coastguard Worker base::WeakPtr<MultiplexedSession> session_; 77*6777b538SAndroid Build Coastguard Worker SSLInfo ssl_info_; 78*6777b538SAndroid Build Coastguard Worker bool has_ssl_info_; 79*6777b538SAndroid Build Coastguard Worker }; 80*6777b538SAndroid Build Coastguard Worker 81*6777b538SAndroid Build Coastguard Worker } // namespace net 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker #endif // NET_SPDY_MULTIPLEXED_SESSION_H_ 84