xref: /aosp_15_r20/external/cronet/net/spdy/spdy_session_key.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 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_SPDY_SESSION_KEY_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_SPDY_SPDY_SESSION_KEY_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <optional>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
11*6777b538SAndroid Build Coastguard Worker #include "net/base/network_anonymization_key.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/base/network_isolation_key.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/base/privacy_mode.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_chain.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/base/session_usage.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/secure_dns_policy.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/socket/socket_tag.h"
18*6777b538SAndroid Build Coastguard Worker namespace net {
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker // SpdySessionKey is used as unique index for SpdySessionPool.
21*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE SpdySessionKey {
22*6777b538SAndroid Build Coastguard Worker  public:
23*6777b538SAndroid Build Coastguard Worker   SpdySessionKey();
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker   // Note that if `session_usage` is kProxy, then:
26*6777b538SAndroid Build Coastguard Worker   // * `privacy_mode` must be PRIVACY_MODE_DISABLED to pool credentialed and
27*6777b538SAndroid Build Coastguard Worker   //     uncredetialed requests onto the same proxy connections.
28*6777b538SAndroid Build Coastguard Worker   // * `disable_cert_verification_network_fetches` must be true, to avoid
29*6777b538SAndroid Build Coastguard Worker   //     depending on cert fetches, which would be made through the proxy.
30*6777b538SAndroid Build Coastguard Worker   SpdySessionKey(const HostPortPair& host_port_pair,
31*6777b538SAndroid Build Coastguard Worker                  PrivacyMode privacy_mode,
32*6777b538SAndroid Build Coastguard Worker                  const ProxyChain& proxy_chain,
33*6777b538SAndroid Build Coastguard Worker                  SessionUsage session_usage,
34*6777b538SAndroid Build Coastguard Worker                  const SocketTag& socket_tag,
35*6777b538SAndroid Build Coastguard Worker                  const NetworkAnonymizationKey& network_anonymization_key,
36*6777b538SAndroid Build Coastguard Worker                  SecureDnsPolicy secure_dns_policy,
37*6777b538SAndroid Build Coastguard Worker                  bool disable_cert_verification_network_fetches);
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker   SpdySessionKey(const SpdySessionKey& other);
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker   ~SpdySessionKey();
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   // Comparator function so this can be placed in a std::map.
44*6777b538SAndroid Build Coastguard Worker   bool operator<(const SpdySessionKey& other) const;
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   // Equality tests of contents.
47*6777b538SAndroid Build Coastguard Worker   bool operator==(const SpdySessionKey& other) const;
48*6777b538SAndroid Build Coastguard Worker   bool operator!=(const SpdySessionKey& other) const;
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker   // Struct returned by CompareForAliasing().
51*6777b538SAndroid Build Coastguard Worker   struct CompareForAliasingResult {
52*6777b538SAndroid Build Coastguard Worker     // True if the two SpdySessionKeys match, except possibly for their
53*6777b538SAndroid Build Coastguard Worker     // |host_port_pair| and |socket_tag|.
54*6777b538SAndroid Build Coastguard Worker     bool is_potentially_aliasable = false;
55*6777b538SAndroid Build Coastguard Worker     // True if the |socket_tag| fields match. If this is false, it's up to the
56*6777b538SAndroid Build Coastguard Worker     // caller to change the tag of the session (if possible) or to not alias the
57*6777b538SAndroid Build Coastguard Worker     // session, even if |is_potentially_aliasable| is true.
58*6777b538SAndroid Build Coastguard Worker     bool is_socket_tag_match = false;
59*6777b538SAndroid Build Coastguard Worker   };
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker   // Checks if requests using SpdySessionKey can potentially be used to service
62*6777b538SAndroid Build Coastguard Worker   // requests using another. The caller *MUST* also make sure that the session
63*6777b538SAndroid Build Coastguard Worker   // associated with one key has been verified for use with the other.
64*6777b538SAndroid Build Coastguard Worker   //
65*6777b538SAndroid Build Coastguard Worker   // Note that this method is symmetric, so it doesn't matter which key's method
66*6777b538SAndroid Build Coastguard Worker   // is called on the other.
67*6777b538SAndroid Build Coastguard Worker   CompareForAliasingResult CompareForAliasing(
68*6777b538SAndroid Build Coastguard Worker       const SpdySessionKey& other) const;
69*6777b538SAndroid Build Coastguard Worker 
host_port_proxy_pair()70*6777b538SAndroid Build Coastguard Worker   const HostPortProxyPair& host_port_proxy_pair() const {
71*6777b538SAndroid Build Coastguard Worker     return host_port_proxy_pair_;
72*6777b538SAndroid Build Coastguard Worker   }
73*6777b538SAndroid Build Coastguard Worker 
host_port_pair()74*6777b538SAndroid Build Coastguard Worker   const HostPortPair& host_port_pair() const {
75*6777b538SAndroid Build Coastguard Worker     return host_port_proxy_pair_.first;
76*6777b538SAndroid Build Coastguard Worker   }
77*6777b538SAndroid Build Coastguard Worker 
proxy_chain()78*6777b538SAndroid Build Coastguard Worker   const ProxyChain& proxy_chain() const { return host_port_proxy_pair_.second; }
79*6777b538SAndroid Build Coastguard Worker 
privacy_mode()80*6777b538SAndroid Build Coastguard Worker   PrivacyMode privacy_mode() const {
81*6777b538SAndroid Build Coastguard Worker     return privacy_mode_;
82*6777b538SAndroid Build Coastguard Worker   }
83*6777b538SAndroid Build Coastguard Worker 
session_usage()84*6777b538SAndroid Build Coastguard Worker   SessionUsage session_usage() const { return session_usage_; }
85*6777b538SAndroid Build Coastguard Worker 
socket_tag()86*6777b538SAndroid Build Coastguard Worker   const SocketTag& socket_tag() const { return socket_tag_; }
87*6777b538SAndroid Build Coastguard Worker 
network_anonymization_key()88*6777b538SAndroid Build Coastguard Worker   const NetworkAnonymizationKey& network_anonymization_key() const {
89*6777b538SAndroid Build Coastguard Worker     return network_anonymization_key_;
90*6777b538SAndroid Build Coastguard Worker   }
91*6777b538SAndroid Build Coastguard Worker 
secure_dns_policy()92*6777b538SAndroid Build Coastguard Worker   SecureDnsPolicy secure_dns_policy() const { return secure_dns_policy_; }
93*6777b538SAndroid Build Coastguard Worker 
disable_cert_verification_network_fetches()94*6777b538SAndroid Build Coastguard Worker   bool disable_cert_verification_network_fetches() const {
95*6777b538SAndroid Build Coastguard Worker     return disable_cert_verification_network_fetches_;
96*6777b538SAndroid Build Coastguard Worker   }
97*6777b538SAndroid Build Coastguard Worker 
98*6777b538SAndroid Build Coastguard Worker  private:
99*6777b538SAndroid Build Coastguard Worker   HostPortProxyPair host_port_proxy_pair_;
100*6777b538SAndroid Build Coastguard Worker   // If enabled, then session cannot be tracked by the server.
101*6777b538SAndroid Build Coastguard Worker   PrivacyMode privacy_mode_ = PRIVACY_MODE_DISABLED;
102*6777b538SAndroid Build Coastguard Worker   SessionUsage session_usage_;
103*6777b538SAndroid Build Coastguard Worker   SocketTag socket_tag_;
104*6777b538SAndroid Build Coastguard Worker   // Used to separate requests made in different contexts. If network state
105*6777b538SAndroid Build Coastguard Worker   // partitioning is disabled this will be set to an empty key.
106*6777b538SAndroid Build Coastguard Worker   NetworkAnonymizationKey network_anonymization_key_;
107*6777b538SAndroid Build Coastguard Worker   SecureDnsPolicy secure_dns_policy_;
108*6777b538SAndroid Build Coastguard Worker   bool disable_cert_verification_network_fetches_;
109*6777b538SAndroid Build Coastguard Worker };
110*6777b538SAndroid Build Coastguard Worker 
111*6777b538SAndroid Build Coastguard Worker }  // namespace net
112*6777b538SAndroid Build Coastguard Worker 
113*6777b538SAndroid Build Coastguard Worker #endif  // NET_SPDY_SPDY_SESSION_KEY_H_
114