1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 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_DNS_DNS_SESSION_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_DNS_DNS_SESSION_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/memory/ref_counted.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/memory/weak_ptr.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 14*6777b538SAndroid Build Coastguard Worker #include "net/base/rand_callback.h" 15*6777b538SAndroid Build Coastguard Worker #include "net/dns/dns_config.h" 16*6777b538SAndroid Build Coastguard Worker #include "net/dns/dns_udp_tracker.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace net { 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker class NetLog; 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker // Session parameters and state shared between DnsTransactions for a specific 23*6777b538SAndroid Build Coastguard Worker // instance/version of a DnsConfig. Also may be used as a key handle for 24*6777b538SAndroid Build Coastguard Worker // per-session state stored elsewhere, e.g. in ResolveContext. A new DnsSession 25*6777b538SAndroid Build Coastguard Worker // should be created for each new DnsConfig for DnsTransactions to be based on 26*6777b538SAndroid Build Coastguard Worker // that new configuration. 27*6777b538SAndroid Build Coastguard Worker // 28*6777b538SAndroid Build Coastguard Worker // Ref-counted so that DnsTransactions can keep working in absence of 29*6777b538SAndroid Build Coastguard Worker // DnsClient or continue operating on the same session after DnsClient has moved 30*6777b538SAndroid Build Coastguard Worker // to a new DnsConfig/DnsSession. 31*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE DnsSession : public base::RefCounted<DnsSession> { 32*6777b538SAndroid Build Coastguard Worker public: 33*6777b538SAndroid Build Coastguard Worker typedef base::RepeatingCallback<int()> RandCallback; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker DnsSession(const DnsConfig& config, 36*6777b538SAndroid Build Coastguard Worker const RandIntCallback& rand_int_callback, 37*6777b538SAndroid Build Coastguard Worker NetLog* net_log); 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker DnsSession(const DnsSession&) = delete; 40*6777b538SAndroid Build Coastguard Worker DnsSession& operator=(const DnsSession&) = delete; 41*6777b538SAndroid Build Coastguard Worker config()42*6777b538SAndroid Build Coastguard Worker const DnsConfig& config() const { return config_; } udp_tracker()43*6777b538SAndroid Build Coastguard Worker DnsUdpTracker* udp_tracker() { return &udp_tracker_; } net_log()44*6777b538SAndroid Build Coastguard Worker NetLog* net_log() const { return net_log_; } 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker // Return the next random query ID. 47*6777b538SAndroid Build Coastguard Worker uint16_t NextQueryId() const; 48*6777b538SAndroid Build Coastguard Worker GetWeakPtr()49*6777b538SAndroid Build Coastguard Worker base::WeakPtr<DnsSession> GetWeakPtr() { 50*6777b538SAndroid Build Coastguard Worker return weak_ptr_factory_.GetWeakPtr(); 51*6777b538SAndroid Build Coastguard Worker } 52*6777b538SAndroid Build Coastguard Worker GetWeakPtr()53*6777b538SAndroid Build Coastguard Worker base::WeakPtr<const DnsSession> GetWeakPtr() const { 54*6777b538SAndroid Build Coastguard Worker return weak_ptr_factory_.GetWeakPtr(); 55*6777b538SAndroid Build Coastguard Worker } 56*6777b538SAndroid Build Coastguard Worker 57*6777b538SAndroid Build Coastguard Worker void InvalidateWeakPtrsForTesting(); 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker private: 60*6777b538SAndroid Build Coastguard Worker friend class base::RefCounted<DnsSession>; 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker ~DnsSession(); 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Worker const DnsConfig config_; 65*6777b538SAndroid Build Coastguard Worker DnsUdpTracker udp_tracker_; 66*6777b538SAndroid Build Coastguard Worker RandCallback rand_callback_; 67*6777b538SAndroid Build Coastguard Worker raw_ptr<NetLog> net_log_; 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker mutable base::WeakPtrFactory<DnsSession> weak_ptr_factory_{this}; 70*6777b538SAndroid Build Coastguard Worker }; 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker } // namespace net 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker #endif // NET_DNS_DNS_SESSION_H_ 75