| Index: net/dns/dns_transaction.h
|
| diff --git a/net/dns/dns_transaction.h b/net/dns/dns_transaction.h
|
| index c1261932547b59973169b400841304e2928f4cce..d4078f03f0ee0f0aaf1b4e8900c14d31fd0dd3b6 100644
|
| --- a/net/dns/dns_transaction.h
|
| +++ b/net/dns/dns_transaction.h
|
| @@ -6,12 +6,10 @@
|
| #define NET_DNS_DNS_TRANSACTION_H_
|
| #pragma once
|
|
|
| -#include <set>
|
| #include <string>
|
| -#include <utility>
|
| #include <vector>
|
|
|
| -#include "base/gtest_prod_util.h"
|
| +#include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/timer.h"
|
| #include "base/threading/non_thread_safe.h"
|
| @@ -23,70 +21,39 @@
|
|
|
| namespace net {
|
|
|
| -class ClientSocketFactory;
|
| class DatagramClientSocket;
|
| class DnsQuery;
|
| class DnsResponse;
|
| +class DnsSession;
|
|
|
| -// Performs (with fixed retries) a single asynchronous DNS transaction,
|
| +// Performs a single asynchronous DNS transaction over UDP,
|
| // which consists of sending out a DNS query, waiting for a response, and
|
| -// parsing and returning the IP addresses that it matches.
|
| +// returning the response that it matches.
|
| class NET_EXPORT_PRIVATE DnsTransaction :
|
| NON_EXPORTED_BASE(public base::NonThreadSafe) {
|
| public:
|
| - typedef std::pair<std::string, uint16> Key;
|
| -
|
| - // Interface that should be implemented by DnsTransaction consumers and
|
| - // passed to the |Start| method to be notified when the transaction has
|
| - // completed.
|
| - class NET_EXPORT_PRIVATE Delegate {
|
| - public:
|
| - Delegate();
|
| - virtual ~Delegate();
|
| -
|
| - // A consumer of DnsTransaction should override |OnTransactionComplete|
|
| - // and call |set_delegate(this)|. The method will be called once the
|
| - // resolution has completed, results passed in as arguments.
|
| - virtual void OnTransactionComplete(
|
| - int result,
|
| - const DnsTransaction* transaction,
|
| - const IPAddressList& ip_addresses);
|
| -
|
| - private:
|
| - friend class DnsTransaction;
|
| -
|
| - void Attach(DnsTransaction* transaction);
|
| - void Detach(DnsTransaction* transaction);
|
| -
|
| - std::set<DnsTransaction*> registered_transactions_;
|
| + typedef base::Callback<void(DnsTransaction*, int)> ResultCallback;
|
| +
|
| + // Create new transaction using the parameters and state in |session|.
|
| + // Issues query for name |qname| (in DNS format) type |qtype| and class IN.
|
| + // Calls |callback| on completion or timeout.
|
| + // TODO(szym): change dependency to (IPEndPoint, Socket, DnsQuery, callback)
|
| + DnsTransaction(DnsSession* session,
|
| + const base::StringPiece& qname,
|
| + uint16 qtype,
|
| + const ResultCallback& callback,
|
| + const BoundNetLog& source_net_log);
|
| + ~DnsTransaction();
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(Delegate);
|
| - };
|
| + const DnsQuery* query() const { return query_.get(); }
|
|
|
| - // |dns_server| is the address of the DNS server, |dns_name| is the
|
| - // hostname (in DNS format) to be resolved, |query_type| is the type of
|
| - // the query, either kDNS_A or kDNS_AAAA, |rand_int| is the PRNG used for
|
| - // generating DNS query.
|
| - DnsTransaction(const IPEndPoint& dns_server,
|
| - const std::string& dns_name,
|
| - uint16 query_type,
|
| - const RandIntCallback& rand_int,
|
| - ClientSocketFactory* socket_factory,
|
| - const BoundNetLog& source_net_log,
|
| - NetLog* net_log);
|
| - ~DnsTransaction();
|
| - void SetDelegate(Delegate* delegate);
|
| - const Key& key() const { return key_; }
|
| + const DnsResponse* response() const { return response_.get(); }
|
|
|
| // Starts the resolution process. Will return ERR_IO_PENDING and will
|
| // notify the caller via |delegate|. Should only be called once.
|
| int Start();
|
|
|
| private:
|
| - FRIEND_TEST_ALL_PREFIXES(DnsTransactionTest, FirstTimeoutTest);
|
| - FRIEND_TEST_ALL_PREFIXES(DnsTransactionTest, SecondTimeoutTest);
|
| - FRIEND_TEST_ALL_PREFIXES(DnsTransactionTest, ThirdTimeoutTest);
|
| -
|
| enum State {
|
| STATE_CONNECT,
|
| STATE_CONNECT_COMPLETE,
|
| @@ -114,26 +81,17 @@ class NET_EXPORT_PRIVATE DnsTransaction :
|
| void RevokeTimer();
|
| void OnTimeout();
|
|
|
| - // This is to be used by unit tests only.
|
| - void set_timeouts_ms(const std::vector<base::TimeDelta>& timeouts_ms);
|
| -
|
| - const IPEndPoint dns_server_;
|
| - Key key_;
|
| - IPAddressList ip_addresses_;
|
| - Delegate* delegate_;
|
| -
|
| + scoped_refptr<DnsSession> session_;
|
| + IPEndPoint dns_server_;
|
| scoped_ptr<DnsQuery> query_;
|
| + ResultCallback callback_;
|
| scoped_ptr<DnsResponse> response_;
|
| scoped_ptr<DatagramClientSocket> socket_;
|
|
|
| // Number of retry attempts so far.
|
| - size_t attempts_;
|
| -
|
| - // Timeouts in milliseconds.
|
| - std::vector<base::TimeDelta> timeouts_ms_;
|
| + int attempts_;
|
|
|
| State next_state_;
|
| - ClientSocketFactory* socket_factory_;
|
| base::OneShotTimer<DnsTransaction> timer_;
|
| OldCompletionCallbackImpl<DnsTransaction> io_callback_;
|
|
|
|
|