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