| 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);
|
| };
|
|
|
|
|