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

Side by Side Diff: net/dns/record_rdata.cc

Issue 14697022: Cache for mDNS records (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@record_parsed_klassbit
Patch Set: Created 7 years, 7 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "net/dns/record_rdata.h" 5 #include "net/dns/record_rdata.h"
6 6
7 #include "net/base/big_endian.h" 7 #include "net/base/big_endian.h"
8 #include "net/base/dns_util.h" 8 #include "net/base/dns_util.h"
9 #include "net/dns/dns_protocol.h" 9 #include "net/dns/dns_protocol.h"
10 #include "net/dns/dns_response.h" 10 #include "net/dns/dns_response.h"
(...skipping 24 matching lines...) Expand all
35 reader.ReadU16(&rdata->weight_); 35 reader.ReadU16(&rdata->weight_);
36 reader.ReadU16(&rdata->port_); 36 reader.ReadU16(&rdata->port_);
37 37
38 if (!parser.ReadName(data.substr(kSrvRecordMinimumSize).begin(), 38 if (!parser.ReadName(data.substr(kSrvRecordMinimumSize).begin(),
39 &rdata->target_)) 39 &rdata->target_))
40 return scoped_ptr<SrvRecordRdata>(); 40 return scoped_ptr<SrvRecordRdata>();
41 41
42 return rdata.Pass(); 42 return rdata.Pass();
43 } 43 }
44 44
45 uint16 SrvRecordRdata::Type() const {
46 return SrvRecordRdata::kType;
47 }
48
49 bool SrvRecordRdata::IsEqual(const RecordRdata* other) const {
50 if (other->Type() != Type()) return false;
51 const SrvRecordRdata* srv_other = static_cast<const SrvRecordRdata*>(other);
52 return weight_ == srv_other->weight_ &&
53 port_ == srv_other->port_ &&
54 priority_ == srv_other->priority_ &&
55 target_ == srv_other->target_;
56 }
57
58 scoped_ptr<const RecordRdata> SrvRecordRdata::Copy() const {
59 scoped_ptr<SrvRecordRdata> return_value(new SrvRecordRdata);
60
61 return_value->port_ = port_;
62 return_value->weight_ = weight_;
63 return_value->priority_ = priority_;
64 return_value->target_ = target_;
65
66 return scoped_ptr<const RecordRdata>(return_value.Pass());
67 }
68
45 ARecordRdata::ARecordRdata() { 69 ARecordRdata::ARecordRdata() {
46 } 70 }
47 71
48 ARecordRdata::~ARecordRdata() { 72 ARecordRdata::~ARecordRdata() {
49 } 73 }
50 74
51 // static 75 // static
52 scoped_ptr<ARecordRdata> ARecordRdata::Create( 76 scoped_ptr<ARecordRdata> ARecordRdata::Create(
53 const base::StringPiece& data, 77 const base::StringPiece& data,
54 const DnsRecordParser& parser) { 78 const DnsRecordParser& parser) {
55 if (data.size() != kIPv4AddressSize) 79 if (data.size() != kIPv4AddressSize)
56 return scoped_ptr<ARecordRdata>(); 80 return scoped_ptr<ARecordRdata>();
57 81
58 scoped_ptr<ARecordRdata> rdata(new ARecordRdata); 82 scoped_ptr<ARecordRdata> rdata(new ARecordRdata);
59 83
60 rdata->address_.resize(kIPv4AddressSize); 84 rdata->address_.resize(kIPv4AddressSize);
61 for (unsigned i = 0; i < kIPv4AddressSize; ++i) { 85 for (unsigned i = 0; i < kIPv4AddressSize; ++i) {
62 rdata->address_[i] = data[i]; 86 rdata->address_[i] = data[i];
63 } 87 }
64 88
65 return rdata.Pass(); 89 return rdata.Pass();
66 } 90 }
67 91
92 uint16 ARecordRdata::Type() const {
93 return ARecordRdata::kType;
94 }
95
96 bool ARecordRdata::IsEqual(const RecordRdata* other) const {
97 if (other->Type() != Type()) return false;
98 const ARecordRdata* a_other = static_cast<const ARecordRdata*>(other);
99 return address_ == a_other->address_;
100 }
101
102 scoped_ptr<const RecordRdata> ARecordRdata::Copy() const {
103 scoped_ptr<ARecordRdata> return_value(new ARecordRdata);
104
105 return_value->address_ = address_;
106
107 return return_value.PassAs<const RecordRdata>();
108 }
109
110 AAAARecordRdata::AAAARecordRdata() {
111 }
112
113 AAAARecordRdata::~AAAARecordRdata() {
114 }
115
116 // static
117 scoped_ptr<AAAARecordRdata> AAAARecordRdata::Create(
118 const base::StringPiece& data,
119 const DnsRecordParser& parser) {
120 if (data.size() != kIPv6AddressSize)
121 return scoped_ptr<AAAARecordRdata>();
122
123 scoped_ptr<AAAARecordRdata> rdata(new AAAARecordRdata);
124
125 rdata->address_.resize(kIPv6AddressSize);
126 for (unsigned i = 0; i < kIPv6AddressSize; ++i) {
127 rdata->address_[i] = data[i];
128 }
129
130 return rdata.Pass();
131 }
132
133 uint16 AAAARecordRdata::Type() const {
134 return AAAARecordRdata::kType;
135 }
136
137 bool AAAARecordRdata::IsEqual(const RecordRdata* other) const {
138 if (other->Type() != Type()) return false;
139 const AAAARecordRdata* a_other = static_cast<const AAAARecordRdata*>(other);
140 return address_ == a_other->address_;
141 }
142
143 scoped_ptr<const RecordRdata> AAAARecordRdata::Copy() const {
144 scoped_ptr<AAAARecordRdata> return_value(new AAAARecordRdata);
145
146 return_value->address_ = address_;
147
148 return return_value.PassAs<const RecordRdata>();
149 }
150
68 CnameRecordRdata::CnameRecordRdata() { 151 CnameRecordRdata::CnameRecordRdata() {
69 } 152 }
70 153
71 CnameRecordRdata::~CnameRecordRdata() { 154 CnameRecordRdata::~CnameRecordRdata() {
72 } 155 }
73 156
74 // static 157 // static
75 scoped_ptr<CnameRecordRdata> CnameRecordRdata::Create( 158 scoped_ptr<CnameRecordRdata> CnameRecordRdata::Create(
76 const base::StringPiece& data, 159 const base::StringPiece& data,
77 const DnsRecordParser& parser) { 160 const DnsRecordParser& parser) {
78 scoped_ptr<CnameRecordRdata> rdata(new CnameRecordRdata); 161 scoped_ptr<CnameRecordRdata> rdata(new CnameRecordRdata);
79 162
80 if (!parser.ReadName(data.begin(), &rdata->cname_)) 163 if (!parser.ReadName(data.begin(), &rdata->cname_))
81 return scoped_ptr<CnameRecordRdata>(); 164 return scoped_ptr<CnameRecordRdata>();
82 165
83 return rdata.Pass(); 166 return rdata.Pass();
84 } 167 }
85 168
169 uint16 CnameRecordRdata::Type() const {
170 return CnameRecordRdata::kType;
171 }
172
173 bool CnameRecordRdata::IsEqual(const RecordRdata* other) const {
174 if (other->Type() != Type()) return false;
175 const CnameRecordRdata* cname_other =
176 static_cast<const CnameRecordRdata*>(other);
177 return cname_ == cname_other->cname_;
178 }
179
180 scoped_ptr<const RecordRdata> CnameRecordRdata::Copy() const {
181 scoped_ptr<CnameRecordRdata> return_value(new CnameRecordRdata);
182
183 return_value->cname_ = cname_;
184
185 return return_value.PassAs<const RecordRdata>();
186 }
187
86 PtrRecordRdata::PtrRecordRdata() { 188 PtrRecordRdata::PtrRecordRdata() {
87 } 189 }
88 190
89 PtrRecordRdata::~PtrRecordRdata() { 191 PtrRecordRdata::~PtrRecordRdata() {
90 } 192 }
91 193
92 // static 194 // static
93 scoped_ptr<PtrRecordRdata> PtrRecordRdata::Create( 195 scoped_ptr<PtrRecordRdata> PtrRecordRdata::Create(
94 const base::StringPiece& data, 196 const base::StringPiece& data,
95 const DnsRecordParser& parser) { 197 const DnsRecordParser& parser) {
96 scoped_ptr<PtrRecordRdata> rdata(new PtrRecordRdata); 198 scoped_ptr<PtrRecordRdata> rdata(new PtrRecordRdata);
97 199
98 if (!parser.ReadName(data.begin(), &rdata->ptrdomain_)) 200 if (!parser.ReadName(data.begin(), &rdata->ptrdomain_))
99 return scoped_ptr<PtrRecordRdata>(); 201 return scoped_ptr<PtrRecordRdata>();
100 202
101 return rdata.Pass(); 203 return rdata.Pass();
102 } 204 }
103 205
206 uint16 PtrRecordRdata::Type() const {
207 return PtrRecordRdata::kType;
208 }
209
210 bool PtrRecordRdata::IsEqual(const RecordRdata* other) const {
211 if (other->Type() != Type()) return false;
212 const PtrRecordRdata* ptr_other = static_cast<const PtrRecordRdata*>(other);
213 return ptrdomain_ == ptr_other->ptrdomain_;
214 }
215
216 scoped_ptr<const RecordRdata> PtrRecordRdata::Copy() const {
217 scoped_ptr<PtrRecordRdata> return_value(new PtrRecordRdata);
218
219 return_value->ptrdomain_ = ptrdomain_;
220
221 return return_value.PassAs<const RecordRdata>();
222 }
223
104 TxtRecordRdata::TxtRecordRdata() { 224 TxtRecordRdata::TxtRecordRdata() {
105 } 225 }
106 226
107 TxtRecordRdata::~TxtRecordRdata() { 227 TxtRecordRdata::~TxtRecordRdata() {
108 } 228 }
109 229
110 // static 230 // static
111 scoped_ptr<TxtRecordRdata> TxtRecordRdata::Create( 231 scoped_ptr<TxtRecordRdata> TxtRecordRdata::Create(
112 const base::StringPiece& data, 232 const base::StringPiece& data,
113 const DnsRecordParser& parser) { 233 const DnsRecordParser& parser) {
114 scoped_ptr<TxtRecordRdata> rdata(new TxtRecordRdata); 234 scoped_ptr<TxtRecordRdata> rdata(new TxtRecordRdata);
115 235
116 for (size_t i = 0; i < data.size(); ) { 236 for (size_t i = 0; i < data.size(); ) {
117 uint8 length = data[i]; 237 uint8 length = data[i];
118 238
119 if (i + length >= data.size()) 239 if (i + length >= data.size())
120 return scoped_ptr<TxtRecordRdata>(); 240 return scoped_ptr<TxtRecordRdata>();
121 241
122 rdata->texts_.push_back(data.substr(i + 1, length).as_string()); 242 rdata->texts_.push_back(data.substr(i + 1, length).as_string());
123 243
124 // Move to the next string. 244 // Move to the next string.
125 i += length + 1; 245 i += length + 1;
126 } 246 }
127 247
128 return rdata.Pass(); 248 return rdata.Pass();
129 } 249 }
130 250
251 uint16 TxtRecordRdata::Type() const {
252 return TxtRecordRdata::kType;
253 }
254
255 bool TxtRecordRdata::IsEqual(const RecordRdata* other) const {
256 if (other->Type() != Type()) return false;
257 const TxtRecordRdata* txt_other = static_cast<const TxtRecordRdata*>(other);
258
259 return texts_ == txt_other->texts_;
260 }
261
262 scoped_ptr<const RecordRdata> TxtRecordRdata::Copy() const {
263 scoped_ptr<TxtRecordRdata> return_value(new TxtRecordRdata);
264
265 return_value->texts_ = texts_;
266
267 return return_value.PassAs<const RecordRdata>();
268 }
269
131 } // namespace net 270 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698