From: Mukund Sivaraman Date: Mon, 10 Sep 2012 05:36:29 +0000 (+0530) Subject: [2108] Implement TreeNodeRRset::getTTL() X-Git-Tag: trac2351_base~70^2~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a727e666876aa6ec02cc9d736b2735c4d021fca4;p=thirdparty%2Fkea.git [2108] Implement TreeNodeRRset::getTTL() This is used in the iterator when separating RRs. --- diff --git a/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc b/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc index cf486bf9da..c83c034366 100644 --- a/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc +++ b/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc @@ -138,11 +138,13 @@ protected: void checkBasicFields(const AbstractRRset& actual_rrset, const Name& expected_name, const RRClass& expected_class, const RRType& expected_type, + const uint32_t expected_ttl, size_t expected_rdatacount, size_t expected_sigcount) { EXPECT_EQ(expected_name, actual_rrset.getName()); EXPECT_EQ(expected_class, actual_rrset.getClass()); EXPECT_EQ(expected_type, actual_rrset.getType()); + EXPECT_EQ(RRTTL(expected_ttl), actual_rrset.getTTL()); EXPECT_EQ(expected_rdatacount, actual_rrset.getRdataCount()); EXPECT_EQ(expected_sigcount, actual_rrset.getRRsigDataCount()); } @@ -150,31 +152,31 @@ checkBasicFields(const AbstractRRset& actual_rrset, const Name& expected_name, TEST_F(TreeNodeRRsetTest, create) { // Constructed with RRSIG, and it should be visible. checkBasicFields(TreeNodeRRset(rrclass_, www_node_, a_rdataset_, true), - www_name_, rrclass_, RRType::A(), 2, 1); + www_name_, rrclass_, RRType::A(), 3600, 2, 1); // Constructed with RRSIG, and it should be invisible. checkBasicFields(TreeNodeRRset(rrclass_, www_node_, a_rdataset_, false), - www_name_, rrclass_, RRType::A(), 2, 0); + www_name_, rrclass_, RRType::A(), 3600, 2, 0); // Constructed without RRSIG, and it would be visible (but of course won't) checkBasicFields(TreeNodeRRset(rrclass_, origin_node_, ns_rdataset_, true), - origin_name_, rrclass_, RRType::NS(), 1, 0); + origin_name_, rrclass_, RRType::NS(), 3600, 1, 0); // Constructed without RRSIG, and it should be visible checkBasicFields(TreeNodeRRset(rrclass_, origin_node_, ns_rdataset_, false), - origin_name_, rrclass_, RRType::NS(), 1, 0); + origin_name_, rrclass_, RRType::NS(), 3600, 1, 0); // RRSIG-only case (note the RRset's type is covered type) checkBasicFields(TreeNodeRRset(rrclass_, www_node_, rrsig_only_rdataset_, true), - www_name_, rrclass_, RRType::TXT(), 0, 1); + www_name_, rrclass_, RRType::TXT(), 3600, 0, 1); // RRSIG-only case (note the RRset's type is covered type), but it's // invisible checkBasicFields(TreeNodeRRset(rrclass_, www_node_, rrsig_only_rdataset_, false), - www_name_, rrclass_, RRType::TXT(), 0, 0); + www_name_, rrclass_, RRType::TXT(), 3600, 0, 0); // Wildcard substitution checkBasicFields(TreeNodeRRset(match_name_, rrclass_, wildcard_node_, wildcard_rdataset_, true), - match_name_, rrclass_, RRType::A(), 2, 1); + match_name_, rrclass_, RRType::A(), 3600, 2, 1); } // Templated if and when we support OutputBuffer version of toWire(). diff --git a/src/lib/datasrc/memory/treenode_rrset.cc b/src/lib/datasrc/memory/treenode_rrset.cc index 6fc6b66682..1f4bc1d02e 100644 --- a/src/lib/datasrc/memory/treenode_rrset.cc +++ b/src/lib/datasrc/memory/treenode_rrset.cc @@ -46,7 +46,7 @@ TreeNodeRRset::TreeNodeRRset(const dns::Name& realname, bool dnssec_ok) : node_(node), rdataset_(rdataset), rrsig_count_(rdataset_->getSigRdataCount()), rrclass_(rrclass), - dnssec_ok_(dnssec_ok), name_(NULL) + dnssec_ok_(dnssec_ok), name_(NULL), ttl_(NULL) { const LabelSequence labels(realname); const size_t labels_storangelen = labels.getSerializedLength(); @@ -69,7 +69,13 @@ TreeNodeRRset::getName() const { const RRTTL& TreeNodeRRset::getTTL() const { - isc_throw(Unexpected, "unexpected method called on TreeNodeRRset"); + if (ttl_ == NULL) { + util::InputBuffer ttl_buffer(rdataset_->getTTLData(), + sizeof(uint32_t)); + ttl_ = new RRTTL(ttl_buffer); + } + + return (*ttl_); } void diff --git a/src/lib/datasrc/memory/treenode_rrset.h b/src/lib/datasrc/memory/treenode_rrset.h index 1f52124386..91f81e859b 100644 --- a/src/lib/datasrc/memory/treenode_rrset.h +++ b/src/lib/datasrc/memory/treenode_rrset.h @@ -105,7 +105,7 @@ public: const RdataSet* rdataset, bool dnssec_ok) : node_(node), rdataset_(rdataset), rrsig_count_(rdataset_->getSigRdataCount()), rrclass_(rrclass), - dnssec_ok_(dnssec_ok), name_(NULL), realname_buf_(NULL) + dnssec_ok_(dnssec_ok), name_(NULL), realname_buf_(NULL), ttl_(NULL) {} /// \brief Constructor for wildcard-expanded owner name. @@ -126,6 +126,7 @@ public: virtual ~TreeNodeRRset() { delete[] realname_buf_; + delete ttl_; delete name_; } @@ -251,6 +252,7 @@ private: const bool dnssec_ok_; mutable dns::Name* name_; uint8_t* realname_buf_; + mutable dns::RRTTL* ttl_; }; } // namespace memory