Browse Source

[2429] on second thought, define max rrttl as an object

JINMEI Tatuya 12 years ago
parent
commit
b9fa6ce6e6
4 changed files with 12 additions and 7 deletions
  1. 1 1
      src/lib/dns/master_loader.cc
  2. 0 4
      src/lib/dns/rrttl.cc
  3. 7 2
      src/lib/dns/rrttl.h
  4. 4 0
      src/lib/dns/tests/rrttl_unittest.cc

+ 1 - 1
src/lib/dns/master_loader.cc

@@ -157,7 +157,7 @@ private:
     // RR and the lexer is positioned at the next line.  It's just for
     // calculating the accurate source line when callback is necessary.
     void limitTTL(RRTTL& ttl, bool post_parsing) {
-        if (ttl.getValue() > RRTTL::MAX_TTL) {
+        if (ttl > RRTTL::MAX()) {
             const size_t src_line = lexer_.getSourceLine() -
                 (post_parsing ? 1 : 0);
             callbacks_.warning(lexer_.getSourceName(), src_line,

+ 0 - 4
src/lib/dns/rrttl.cc

@@ -57,10 +57,6 @@ Unit units[] = {
 namespace isc {
 namespace dns {
 
-// The actual definition of a static const member, in case it's address is
-// needed.
-const uint32_t RRTTL::MAX_TTL;
-
 namespace {
 bool
 parseTTLStr(const string& ttlstr, uint32_t& ttlval, string* error_txt) {

+ 7 - 2
src/lib/dns/rrttl.h

@@ -271,11 +271,16 @@ public:
     /// \name Protocol constants
     ///
     //@{
-    /// \brief Max allowable value for TTLs, as defined in RFC2181, Sec. 8.
+    /// \brief The TTL of the max allowable value, per RFC2181 Section 8.
+    ///
+    /// The max value is the largest unsigned 31 bit integer, 2^31-1.
     ///
     /// \note At the moment an RRTTL object can have a value larger than
     /// this limit.  We may revisit it in a future version.
-    static const uint32_t MAX_TTL = 0x7fffffff;
+    static const RRTTL MAX() {
+        static const RRTTL max_ttl(0x7fffffff);
+        return (max_ttl);
+    }
     //@}
 
 private:

+ 4 - 0
src/lib/dns/tests/rrttl_unittest.cc

@@ -273,6 +273,10 @@ TEST_F(RRTTLTest, gthan) {
     EXPECT_FALSE(ttl_small > ttl_large);
 }
 
+TEST_F(RRTTLTest, maxTTL) {
+    EXPECT_EQ((1 << 31) - 1, RRTTL::MAX()::getValue());
+}
+
 // test operator<<.  We simply confirm it appends the result of toText().
 TEST_F(RRTTLTest, LeftShiftOperator) {
     ostringstream oss;