xref: /aosp_15_r20/external/cronet/net/spdy/multiplexed_session.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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