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

Unified Diff: net/dns/record_rdata.cc

Issue 17143006: Limited NSEC support to RecordParsed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mdns_transaction_cleanup
Patch Set: Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: net/dns/record_rdata.cc
diff --git a/net/dns/record_rdata.cc b/net/dns/record_rdata.cc
index 55967f91a9aef249a6973070280b2d20361afba3..8cec2200ccfbacb72aa8a595f92c1d31cb67fa48 100644
--- a/net/dns/record_rdata.cc
+++ b/net/dns/record_rdata.cc
@@ -215,4 +215,60 @@ bool TxtRecordRdata::IsEqual(const RecordRdata* other) const {
return texts_ == txt_other->texts_;
}
+NsecRecordRdata::NsecRecordRdata() {
+}
+
+NsecRecordRdata::~NsecRecordRdata() {
+}
+
+// static
+scoped_ptr<NsecRecordRdata> NsecRecordRdata::Create(
+ const base::StringPiece& data,
+ const DnsRecordParser& parser) {
+ scoped_ptr<NsecRecordRdata> rdata(new NsecRecordRdata);
+
+ unsigned len_next_domain = parser.ReadName(data.data(), NULL);
szym 2013/06/24 21:50:28 nit: |next_domain_len| would be better, |next_doma
Noam Samuel 2013/06/25 01:31:31 Done.
+
+ if (len_next_domain == 0 || data.length() < len_next_domain + 2)
+ return scoped_ptr<NsecRecordRdata>();
+
szym 2013/06/24 21:50:28 StringPiece::operator[] returns char, so I'd sugge
Noam Samuel 2013/06/25 01:31:31 Done.
+ unsigned window_num = data[len_next_domain];
szym 2013/06/24 21:50:28 I suggest block_num or block_number "window number
Noam Samuel 2013/06/25 01:31:31 Done.
+ unsigned len = data[len_next_domain+1];
szym 2013/06/24 21:50:28 bitmap_length
Noam Samuel 2013/06/25 01:31:31 Done.
+
+ // The window number must be zero in mDns-secific nsec records. The bitmap
szym 2013/06/24 21:50:28 "specific" "NSEC"
Noam Samuel 2013/06/25 01:31:31 Done.
+ // length must be between 1 and 32, and since we may only have one window, the
+ // data length must be exactl equal to the domain length plus bitmap size.
szym 2013/06/24 21:50:28 "exactly"
Noam Samuel 2013/06/25 01:31:31 Done.
+ if (window_num != 0 || len == 0 || len > 32 ||
+ data.length() != len_next_domain + 2 + len)
szym 2013/06/24 21:50:28 The last check would be easier to understand if yo
Noam Samuel 2013/06/25 01:31:31 Done.
+ return scoped_ptr<NsecRecordRdata>();
+
+ base::StringPiece bitmap_data = data.substr(len_next_domain + 2);
+
+ rdata->bitmap_.insert(rdata->bitmap_.begin(),
+ bitmap_data.begin(),
gene 2013/06/24 19:47:16 indentation
Noam Samuel 2013/06/24 21:31:30 Done.
+ bitmap_data.end());
+
+ return rdata.Pass();
+}
+
+uint16 NsecRecordRdata::Type() const {
+ return NsecRecordRdata::kType;
+}
+
+bool NsecRecordRdata::IsEqual(const RecordRdata* other) const {
+ if (other->Type() != Type()) return false;
gene 2013/06/24 19:47:16 move return to the next line
Noam Samuel 2013/06/24 21:31:30 Done.
+ const NsecRecordRdata* nsec_other =
+ static_cast<const NsecRecordRdata*>(other);
+ return bitmap_ == nsec_other->bitmap_;
+}
+
+bool NsecRecordRdata::bit(unsigned i) {
+ unsigned byte_num = i/8;
+ if (bitmap_.size() < byte_num + 1)
+ return false;
+
+ unsigned bit_num = 7 - i % 8;
+ return (bitmap_[byte_num] & (1 << bit_num)) != 0;
+}
+
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698