1*6777b538SAndroid Build Coastguard Worker // Copyright 2024 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_SOCKET_CONNECT_JOB_PARAMS_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_SOCKET_CONNECT_JOB_PARAMS_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/memory/scoped_refptr.h" 9*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 10*6777b538SAndroid Build Coastguard Worker #include "third_party/abseil-cpp/absl/types/variant.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker namespace net { 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker class HttpProxySocketParams; 15*6777b538SAndroid Build Coastguard Worker class SOCKSSocketParams; 16*6777b538SAndroid Build Coastguard Worker class TransportSocketParams; 17*6777b538SAndroid Build Coastguard Worker class SSLSocketParams; 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker // Abstraction over the param types for various connect jobs. 20*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE ConnectJobParams { 21*6777b538SAndroid Build Coastguard Worker public: 22*6777b538SAndroid Build Coastguard Worker ConnectJobParams(); 23*6777b538SAndroid Build Coastguard Worker explicit ConnectJobParams(scoped_refptr<HttpProxySocketParams> params); 24*6777b538SAndroid Build Coastguard Worker explicit ConnectJobParams(scoped_refptr<SOCKSSocketParams> params); 25*6777b538SAndroid Build Coastguard Worker explicit ConnectJobParams(scoped_refptr<TransportSocketParams> params); 26*6777b538SAndroid Build Coastguard Worker explicit ConnectJobParams(scoped_refptr<SSLSocketParams> params); 27*6777b538SAndroid Build Coastguard Worker ~ConnectJobParams(); 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker ConnectJobParams(ConnectJobParams&); 30*6777b538SAndroid Build Coastguard Worker ConnectJobParams& operator=(ConnectJobParams&); 31*6777b538SAndroid Build Coastguard Worker ConnectJobParams(ConnectJobParams&&); 32*6777b538SAndroid Build Coastguard Worker ConnectJobParams& operator=(ConnectJobParams&&); 33*6777b538SAndroid Build Coastguard Worker is_http_proxy()34*6777b538SAndroid Build Coastguard Worker bool is_http_proxy() const { 35*6777b538SAndroid Build Coastguard Worker return absl::holds_alternative<scoped_refptr<HttpProxySocketParams>>( 36*6777b538SAndroid Build Coastguard Worker params_); 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker is_socks()39*6777b538SAndroid Build Coastguard Worker bool is_socks() const { 40*6777b538SAndroid Build Coastguard Worker return absl::holds_alternative<scoped_refptr<SOCKSSocketParams>>(params_); 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker is_transport()43*6777b538SAndroid Build Coastguard Worker bool is_transport() const { 44*6777b538SAndroid Build Coastguard Worker return absl::holds_alternative<scoped_refptr<TransportSocketParams>>( 45*6777b538SAndroid Build Coastguard Worker params_); 46*6777b538SAndroid Build Coastguard Worker } 47*6777b538SAndroid Build Coastguard Worker is_ssl()48*6777b538SAndroid Build Coastguard Worker bool is_ssl() const { 49*6777b538SAndroid Build Coastguard Worker return absl::holds_alternative<scoped_refptr<SSLSocketParams>>(params_); 50*6777b538SAndroid Build Coastguard Worker } 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker // Get lvalue references to the contained params. http_proxy()53*6777b538SAndroid Build Coastguard Worker const scoped_refptr<HttpProxySocketParams>& http_proxy() const { 54*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<HttpProxySocketParams>>(params_); 55*6777b538SAndroid Build Coastguard Worker } socks()56*6777b538SAndroid Build Coastguard Worker const scoped_refptr<SOCKSSocketParams>& socks() const { 57*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<SOCKSSocketParams>>(params_); 58*6777b538SAndroid Build Coastguard Worker } transport()59*6777b538SAndroid Build Coastguard Worker const scoped_refptr<TransportSocketParams>& transport() const { 60*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<TransportSocketParams>>(params_); 61*6777b538SAndroid Build Coastguard Worker } ssl()62*6777b538SAndroid Build Coastguard Worker const scoped_refptr<SSLSocketParams>& ssl() const { 63*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<SSLSocketParams>>(params_); 64*6777b538SAndroid Build Coastguard Worker } 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker // Take params out of this value. take_http_proxy()67*6777b538SAndroid Build Coastguard Worker scoped_refptr<HttpProxySocketParams>&& take_http_proxy() { 68*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<HttpProxySocketParams>>(std::move(params_)); 69*6777b538SAndroid Build Coastguard Worker } take_socks()70*6777b538SAndroid Build Coastguard Worker scoped_refptr<SOCKSSocketParams>&& take_socks() { 71*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<SOCKSSocketParams>>(std::move(params_)); 72*6777b538SAndroid Build Coastguard Worker } take_transport()73*6777b538SAndroid Build Coastguard Worker scoped_refptr<TransportSocketParams>&& take_transport() { 74*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<TransportSocketParams>>(std::move(params_)); 75*6777b538SAndroid Build Coastguard Worker } take_ssl()76*6777b538SAndroid Build Coastguard Worker scoped_refptr<SSLSocketParams>&& take_ssl() { 77*6777b538SAndroid Build Coastguard Worker return get<scoped_refptr<SSLSocketParams>>(std::move(params_)); 78*6777b538SAndroid Build Coastguard Worker } 79*6777b538SAndroid Build Coastguard Worker 80*6777b538SAndroid Build Coastguard Worker private: 81*6777b538SAndroid Build Coastguard Worker absl::variant<scoped_refptr<HttpProxySocketParams>, 82*6777b538SAndroid Build Coastguard Worker scoped_refptr<SOCKSSocketParams>, 83*6777b538SAndroid Build Coastguard Worker scoped_refptr<TransportSocketParams>, 84*6777b538SAndroid Build Coastguard Worker scoped_refptr<SSLSocketParams>> 85*6777b538SAndroid Build Coastguard Worker params_; 86*6777b538SAndroid Build Coastguard Worker }; 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker } // namespace net 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker #endif // NET_SOCKET_CONNECT_JOB_PARAMS_H_ 91