Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(900)

Unified Diff: net/dns/dns_transaction.h

Issue 8762001: Isolates generic DnsClient from AsyncHostResolver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: retrying to fix status of dns_session.h Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/dns/dns_test_util.cc ('k') | net/dns/dns_transaction.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
« no previous file with comments | « net/dns/dns_test_util.cc ('k') | net/dns/dns_transaction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698