xref: /aosp_15_r20/external/cronet/net/quic/quic_session_key.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 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_QUIC_QUIC_SESSION_KEY_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_QUIC_QUIC_SESSION_KEY_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "net/base/host_port_pair.h"
9*6777b538SAndroid Build Coastguard Worker #include "net/base/network_anonymization_key.h"
10*6777b538SAndroid Build Coastguard Worker #include "net/base/privacy_mode.h"
11*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_chain.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/base/session_usage.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/secure_dns_policy.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/socket/socket_tag.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/quic_server_id.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker namespace net {
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker // The key used to identify sessions. Includes the quic::QuicServerId and socket
20*6777b538SAndroid Build Coastguard Worker // tag.
21*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE QuicSessionKey {
22*6777b538SAndroid Build Coastguard Worker  public:
23*6777b538SAndroid Build Coastguard Worker   QuicSessionKey();
24*6777b538SAndroid Build Coastguard Worker   QuicSessionKey(const HostPortPair& host_port_pair,
25*6777b538SAndroid Build Coastguard Worker                  PrivacyMode privacy_mode,
26*6777b538SAndroid Build Coastguard Worker                  const ProxyChain& proxy_chain,
27*6777b538SAndroid Build Coastguard Worker                  SessionUsage session_usage,
28*6777b538SAndroid Build Coastguard Worker                  const SocketTag& socket_tag,
29*6777b538SAndroid Build Coastguard Worker                  const NetworkAnonymizationKey& network_anonymization_key,
30*6777b538SAndroid Build Coastguard Worker                  SecureDnsPolicy secure_dns_policy,
31*6777b538SAndroid Build Coastguard Worker                  bool require_dns_https_alpn);
32*6777b538SAndroid Build Coastguard Worker   QuicSessionKey(const std::string& host,
33*6777b538SAndroid Build Coastguard Worker                  uint16_t port,
34*6777b538SAndroid Build Coastguard Worker                  PrivacyMode privacy_mode,
35*6777b538SAndroid Build Coastguard Worker                  const ProxyChain& proxy_chain,
36*6777b538SAndroid Build Coastguard Worker                  SessionUsage session_usage,
37*6777b538SAndroid Build Coastguard Worker                  const SocketTag& socket_tag,
38*6777b538SAndroid Build Coastguard Worker                  const NetworkAnonymizationKey& network_anonymization_key,
39*6777b538SAndroid Build Coastguard Worker                  SecureDnsPolicy secure_dns_policy,
40*6777b538SAndroid Build Coastguard Worker                  bool require_dns_https_alpn);
41*6777b538SAndroid Build Coastguard Worker   QuicSessionKey(const quic::QuicServerId& server_id,
42*6777b538SAndroid Build Coastguard Worker                  const ProxyChain& proxy_chain,
43*6777b538SAndroid Build Coastguard Worker                  SessionUsage session_usage,
44*6777b538SAndroid Build Coastguard Worker                  const SocketTag& socket_tag,
45*6777b538SAndroid Build Coastguard Worker                  const NetworkAnonymizationKey& network_anonymization_key,
46*6777b538SAndroid Build Coastguard Worker                  SecureDnsPolicy secure_dns_policy,
47*6777b538SAndroid Build Coastguard Worker                  bool require_dns_https_alpn);
48*6777b538SAndroid Build Coastguard Worker   QuicSessionKey(const QuicSessionKey& other);
49*6777b538SAndroid Build Coastguard Worker   ~QuicSessionKey() = default;
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker   // Needed to be an element of std::set.
52*6777b538SAndroid Build Coastguard Worker   bool operator<(const QuicSessionKey& other) const;
53*6777b538SAndroid Build Coastguard Worker   bool operator==(const QuicSessionKey& other) const;
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker   // Checks if requests using QuicSessionKey can potentially be used to service
56*6777b538SAndroid Build Coastguard Worker   // requests using another.  Returns true if all fields except QuicServerId's
57*6777b538SAndroid Build Coastguard Worker   // host and port match. The caller *MUST* also make sure that the session
58*6777b538SAndroid Build Coastguard Worker   // associated with one key has been verified for use with the host/port of the
59*6777b538SAndroid Build Coastguard Worker   // other.
60*6777b538SAndroid Build Coastguard Worker   //
61*6777b538SAndroid Build Coastguard Worker   // Note that this method is symmetric, so it doesn't matter which key's method
62*6777b538SAndroid Build Coastguard Worker   // is called on the other.
63*6777b538SAndroid Build Coastguard Worker   bool CanUseForAliasing(const QuicSessionKey& other) const;
64*6777b538SAndroid Build Coastguard Worker 
host()65*6777b538SAndroid Build Coastguard Worker   const std::string& host() const { return server_id_.host(); }
66*6777b538SAndroid Build Coastguard Worker 
privacy_mode()67*6777b538SAndroid Build Coastguard Worker   PrivacyMode privacy_mode() const {
68*6777b538SAndroid Build Coastguard Worker     return server_id_.privacy_mode_enabled() ? PRIVACY_MODE_ENABLED
69*6777b538SAndroid Build Coastguard Worker                                              : PRIVACY_MODE_DISABLED;
70*6777b538SAndroid Build Coastguard Worker   }
71*6777b538SAndroid Build Coastguard Worker 
server_id()72*6777b538SAndroid Build Coastguard Worker   const quic::QuicServerId& server_id() const { return server_id_; }
73*6777b538SAndroid Build Coastguard Worker 
proxy_chain()74*6777b538SAndroid Build Coastguard Worker   const ProxyChain& proxy_chain() const { return proxy_chain_; }
75*6777b538SAndroid Build Coastguard Worker 
session_usage()76*6777b538SAndroid Build Coastguard Worker   SessionUsage session_usage() const { return session_usage_; }
77*6777b538SAndroid Build Coastguard Worker 
socket_tag()78*6777b538SAndroid Build Coastguard Worker   SocketTag socket_tag() const { return socket_tag_; }
79*6777b538SAndroid Build Coastguard Worker 
network_anonymization_key()80*6777b538SAndroid Build Coastguard Worker   const NetworkAnonymizationKey& network_anonymization_key() const {
81*6777b538SAndroid Build Coastguard Worker     return network_anonymization_key_;
82*6777b538SAndroid Build Coastguard Worker   }
83*6777b538SAndroid Build Coastguard Worker 
secure_dns_policy()84*6777b538SAndroid Build Coastguard Worker   SecureDnsPolicy secure_dns_policy() const { return secure_dns_policy_; }
85*6777b538SAndroid Build Coastguard Worker 
require_dns_https_alpn()86*6777b538SAndroid Build Coastguard Worker   bool require_dns_https_alpn() const { return require_dns_https_alpn_; }
87*6777b538SAndroid Build Coastguard Worker 
88*6777b538SAndroid Build Coastguard Worker  private:
89*6777b538SAndroid Build Coastguard Worker   quic::QuicServerId server_id_;
90*6777b538SAndroid Build Coastguard Worker   ProxyChain proxy_chain_;
91*6777b538SAndroid Build Coastguard Worker   SessionUsage session_usage_;
92*6777b538SAndroid Build Coastguard Worker   SocketTag socket_tag_;
93*6777b538SAndroid Build Coastguard Worker   // Used to separate requests made in different contexts.
94*6777b538SAndroid Build Coastguard Worker   NetworkAnonymizationKey network_anonymization_key_;
95*6777b538SAndroid Build Coastguard Worker   SecureDnsPolicy secure_dns_policy_;
96*6777b538SAndroid Build Coastguard Worker   bool require_dns_https_alpn_ = false;
97*6777b538SAndroid Build Coastguard Worker };
98*6777b538SAndroid Build Coastguard Worker 
99*6777b538SAndroid Build Coastguard Worker }  // namespace net
100*6777b538SAndroid Build Coastguard Worker 
101*6777b538SAndroid Build Coastguard Worker #endif  // NET_QUIC_QUIC_SESSION_KEY_H_
102