| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_DNS_DNS_TRANSACTION_H_ |
| #define NET_DNS_DNS_TRANSACTION_H_ |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/callback_forward.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "net/base/net_export.h" |
| |
| namespace net { |
| |
| class BoundNetLog; |
| class DnsResponse; |
| class DnsSession; |
| |
| // DnsTransaction implements a stub DNS resolver as defined in RFC 1034. |
| // The DnsTransaction takes care of retransmissions, name server fallback (or |
| // round-robin), suffix search, and simple response validation ("does it match |
| // the query") to fight poisoning. |
| // |
| // Destroying DnsTransaction cancels the underlying network effort. |
| class NET_EXPORT_PRIVATE DnsTransaction { |
| public: |
| virtual ~DnsTransaction() {} |
| |
| // Returns the original |hostname|. |
| virtual const std::string& GetHostname() const = 0; |
| |
| // Returns the |qtype|. |
| virtual uint16 GetType() const = 0; |
| |
| // Starts the transaction. Returns the net error on synchronous failure or |
| // ERR_IO_PENDING in which case the result will be passed via the callback. |
| // Can be called at most once. |
| virtual int Start() = 0; |
| }; |
| |
| // Creates DnsTransaction which performs asynchronous DNS search. |
| // It does NOT perform caching, aggregation or prioritization of transactions. |
| // |
| // Destroying the factory does NOT affect any already created DnsTransactions. |
| class NET_EXPORT_PRIVATE DnsTransactionFactory { |
| public: |
| // Called with the response or NULL if no matching response was received. |
| // Note that the |GetDottedName()| of the response may be different than the |
| // original |hostname| as a result of suffix search. |
| typedef base::Callback<void(DnsTransaction* transaction, |
| int neterror, |
| const DnsResponse* response)> CallbackType; |
| |
| virtual ~DnsTransactionFactory() {} |
| |
| // Creates DnsTransaction for the given |hostname| and |qtype| (assuming |
| // QCLASS is IN). |hostname| should be in the dotted form. A dot at the end |
| // implies the domain name is fully-qualified and will be exempt from suffix |
| // search. |hostname| should not be an IP literal. |
| // |
| // The transaction will run |callback| upon asynchronous completion. |
| // The |net_log| is used as the parent log. |
| virtual scoped_ptr<DnsTransaction> CreateTransaction( |
| const std::string& hostname, |
| uint16 qtype, |
| const CallbackType& callback, |
| const BoundNetLog& net_log) WARN_UNUSED_RESULT = 0; |
| |
| // Creates a DnsTransactionFactory which creates DnsTransactionImpl using the |
| // |session|. |
| static scoped_ptr<DnsTransactionFactory> CreateFactory( |
| DnsSession* session) WARN_UNUSED_RESULT; |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_DNS_DNS_TRANSACTION_H_ |
| |