OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cloud_print/gcp20/prototype/dns_response_builder.h" | 5 #include "cloud_print/gcp20/prototype/dns_response_builder.h" |
6 | 6 |
| 7 #include "base/big_endian.h" |
7 #include "base/logging.h" | 8 #include "base/logging.h" |
8 #include "net/base/big_endian.h" | |
9 #include "net/base/dns_util.h" | 9 #include "net/base/dns_util.h" |
10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
11 #include "net/base/ip_endpoint.h" | 11 #include "net/base/ip_endpoint.h" |
12 #include "net/dns/dns_response.h" | 12 #include "net/dns/dns_response.h" |
13 | 13 |
14 namespace { | 14 namespace { |
15 | 15 |
16 uint16 klass = net::dns_protocol::kClassIN; | 16 uint16 klass = net::dns_protocol::kClassIN; |
17 | 17 |
18 } // namespace | 18 } // namespace |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 uint16 weight, | 54 uint16 weight, |
55 uint16 http_port, | 55 uint16 http_port, |
56 const std::string& service_domain_name, | 56 const std::string& service_domain_name, |
57 bool answer) { | 57 bool answer) { |
58 std::string domain_name; | 58 std::string domain_name; |
59 bool success = net::DNSDomainFromDot(service_domain_name, &domain_name); | 59 bool success = net::DNSDomainFromDot(service_domain_name, &domain_name); |
60 DCHECK(success); | 60 DCHECK(success); |
61 | 61 |
62 std::vector<uint8> rdata(2 + 2 + 2 + domain_name.size()); | 62 std::vector<uint8> rdata(2 + 2 + 2 + domain_name.size()); |
63 | 63 |
64 net::BigEndianWriter writer(rdata.data(), rdata.size()); | 64 base::BigEndianWriter writer(reinterpret_cast<char*>(rdata.data()), |
| 65 rdata.size()); |
65 success = writer.WriteU16(priority) && | 66 success = writer.WriteU16(priority) && |
66 writer.WriteU16(weight) && | 67 writer.WriteU16(weight) && |
67 writer.WriteU16(http_port) && | 68 writer.WriteU16(http_port) && |
68 writer.WriteBytes(domain_name.data(), domain_name.size()); | 69 writer.WriteBytes(domain_name.data(), domain_name.size()); |
69 DCHECK(success); | 70 DCHECK(success); |
70 DCHECK_EQ(writer.remaining(), 0); // For warranty of correct size allocation. | 71 DCHECK_EQ(writer.remaining(), 0); // For warranty of correct size allocation. |
71 | 72 |
72 AddResponse(service_name, net::dns_protocol::kTypeSRV, ttl, | 73 AddResponse(service_name, net::dns_protocol::kTypeSRV, ttl, |
73 std::string(rdata.begin(), rdata.end()), answer); | 74 std::string(rdata.begin(), rdata.end()), answer); |
74 } | 75 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 iter->rdata.size(); | 130 iter->rdata.size(); |
130 } | 131 } |
131 | 132 |
132 if (responses_.empty()) | 133 if (responses_.empty()) |
133 return NULL; // No answer. | 134 return NULL; // No answer. |
134 | 135 |
135 DCHECK_EQ(static_cast<size_t>(header_.ancount + header_.arcount), | 136 DCHECK_EQ(static_cast<size_t>(header_.ancount + header_.arcount), |
136 responses_.size()); | 137 responses_.size()); |
137 scoped_refptr<net::IOBufferWithSize> message( | 138 scoped_refptr<net::IOBufferWithSize> message( |
138 new net::IOBufferWithSize(static_cast<int>(size))); | 139 new net::IOBufferWithSize(static_cast<int>(size))); |
139 net::BigEndianWriter writer(message->data(), message->size()); | 140 base::BigEndianWriter writer(message->data(), message->size()); |
140 bool success = writer.WriteU16(header_.id) && | 141 bool success = writer.WriteU16(header_.id) && |
141 writer.WriteU16(header_.flags) && | 142 writer.WriteU16(header_.flags) && |
142 writer.WriteU16(header_.qdcount) && | 143 writer.WriteU16(header_.qdcount) && |
143 writer.WriteU16(header_.ancount) && | 144 writer.WriteU16(header_.ancount) && |
144 writer.WriteU16(header_.nscount) && | 145 writer.WriteU16(header_.nscount) && |
145 writer.WriteU16(header_.arcount); | 146 writer.WriteU16(header_.arcount); |
146 DCHECK(success); | 147 DCHECK(success); |
147 | 148 |
148 std::string name_in_dns_format; | 149 std::string name_in_dns_format; |
149 for (std::vector<DnsResponseRecord>::const_iterator iter = responses_.begin(); | 150 for (std::vector<DnsResponseRecord>::const_iterator iter = responses_.begin(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 | 182 |
182 if (answer) { | 183 if (answer) { |
183 responses_.insert(responses_.begin() + header_.ancount, response); | 184 responses_.insert(responses_.begin() + header_.ancount, response); |
184 ++header_.ancount; | 185 ++header_.ancount; |
185 } else { | 186 } else { |
186 responses_.push_back(response); | 187 responses_.push_back(response); |
187 ++header_.arcount; | 188 ++header_.arcount; |
188 } | 189 } |
189 } | 190 } |
190 | 191 |
OLD | NEW |