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

Unified Diff: net/base/dns_query.cc

Issue 6995088: Break the dependency of DnsQuery and DnsResponse from AddressList (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment. Created 9 years, 6 months 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
Index: net/base/dns_query.cc
diff --git a/net/base/dns_query.cc b/net/base/dns_query.cc
index ba7915000966912778b6e3d0fb0d1829610dbfc0..cbc1e82dbc3a4b6e3d9138fce017821dbf45ba6b 100644
--- a/net/base/dns_query.cc
+++ b/net/base/dns_query.cc
@@ -7,7 +7,6 @@
#include <string>
#include "base/rand_util.h"
-#include "net/base/address_family.h"
#include "net/base/dns_util.h"
namespace net {
@@ -19,16 +18,8 @@ void PackUint16BE(char buf[2], uint16 v) {
buf[1] = v & 0xff;
}
-uint16 QTypeFromAddressFamily(AddressFamily address_family) {
- switch (address_family) {
- case ADDRESS_FAMILY_IPV4:
- return kDNS_A;
- case ADDRESS_FAMILY_IPV6:
- return kDNS_AAAA;
- default:
- NOTREACHED() << "Bad address family";
- return kDNS_A;
- }
+uint16 UnpackUint16BE(char buf[2]) {
+ return static_cast<uint8>(buf[0]) << 8 | static_cast<uint8>(buf[1]);
}
} // namespace
@@ -42,70 +33,61 @@ uint16 QTypeFromAddressFamily(AddressFamily address_family) {
// DnsQuery construction.
static const char kHeader[] = {0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-static const size_t kHeaderLen = arraysize(kHeader);
+static const size_t kHeaderSize = arraysize(kHeader);
-DnsQuery::DnsQuery(const std::string& hostname,
- AddressFamily address_family,
- int port)
- : port_(port),
- id_(0),
- qtype_(QTypeFromAddressFamily(address_family)),
- hostname_(hostname) {
- std::string qname;
- if (!net::DNSDomainFromDot(hostname, &qname))
- return;
+DnsQuery::DnsQuery(const std::string& dns_name, uint16 qtype)
+ : dns_name_size_(dns_name.size()) {
+ DCHECK(DnsResponseBuffer(reinterpret_cast<const uint8*>(dns_name.c_str()),
+ dns_name.size()).DNSName(NULL));
+ DCHECK(qtype == kDNS_A || qtype == kDNS_AAAA);
- size_t query_size = kHeaderLen + qname.size() +
- sizeof(qtype_) + sizeof(kClassIN);
-
- io_buffer_ = new IOBufferWithSize(query_size);
+ io_buffer_ = new IOBufferWithSize(kHeaderSize + question_size());
int byte_offset = 0;
char* buffer_head = io_buffer_->data();
- memcpy(&buffer_head[byte_offset], kHeader, kHeaderLen);
- byte_offset += kHeaderLen;
- memcpy(&buffer_head[byte_offset], &qname[0], qname.size());
- byte_offset += qname.size();
- PackUint16BE(&buffer_head[byte_offset], qtype_);
- byte_offset += sizeof(qtype_);
+ memcpy(&buffer_head[byte_offset], kHeader, kHeaderSize);
+ byte_offset += kHeaderSize;
+ memcpy(&buffer_head[byte_offset], &dns_name[0], dns_name_size_);
+ byte_offset += dns_name_size_;
+ PackUint16BE(&buffer_head[byte_offset], qtype);
+ byte_offset += sizeof(qtype);
PackUint16BE(&buffer_head[byte_offset], kClassIN);
-
- // Randomize ID, first two bytes.
- id_ = base::RandUint64() & 0xffff;
- PackUint16BE(&buffer_head[0], id_);
+ RandomizeId();
}
-DnsQuery::~DnsQuery() {
+DnsQuery::DnsQuery(const DnsQuery& rhs) : dns_name_size_(rhs.dns_name_size_) {
+ io_buffer_ = new IOBufferWithSize(rhs.io_buffer()->size());
+ memcpy(io_buffer_->data(), rhs.io_buffer()->data(), rhs.io_buffer()->size());
+ RandomizeId();
}
-int DnsQuery::port() const {
- DCHECK(IsValid());
- return port_;
+DnsQuery::~DnsQuery() {
}
uint16 DnsQuery::id() const {
- DCHECK(IsValid());
- return id_;
+ return UnpackUint16BE(&io_buffer_->data()[0]);
}
uint16 DnsQuery::qtype() const {
- DCHECK(IsValid());
- return qtype_;
+ return UnpackUint16BE(&io_buffer_->data()[kHeaderSize + dns_name_size_]);
+}
+
+DnsQuery* DnsQuery::CloneWithNewId() const {
+ return new DnsQuery(*this);
}
-AddressFamily DnsQuery::address_family() const {
- DCHECK(IsValid());
- return address_family_;
+size_t DnsQuery::question_size() const {
+ return dns_name_size_ // QNAME
+ + sizeof(uint16) // QTYPE
+ + sizeof(uint16); // QCLASS
}
-const std::string& DnsQuery::hostname() const {
- DCHECK(IsValid());
- return hostname_;
+const char* DnsQuery::question_data() const {
+ return &io_buffer_->data()[kHeaderSize];
}
-IOBufferWithSize* DnsQuery::io_buffer() const {
- DCHECK(IsValid());
- return io_buffer_.get();
+void DnsQuery::RandomizeId() {
+ PackUint16BE(&io_buffer_->data()[0], base::RandUint64() & 0xffff);
}
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698