Commit 0e534a80 authored by tfarina's avatar tfarina Committed by Commit bot

net: add a convenience getter accessor for dns Header to DnsQuery

It helps to simplify the code in three places that were doing the
ugly reinterpret_cast.

BUG=None
TEST=net_unittests --gtest_filter=DnsQuery*
R=pauljensen@chromium.org

Review URL: https://codereview.chromium.org/1546623002

Cr-Commit-Position: refs/heads/master@{#367151}
parent e3304b7e
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
#include "net/dns/dns_query.h" #include "net/dns/dns_query.h"
#include <limits>
#include "base/big_endian.h" #include "base/big_endian.h"
#include "base/sys_byteorder.h" #include "base/sys_byteorder.h"
#include "net/base/io_buffer.h" #include "net/base/io_buffer.h"
...@@ -25,15 +23,13 @@ DnsQuery::DnsQuery(uint16_t id, const base::StringPiece& qname, uint16_t qtype) ...@@ -25,15 +23,13 @@ DnsQuery::DnsQuery(uint16_t id, const base::StringPiece& qname, uint16_t qtype)
size_t question_size = qname_size_ + sizeof(uint16_t) + sizeof(uint16_t); size_t question_size = qname_size_ + sizeof(uint16_t) + sizeof(uint16_t);
io_buffer_ = new IOBufferWithSize(sizeof(dns_protocol::Header) + io_buffer_ = new IOBufferWithSize(sizeof(dns_protocol::Header) +
question_size); question_size);
dns_protocol::Header* header = *header() = {};
reinterpret_cast<dns_protocol::Header*>(io_buffer_->data()); header()->id = base::HostToNet16(id);
memset(header, 0, sizeof(dns_protocol::Header)); header()->flags = base::HostToNet16(dns_protocol::kFlagRD);
header->id = base::HostToNet16(id); header()->qdcount = base::HostToNet16(1);
header->flags = base::HostToNet16(dns_protocol::kFlagRD);
header->qdcount = base::HostToNet16(1);
// Write question section after the header. // Write question section after the header.
base::BigEndianWriter writer(reinterpret_cast<char*>(header + 1), base::BigEndianWriter writer(reinterpret_cast<char*>(header() + 1),
question_size); question_size);
writer.WriteBytes(qname.data(), qname.size()); writer.WriteBytes(qname.data(), qname.size());
writer.WriteU16(qtype); writer.WriteU16(qtype);
...@@ -70,20 +66,20 @@ base::StringPiece DnsQuery::question() const { ...@@ -70,20 +66,20 @@ base::StringPiece DnsQuery::question() const {
qname_size_ + sizeof(uint16_t) + sizeof(uint16_t)); qname_size_ + sizeof(uint16_t) + sizeof(uint16_t));
} }
void DnsQuery::set_flags(uint16_t flags) {
header()->flags = flags;
}
DnsQuery::DnsQuery(const DnsQuery& orig, uint16_t id) { DnsQuery::DnsQuery(const DnsQuery& orig, uint16_t id) {
qname_size_ = orig.qname_size_; qname_size_ = orig.qname_size_;
io_buffer_ = new IOBufferWithSize(orig.io_buffer()->size()); io_buffer_ = new IOBufferWithSize(orig.io_buffer()->size());
memcpy(io_buffer_.get()->data(), orig.io_buffer()->data(), memcpy(io_buffer_.get()->data(), orig.io_buffer()->data(),
io_buffer_.get()->size()); io_buffer_.get()->size());
dns_protocol::Header* header = header()->id = base::HostToNet16(id);
reinterpret_cast<dns_protocol::Header*>(io_buffer_->data());
header->id = base::HostToNet16(id);
} }
void DnsQuery::set_flags(uint16_t flags) { dns_protocol::Header* DnsQuery::header() {
dns_protocol::Header* header = return reinterpret_cast<dns_protocol::Header*>(io_buffer_->data());
reinterpret_cast<dns_protocol::Header*>(io_buffer_->data());
header->flags = flags;
} }
} // namespace net } // namespace net
...@@ -16,6 +16,10 @@ ...@@ -16,6 +16,10 @@
namespace net { namespace net {
namespace dns_protocol {
struct Header;
}
class IOBufferWithSize; class IOBufferWithSize;
// Represents on-the-wire DNS query message as an object. // Represents on-the-wire DNS query message as an object.
...@@ -47,6 +51,9 @@ class NET_EXPORT_PRIVATE DnsQuery { ...@@ -47,6 +51,9 @@ class NET_EXPORT_PRIVATE DnsQuery {
private: private:
DnsQuery(const DnsQuery& orig, uint16_t id); DnsQuery(const DnsQuery& orig, uint16_t id);
// Convenience for header access.
dns_protocol::Header* header();
// Size of the DNS name (*NOT* hostname) we are trying to resolve; used // Size of the DNS name (*NOT* hostname) we are trying to resolve; used
// to calculate offsets. // to calculate offsets.
size_t qname_size_; size_t qname_size_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment