Index: net/base/dns_query.cc |
=================================================================== |
--- net/base/dns_query.cc (revision 87811) |
+++ net/base/dns_query.cc (working copy) |
@@ -1,108 +0,0 @@ |
-// Copyright (c) 2011 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. |
- |
-#include "net/base/dns_query.h" |
- |
-#include <string> |
- |
-#include "base/rand_util.h" |
-#include "net/base/address_family.h" |
-#include "net/base/dns_util.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-void PackUint16BE(char buf[2], uint16 v) { |
- buf[0] = v >> 8; |
- 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; |
- } |
-} |
- |
-} // namespace |
- |
-// DNS query consists of a 12-byte header followed by a question section. |
-// For details, see RFC 1035 section 4.1.1. This header template sets RD |
-// bit, which directs the name server to pursue query recursively, and sets |
-// the QDCOUNT to 1, meaning the question section has a single entry. The |
-// first two bytes of the header form a 16-bit random query ID to be copied |
-// in the corresponding reply by the name server -- randomized during |
-// 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); |
- |
-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; |
- |
- size_t query_size = kHeaderLen + qname.size() + |
- sizeof(qtype_) + sizeof(kClassIN); |
- |
- io_buffer_ = new IOBufferWithSize(query_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_); |
- PackUint16BE(&buffer_head[byte_offset], kClassIN); |
- |
- // Randomize ID, first two bytes. |
- id_ = base::RandUint64() & 0xffff; |
- PackUint16BE(&buffer_head[0], id_); |
-} |
- |
-int DnsQuery::port() const { |
- DCHECK(IsValid()); |
- return port_; |
-} |
- |
-uint16 DnsQuery::id() const { |
- DCHECK(IsValid()); |
- return id_; |
-} |
- |
-uint16 DnsQuery::qtype() const { |
- DCHECK(IsValid()); |
- return qtype_; |
-} |
- |
-AddressFamily DnsQuery::address_family() const { |
- DCHECK(IsValid()); |
- return address_family_; |
-} |
- |
-const std::string& DnsQuery::hostname() const { |
- DCHECK(IsValid()); |
- return hostname_; |
-} |
- |
-IOBufferWithSize* DnsQuery::io_buffer() const { |
- DCHECK(IsValid()); |
- return io_buffer_.get(); |
-} |
- |
-} // namespace net |