Index: net/dns/record_parsed.cc |
diff --git a/net/dns/record_parsed.cc b/net/dns/record_parsed.cc |
index f02fbe3e85e362d7063d70ce0448fd7f7f03de8a..f88e3fa67f62632d7c236321674f12d76663911b 100644 |
--- a/net/dns/record_parsed.cc |
+++ b/net/dns/record_parsed.cc |
@@ -4,14 +4,23 @@ |
#include "net/dns/record_parsed.h" |
+#include "base/logging.h" |
#include "net/dns/dns_response.h" |
#include "net/dns/record_rdata.h" |
namespace net { |
RecordParsed::RecordParsed(const std::string& name, uint16 type, uint16 klass, |
- uint32 ttl, scoped_ptr<const RecordRdata> rdata) |
- : name_(name), type_(type), klass_(klass), ttl_(ttl), rdata_(rdata.Pass()) { |
+ uint32 ttl, scoped_ptr<const RecordRdata> rdata, |
+ base::Time time_created) |
+ : name_(name), type_(type), klass_(klass), ttl_(ttl), rdata_(rdata.Pass()), |
+ time_created_(time_created) { |
+} |
+ |
+RecordParsed::RecordParsed(const RecordParsed& other) |
+ : name_(other.name_), type_(other.type_), klass_(other.klass_), |
+ ttl_(other.ttl_), rdata_(other.rdata_->Copy()), |
+ time_created_(other.time_created_) { |
} |
RecordParsed::~RecordParsed() { |
@@ -19,7 +28,8 @@ RecordParsed::~RecordParsed() { |
// static |
scoped_ptr<const RecordParsed> RecordParsed::CreateFrom( |
- DnsRecordParser* parser) { |
+ DnsRecordParser* parser, |
+ base::Time time_created) { |
DnsResourceRecord record; |
scoped_ptr<const RecordRdata> rdata; |
@@ -30,6 +40,9 @@ scoped_ptr<const RecordParsed> RecordParsed::CreateFrom( |
case ARecordRdata::kType: |
rdata = ARecordRdata::Create(record.rdata, *parser); |
break; |
+ case AAAARecordRdata::kType: |
+ rdata = AAAARecordRdata::Create(record.rdata, *parser); |
+ break; |
case CnameRecordRdata::kType: |
rdata = CnameRecordRdata::Create(record.rdata, *parser); |
break; |
@@ -43,6 +56,7 @@ scoped_ptr<const RecordParsed> RecordParsed::CreateFrom( |
rdata = TxtRecordRdata::Create(record.rdata, *parser); |
break; |
default: |
+ LOG(WARNING) << "Unknown RData type for recieved record: " << record.type; |
return scoped_ptr<const RecordParsed>(); |
} |
@@ -53,6 +67,23 @@ scoped_ptr<const RecordParsed> RecordParsed::CreateFrom( |
record.type, |
record.klass, |
record.ttl, |
- rdata.Pass())); |
+ rdata.Pass(), |
+ time_created)); |
+} |
+ |
+bool RecordParsed::IsEqual(const RecordParsed* other, bool is_mdns) const { |
+ DCHECK(other); |
+ uint16 klass = klass_; |
+ uint16 other_klass = other->klass_; |
+ |
+ if (is_mdns) { |
+ klass &= dns_protocol::kMDnsClassMask; |
+ other_klass &= dns_protocol::kMDnsClassMask; |
+ } |
+ |
+ return name_ == other->name_ && |
+ klass == other_klass && |
+ type_ == other->type_ && |
+ rdata_->IsEqual(other->rdata_.get()); |
} |
} |