From: JINMEI Tatuya Date: Wed, 12 Dec 2012 23:10:03 +0000 (-0800) Subject: [2429] added getMinimum() method for SOA Rdata; needed for TTL-guess handling. X-Git-Tag: bind10-1.0.0-beta-release~16^2~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=606ba69e360a2d841e9ec5eb7e5bd32d2c86f062;p=thirdparty%2Fkea.git [2429] added getMinimum() method for SOA Rdata; needed for TTL-guess handling. --- diff --git a/src/lib/dns/rdata/generic/soa_6.cc b/src/lib/dns/rdata/generic/soa_6.cc index f2b9627163..3ff2f08c85 100644 --- a/src/lib/dns/rdata/generic/soa_6.cc +++ b/src/lib/dns/rdata/generic/soa_6.cc @@ -16,6 +16,7 @@ #include +#include #include #include @@ -112,6 +113,16 @@ SOA::getSerial() const { return (Serial(b.readUint32())); } +uint32_t +SOA::getMinimum() const { + // Make sure the buffer access is safe. + BOOST_STATIC_ASSERT(sizeof(numdata_) == + sizeof(uint32_t) * 4 + sizeof(uint32_t)); + + InputBuffer b(&numdata_[sizeof(uint32_t) * 4], sizeof(uint32_t)); + return (b.readUint32()); +} + string SOA::toText() const { InputBuffer b(numdata_, sizeof(numdata_)); diff --git a/src/lib/dns/rdata/generic/soa_6.h b/src/lib/dns/rdata/generic/soa_6.h index 2c180b2154..d736666e4d 100644 --- a/src/lib/dns/rdata/generic/soa_6.h +++ b/src/lib/dns/rdata/generic/soa_6.h @@ -35,8 +35,12 @@ public: SOA(const Name& mname, const Name& rname, uint32_t serial, uint32_t refresh, uint32_t retry, uint32_t expire, uint32_t minimum); + /// \brief Returns the serial stored in the SOA. Serial getSerial() const; + + /// brief Returns the minimum TTL field value of the SOA. + uint32_t getMinimum() const; private: /// Note: this is a prototype version; we may reconsider /// this representation later. diff --git a/src/lib/dns/tests/rdata_soa_unittest.cc b/src/lib/dns/tests/rdata_soa_unittest.cc index 2df711c9b3..52f06012ed 100644 --- a/src/lib/dns/tests/rdata_soa_unittest.cc +++ b/src/lib/dns/tests/rdata_soa_unittest.cc @@ -32,12 +32,14 @@ using namespace isc::dns::rdata; namespace { class Rdata_SOA_Test : public RdataTest { - // there's nothing to specialize +protected: + Rdata_SOA_Test() : rdata_soa(Name("ns.example.com"), + Name("root.example.com"), + 2010012601, 3600, 300, 3600000, 1200) + {} + const generic::SOA rdata_soa; }; -const generic::SOA rdata_soa(Name("ns.example.com"), Name("root.example.com"), - 2010012601, 3600, 300, 3600000, 1200); - TEST_F(Rdata_SOA_Test, createFromText) { //TBD } @@ -86,4 +88,13 @@ TEST_F(Rdata_SOA_Test, getSerial) { EXPECT_EQ(2010012601, rdata_soa.getSerial().getValue()); } +TEST_F(Rdata_SOA_Test, getMinimum) { + EXPECT_EQ(1200, rdata_soa.getMinimum()); + + // Also check with a very large number (with the MSB being 1). + EXPECT_EQ(2154848336u, generic::SOA(Name("ns.example.com"), + Name("root.example.com"), + 0, 0, 0, 0, 0x80706050).getMinimum()); +} + }