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

Side by Side Diff: net/base/dns_query.cc

Issue 7276014: DnsQuery: changed raw function pointer to callback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Got rid of unnecessary include. Created 9 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/base/dns_query.h ('k') | net/base/dns_query_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/dns_query.h" 5 #include "net/base/dns_query.h"
6 6
7 #include <limits>
7 #include <string> 8 #include <string>
8 9
9 #include "base/rand_util.h" 10 #include "base/rand_util.h"
10 #include "net/base/dns_util.h" 11 #include "net/base/dns_util.h"
11 12
12 namespace net { 13 namespace net {
13 14
14 namespace { 15 namespace {
15 16
16 void PackUint16BE(char buf[2], uint16 v) { 17 void PackUint16BE(char buf[2], uint16 v) {
(...skipping 11 matching lines...) Expand all
28 // For details, see RFC 1035 section 4.1.1. This header template sets RD 29 // For details, see RFC 1035 section 4.1.1. This header template sets RD
29 // bit, which directs the name server to pursue query recursively, and sets 30 // bit, which directs the name server to pursue query recursively, and sets
30 // the QDCOUNT to 1, meaning the question section has a single entry. The 31 // the QDCOUNT to 1, meaning the question section has a single entry. The
31 // first two bytes of the header form a 16-bit random query ID to be copied 32 // first two bytes of the header form a 16-bit random query ID to be copied
32 // in the corresponding reply by the name server -- randomized during 33 // in the corresponding reply by the name server -- randomized during
33 // DnsQuery construction. 34 // DnsQuery construction.
34 static const char kHeader[] = {0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 35 static const char kHeader[] = {0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
35 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
36 static const size_t kHeaderSize = arraysize(kHeader); 37 static const size_t kHeaderSize = arraysize(kHeader);
37 38
38 DnsQuery::DnsQuery(const std::string& dns_name, uint16 qtype, uint64 (*prng)()) 39 DnsQuery::DnsQuery(const std::string& dns_name,
40 uint16 qtype,
41 const RandIntCallback& rand_int)
39 : dns_name_size_(dns_name.size()), 42 : dns_name_size_(dns_name.size()),
40 prng_(prng) { 43 rand_int_(rand_int) {
41 DCHECK(DnsResponseBuffer(reinterpret_cast<const uint8*>(dns_name.c_str()), 44 DCHECK(DnsResponseBuffer(reinterpret_cast<const uint8*>(dns_name.c_str()),
42 dns_name.size()).DNSName(NULL)); 45 dns_name.size()).DNSName(NULL));
43 DCHECK(qtype == kDNS_A || qtype == kDNS_AAAA); 46 DCHECK(qtype == kDNS_A || qtype == kDNS_AAAA);
44 47
45 io_buffer_ = new IOBufferWithSize(kHeaderSize + question_size()); 48 io_buffer_ = new IOBufferWithSize(kHeaderSize + question_size());
46 49
47 int byte_offset = 0; 50 int byte_offset = 0;
48 char* buffer_head = io_buffer_->data(); 51 char* buffer_head = io_buffer_->data();
49 memcpy(&buffer_head[byte_offset], kHeader, kHeaderSize); 52 memcpy(&buffer_head[byte_offset], kHeader, kHeaderSize);
50 byte_offset += kHeaderSize; 53 byte_offset += kHeaderSize;
51 memcpy(&buffer_head[byte_offset], &dns_name[0], dns_name_size_); 54 memcpy(&buffer_head[byte_offset], &dns_name[0], dns_name_size_);
52 byte_offset += dns_name_size_; 55 byte_offset += dns_name_size_;
53 PackUint16BE(&buffer_head[byte_offset], qtype); 56 PackUint16BE(&buffer_head[byte_offset], qtype);
54 byte_offset += sizeof(qtype); 57 byte_offset += sizeof(qtype);
55 PackUint16BE(&buffer_head[byte_offset], kClassIN); 58 PackUint16BE(&buffer_head[byte_offset], kClassIN);
56 RandomizeId(); 59 RandomizeId();
57 } 60 }
58 61
59 DnsQuery::DnsQuery(const DnsQuery& rhs) 62 DnsQuery::DnsQuery(const DnsQuery& rhs)
60 : dns_name_size_(rhs.dns_name_size_), 63 : dns_name_size_(rhs.dns_name_size_),
61 prng_(rhs.prng_) { 64 rand_int_(rhs.rand_int_) {
62 io_buffer_ = new IOBufferWithSize(rhs.io_buffer()->size()); 65 io_buffer_ = new IOBufferWithSize(rhs.io_buffer()->size());
63 memcpy(io_buffer_->data(), rhs.io_buffer()->data(), rhs.io_buffer()->size()); 66 memcpy(io_buffer_->data(), rhs.io_buffer()->data(), rhs.io_buffer()->size());
64 RandomizeId(); 67 RandomizeId();
65 } 68 }
66 69
67 DnsQuery::~DnsQuery() { 70 DnsQuery::~DnsQuery() {
68 } 71 }
69 72
70 uint16 DnsQuery::id() const { 73 uint16 DnsQuery::id() const {
71 return UnpackUint16BE(&io_buffer_->data()[0]); 74 return UnpackUint16BE(&io_buffer_->data()[0]);
(...skipping 11 matching lines...) Expand all
83 return dns_name_size_ // QNAME 86 return dns_name_size_ // QNAME
84 + sizeof(uint16) // QTYPE 87 + sizeof(uint16) // QTYPE
85 + sizeof(uint16); // QCLASS 88 + sizeof(uint16); // QCLASS
86 } 89 }
87 90
88 const char* DnsQuery::question_data() const { 91 const char* DnsQuery::question_data() const {
89 return &io_buffer_->data()[kHeaderSize]; 92 return &io_buffer_->data()[kHeaderSize];
90 } 93 }
91 94
92 void DnsQuery::RandomizeId() { 95 void DnsQuery::RandomizeId() {
93 PackUint16BE(&io_buffer_->data()[0], (*prng_)() & 0xffff); 96 PackUint16BE(&io_buffer_->data()[0], rand_int_.Run(
97 std::numeric_limits<uint16>::min(),
98 std::numeric_limits<uint16>::max()));
94 } 99 }
95 100
96 } // namespace net 101 } // namespace net
OLDNEW
« no previous file with comments | « net/base/dns_query.h ('k') | net/base/dns_query_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698