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 #include "net/quic/quic_session_key.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <tuple>
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker #include "net/base/host_port_pair.h"
10*6777b538SAndroid Build Coastguard Worker #include "net/base/network_anonymization_key.h"
11*6777b538SAndroid Build Coastguard Worker #include "net/base/privacy_mode.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_chain.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/base/session_usage.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/secure_dns_policy.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/socket/socket_tag.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/quic_server_id.h"
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Worker namespace net {
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Worker QuicSessionKey::QuicSessionKey() = default;
21*6777b538SAndroid Build Coastguard Worker
QuicSessionKey(const HostPortPair & host_port_pair,PrivacyMode privacy_mode,const ProxyChain & proxy_chain,SessionUsage session_usage,const SocketTag & socket_tag,const NetworkAnonymizationKey & network_anonymization_key,SecureDnsPolicy secure_dns_policy,bool require_dns_https_alpn)22*6777b538SAndroid Build Coastguard Worker QuicSessionKey::QuicSessionKey(
23*6777b538SAndroid Build Coastguard Worker const HostPortPair& host_port_pair,
24*6777b538SAndroid Build Coastguard Worker PrivacyMode privacy_mode,
25*6777b538SAndroid Build Coastguard Worker const ProxyChain& proxy_chain,
26*6777b538SAndroid Build Coastguard Worker SessionUsage session_usage,
27*6777b538SAndroid Build Coastguard Worker const SocketTag& socket_tag,
28*6777b538SAndroid Build Coastguard Worker const NetworkAnonymizationKey& network_anonymization_key,
29*6777b538SAndroid Build Coastguard Worker SecureDnsPolicy secure_dns_policy,
30*6777b538SAndroid Build Coastguard Worker bool require_dns_https_alpn)
31*6777b538SAndroid Build Coastguard Worker : QuicSessionKey(host_port_pair.host(),
32*6777b538SAndroid Build Coastguard Worker host_port_pair.port(),
33*6777b538SAndroid Build Coastguard Worker privacy_mode,
34*6777b538SAndroid Build Coastguard Worker proxy_chain,
35*6777b538SAndroid Build Coastguard Worker session_usage,
36*6777b538SAndroid Build Coastguard Worker socket_tag,
37*6777b538SAndroid Build Coastguard Worker network_anonymization_key,
38*6777b538SAndroid Build Coastguard Worker secure_dns_policy,
39*6777b538SAndroid Build Coastguard Worker require_dns_https_alpn) {}
40*6777b538SAndroid Build Coastguard Worker
QuicSessionKey(const std::string & host,uint16_t port,PrivacyMode privacy_mode,const ProxyChain & proxy_chain,SessionUsage session_usage,const SocketTag & socket_tag,const NetworkAnonymizationKey & network_anonymization_key,SecureDnsPolicy secure_dns_policy,bool require_dns_https_alpn)41*6777b538SAndroid Build Coastguard Worker QuicSessionKey::QuicSessionKey(
42*6777b538SAndroid Build Coastguard Worker const std::string& host,
43*6777b538SAndroid Build Coastguard Worker uint16_t port,
44*6777b538SAndroid Build Coastguard Worker PrivacyMode privacy_mode,
45*6777b538SAndroid Build Coastguard Worker const ProxyChain& proxy_chain,
46*6777b538SAndroid Build Coastguard Worker SessionUsage session_usage,
47*6777b538SAndroid Build Coastguard Worker const SocketTag& socket_tag,
48*6777b538SAndroid Build Coastguard Worker const NetworkAnonymizationKey& network_anonymization_key,
49*6777b538SAndroid Build Coastguard Worker SecureDnsPolicy secure_dns_policy,
50*6777b538SAndroid Build Coastguard Worker bool require_dns_https_alpn)
51*6777b538SAndroid Build Coastguard Worker : QuicSessionKey(
52*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/1103350): Handle non-boolean privacy modes.
53*6777b538SAndroid Build Coastguard Worker quic::QuicServerId(host, port, privacy_mode != PRIVACY_MODE_DISABLED),
54*6777b538SAndroid Build Coastguard Worker proxy_chain,
55*6777b538SAndroid Build Coastguard Worker session_usage,
56*6777b538SAndroid Build Coastguard Worker socket_tag,
57*6777b538SAndroid Build Coastguard Worker network_anonymization_key,
58*6777b538SAndroid Build Coastguard Worker secure_dns_policy,
59*6777b538SAndroid Build Coastguard Worker require_dns_https_alpn) {}
60*6777b538SAndroid Build Coastguard Worker
QuicSessionKey(const quic::QuicServerId & server_id,const ProxyChain & proxy_chain,SessionUsage session_usage,const SocketTag & socket_tag,const NetworkAnonymizationKey & network_anonymization_key,SecureDnsPolicy secure_dns_policy,bool require_dns_https_alpn)61*6777b538SAndroid Build Coastguard Worker QuicSessionKey::QuicSessionKey(
62*6777b538SAndroid Build Coastguard Worker const quic::QuicServerId& server_id,
63*6777b538SAndroid Build Coastguard Worker const ProxyChain& proxy_chain,
64*6777b538SAndroid Build Coastguard Worker SessionUsage session_usage,
65*6777b538SAndroid Build Coastguard Worker const SocketTag& socket_tag,
66*6777b538SAndroid Build Coastguard Worker const NetworkAnonymizationKey& network_anonymization_key,
67*6777b538SAndroid Build Coastguard Worker SecureDnsPolicy secure_dns_policy,
68*6777b538SAndroid Build Coastguard Worker bool require_dns_https_alpn)
69*6777b538SAndroid Build Coastguard Worker : server_id_(server_id),
70*6777b538SAndroid Build Coastguard Worker proxy_chain_(proxy_chain),
71*6777b538SAndroid Build Coastguard Worker session_usage_(session_usage),
72*6777b538SAndroid Build Coastguard Worker socket_tag_(socket_tag),
73*6777b538SAndroid Build Coastguard Worker network_anonymization_key_(
74*6777b538SAndroid Build Coastguard Worker NetworkAnonymizationKey::IsPartitioningEnabled()
75*6777b538SAndroid Build Coastguard Worker ? network_anonymization_key
76*6777b538SAndroid Build Coastguard Worker : NetworkAnonymizationKey()),
77*6777b538SAndroid Build Coastguard Worker secure_dns_policy_(secure_dns_policy),
78*6777b538SAndroid Build Coastguard Worker require_dns_https_alpn_(require_dns_https_alpn) {}
79*6777b538SAndroid Build Coastguard Worker
80*6777b538SAndroid Build Coastguard Worker QuicSessionKey::QuicSessionKey(const QuicSessionKey& other) = default;
81*6777b538SAndroid Build Coastguard Worker
operator <(const QuicSessionKey & other) const82*6777b538SAndroid Build Coastguard Worker bool QuicSessionKey::operator<(const QuicSessionKey& other) const {
83*6777b538SAndroid Build Coastguard Worker return std::tie(server_id_, proxy_chain_, session_usage_, socket_tag_,
84*6777b538SAndroid Build Coastguard Worker network_anonymization_key_, secure_dns_policy_,
85*6777b538SAndroid Build Coastguard Worker require_dns_https_alpn_) <
86*6777b538SAndroid Build Coastguard Worker std::tie(other.server_id_, other.proxy_chain_, other.session_usage_,
87*6777b538SAndroid Build Coastguard Worker other.socket_tag_, other.network_anonymization_key_,
88*6777b538SAndroid Build Coastguard Worker other.secure_dns_policy_, other.require_dns_https_alpn_);
89*6777b538SAndroid Build Coastguard Worker }
operator ==(const QuicSessionKey & other) const90*6777b538SAndroid Build Coastguard Worker bool QuicSessionKey::operator==(const QuicSessionKey& other) const {
91*6777b538SAndroid Build Coastguard Worker return server_id_ == other.server_id_ && proxy_chain_ == other.proxy_chain_ &&
92*6777b538SAndroid Build Coastguard Worker session_usage_ == other.session_usage_ &&
93*6777b538SAndroid Build Coastguard Worker socket_tag_ == other.socket_tag_ &&
94*6777b538SAndroid Build Coastguard Worker network_anonymization_key_ == other.network_anonymization_key_ &&
95*6777b538SAndroid Build Coastguard Worker secure_dns_policy_ == other.secure_dns_policy_ &&
96*6777b538SAndroid Build Coastguard Worker require_dns_https_alpn_ == other.require_dns_https_alpn_;
97*6777b538SAndroid Build Coastguard Worker }
98*6777b538SAndroid Build Coastguard Worker
CanUseForAliasing(const QuicSessionKey & other) const99*6777b538SAndroid Build Coastguard Worker bool QuicSessionKey::CanUseForAliasing(const QuicSessionKey& other) const {
100*6777b538SAndroid Build Coastguard Worker return server_id_.privacy_mode_enabled() ==
101*6777b538SAndroid Build Coastguard Worker other.server_id_.privacy_mode_enabled() &&
102*6777b538SAndroid Build Coastguard Worker socket_tag_ == other.socket_tag_ &&
103*6777b538SAndroid Build Coastguard Worker proxy_chain_ == other.proxy_chain_ &&
104*6777b538SAndroid Build Coastguard Worker session_usage_ == other.session_usage_ &&
105*6777b538SAndroid Build Coastguard Worker network_anonymization_key_ == other.network_anonymization_key_ &&
106*6777b538SAndroid Build Coastguard Worker secure_dns_policy_ == other.secure_dns_policy_ &&
107*6777b538SAndroid Build Coastguard Worker require_dns_https_alpn_ == other.require_dns_https_alpn_;
108*6777b538SAndroid Build Coastguard Worker }
109*6777b538SAndroid Build Coastguard Worker
110*6777b538SAndroid Build Coastguard Worker } // namespace net
111