Index: net/dns/dns_query.h |
=================================================================== |
--- net/dns/dns_query.h (revision 113383) |
+++ net/dns/dns_query.h (working copy) |
@@ -6,42 +6,54 @@ |
#define NET_DNS_DNS_QUERY_H_ |
#pragma once |
-#include "base/basictypes.h" |
+#include <string> |
+ |
#include "base/memory/ref_counted.h" |
-#include "base/string_piece.h" |
#include "net/base/net_export.h" |
+#include "net/base/rand_callback.h" |
namespace net { |
class IOBufferWithSize; |
// Represents on-the-wire DNS query message as an object. |
-// TODO(szym): add support for the OPT pseudo-RR (EDNS0/DNSSEC). |
class NET_EXPORT_PRIVATE DnsQuery { |
public: |
// Constructs a query message from |qname| which *MUST* be in a valid |
- // DNS name format, and |qtype|. The qclass is set to IN. |
- DnsQuery(uint16 id, const base::StringPiece& qname, uint16 qtype); |
+ // DNS name format, and |qtype| which must be either kDNS_A or kDNS_AAAA. |
+ |
+ // Every generated object has a random ID, hence two objects generated |
+ // with the same set of constructor arguments are generally not equal; |
+ // there is a 1/2^16 chance of them being equal due to size of |id_|. |
+ DnsQuery(const std::string& qname, |
+ uint16 qtype, |
+ const RandIntCallback& rand_int_cb); |
~DnsQuery(); |
- // Clones |this| verbatim, with ID field of the header set to |id|. |
- DnsQuery* CloneWithNewId(uint16 id) const; |
+ // Clones |this| verbatim, with ID field of the header regenerated. |
+ DnsQuery* CloneWithNewId() const; |
// DnsQuery field accessors. |
uint16 id() const; |
- base::StringPiece qname() const; |
uint16 qtype() const; |
- // Returns the Question section of the query. Used when matching the |
- // response. |
- base::StringPiece question() const; |
+ // Returns the size of the Question section of the query. Used when |
+ // matching the response. |
+ size_t question_size() const; |
+ // Returns pointer to the Question section of the query. Used when |
+ // matching the response. |
+ const char* question_data() const; |
+ |
// IOBuffer accessor to be used for writing out the query. |
IOBufferWithSize* io_buffer() const { return io_buffer_; } |
private: |
- DnsQuery(const DnsQuery& orig, uint16 id); |
+ const std::string qname() const; |
+ // Randomizes ID field of the query message. |
+ void RandomizeId(); |
+ |
// Size of the DNS name (*NOT* hostname) we are trying to resolve; used |
// to calculate offsets. |
size_t qname_size_; |
@@ -49,6 +61,9 @@ |
// Contains query bytes to be consumed by higher level Write() call. |
scoped_refptr<IOBufferWithSize> io_buffer_; |
+ // PRNG function for generating IDs. |
+ RandIntCallback rand_int_cb_; |
+ |
DISALLOW_COPY_AND_ASSIGN(DnsQuery); |
}; |