BIND 10 trac2382, updated. 8398a6a18a555ff9615c3393def84dfd35ce1291 [2382] added a simple wrapper createRdata() for "from lexer" rdata factory.

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Nov 29 22:50:04 UTC 2012


The branch, trac2382 has been updated
       via  8398a6a18a555ff9615c3393def84dfd35ce1291 (commit)
       via  a44291283915ab5948ff14260cdff94d54754b1d (commit)
      from  cd9255de024da223011e8750e3674a8090418ed0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 8398a6a18a555ff9615c3393def84dfd35ce1291
Author: JINMEI Tatuya <jinmei at isc.org>
Date:   Thu Nov 29 14:49:16 2012 -0800

    [2382] added a simple wrapper createRdata() for "from lexer" rdata factory.

commit a44291283915ab5948ff14260cdff94d54754b1d
Author: JINMEI Tatuya <jinmei at isc.org>
Date:   Thu Nov 29 14:21:53 2012 -0800

    [2382] rename master token type name.  It's changed in #2506.

-----------------------------------------------------------------------

Summary of changes:
 src/lib/dns/rdata.cc                          |   13 +++++++++++++
 src/lib/dns/rdata.h                           |   13 +++++++++++--
 src/lib/dns/rrparamregistry-placeholder.cc    |   21 +++++++++++++++++++++
 src/lib/dns/rrparamregistry.h                 |   11 +++++++++--
 src/lib/dns/tests/rrparamregistry_unittest.cc |   20 ++++++++++++++++++++
 5 files changed, 74 insertions(+), 4 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/dns/rdata.cc b/src/lib/dns/rdata.cc
index c7eaa13..dd1f055 100644
--- a/src/lib/dns/rdata.cc
+++ b/src/lib/dns/rdata.cc
@@ -29,6 +29,8 @@
 
 #include <util/buffer.h>
 #include <dns/name.h>
+#include <dns/master_lexer.h>
+#include <dns/master_loader.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rrparamregistry.h>
@@ -54,6 +56,17 @@ createRdata(const RRType& rrtype, const RRClass& rrclass,
 
 RdataPtr
 createRdata(const RRType& rrtype, const RRClass& rrclass,
+            MasterLexer& lexer, const Name* origin,
+            MasterLoader::Options options,
+            MasterLoaderCallbacks& callbacks)
+{
+    return (RRParamRegistry::getRegistry().createRdata(rrtype, rrclass, lexer,
+                                                       origin, options,
+                                                       callbacks));
+}
+
+RdataPtr
+createRdata(const RRType& rrtype, const RRClass& rrclass,
             isc::util::InputBuffer& buffer, size_t len)
 {
     if (len > MAX_RDLENGTH) {
diff --git a/src/lib/dns/rdata.h b/src/lib/dns/rdata.h
index f77ea6e..a6b0fc6 100644
--- a/src/lib/dns/rdata.h
+++ b/src/lib/dns/rdata.h
@@ -15,11 +15,13 @@
 #ifndef RDATA_H
 #define RDATA_H 1
 
-#include <stdint.h>
+#include <exceptions/exceptions.h>
+
+#include <dns/master_loader.h>
 
 #include <boost/shared_ptr.hpp>
 
-#include <exceptions/exceptions.h>
+#include <stdint.h>
 
 namespace isc {
 namespace util {
@@ -31,6 +33,8 @@ class AbstractMessageRenderer;
 class RRType;
 class RRClass;
 class Name;
+class MasterLexer;
+class MasterLoaderCallbacks;
 
 namespace rdata {
 
@@ -433,6 +437,11 @@ std::ostream& operator<<(std::ostream& os, const Generic& rdata);
 RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
                      const std::string& rdata_string);
 
+RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
+                     MasterLexer& lexer, const Name* origin,
+                     MasterLoader::Options options,
+                     MasterLoaderCallbacks& callbacks);
+
 /// \brief Create RDATA of a given pair of RR type and class from
 /// wire-format data.
 ///
diff --git a/src/lib/dns/rrparamregistry-placeholder.cc b/src/lib/dns/rrparamregistry-placeholder.cc
index 078bf6b..bf245c0 100644
--- a/src/lib/dns/rrparamregistry-placeholder.cc
+++ b/src/lib/dns/rrparamregistry-placeholder.cc
@@ -506,6 +506,27 @@ RRParamRegistry::createRdata(const RRType& rrtype, const RRClass& rrclass,
 
 RdataPtr
 RRParamRegistry::createRdata(const RRType& rrtype, const RRClass& rrclass,
+                             MasterLexer& lexer, const Name* origin,
+                             MasterLoader::Options options,
+                             MasterLoaderCallbacks& callbacks)
+{
+    RdataFactoryMap::const_iterator found;
+    found = impl_->rdata_factories.find(RRTypeClass(rrtype, rrclass));
+    if (found != impl_->rdata_factories.end()) {
+        return (found->second->create(lexer, origin, options, callbacks));
+    }
+
+    GenericRdataFactoryMap::const_iterator genfound =
+        impl_->genericrdata_factories.find(rrtype);
+    if (genfound != impl_->genericrdata_factories.end()) {
+        return (genfound->second->create(lexer, origin, options, callbacks));
+    }
+
+    isc_throw(NotImplemented, "generic RDATA text format is not supported");
+}
+
+RdataPtr
+RRParamRegistry::createRdata(const RRType& rrtype, const RRClass& rrclass,
                              InputBuffer& buffer, size_t rdata_len)
 {
     RdataFactoryMap::const_iterator found =
diff --git a/src/lib/dns/rrparamregistry.h b/src/lib/dns/rrparamregistry.h
index c3b61eb..2a35463 100644
--- a/src/lib/dns/rrparamregistry.h
+++ b/src/lib/dns/rrparamregistry.h
@@ -129,8 +129,8 @@ public:
         std::string s;
 
         while (true) {
-            const MasterLexer::Token& token = lexer.getNextToken();
-            if (token.getType() == MasterLexer::Token::END_OF_FILE) {
+            const MasterToken& token = lexer.getNextToken();
+            if (token.getType() == MasterToken::END_OF_FILE) {
                 break;
             }
 
@@ -485,6 +485,7 @@ public:
     /// object.
     rdata::RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
                                 const std::string& rdata_string);
+
     /// \brief Create RDATA of a given pair of RR type and class from
     /// wire-format data.
     ///
@@ -500,6 +501,12 @@ public:
     /// object.
     rdata::RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
                                 isc::util::InputBuffer& buffer, size_t len);
+
+    rdata::RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
+                                MasterLexer& lexer, const Name* origin,
+                                MasterLoader::Options options,
+                                MasterLoaderCallbacks& callbacks);
+
     /// \brief Create RDATA of a given pair of RR type and class, copying
     /// of another RDATA of same kind.
     ///
diff --git a/src/lib/dns/tests/rrparamregistry_unittest.cc b/src/lib/dns/tests/rrparamregistry_unittest.cc
index feba8a5..e6654dc 100644
--- a/src/lib/dns/tests/rrparamregistry_unittest.cc
+++ b/src/lib/dns/tests/rrparamregistry_unittest.cc
@@ -178,4 +178,24 @@ TEST_F(RRParamRegistryTest, createFromLexer) {
     EXPECT_EQ(0, in::A("192.168.0.1").compare(*rdata));
 }
 
+// This is not a direct test for the registry, but checks its behavior
+// via createRdata().
+TEST_F(RRParamRegistryTest, createRdataWithLexer) {
+    MasterLexer lexer;
+    stringstream ss("A 5 4 43200 20100223214617 20100222214617 8496 isc.org. "
+                    "evxhlGx13mpKLVkKsjpGzycS5twtIoxOmlN14w9t5AgzGBmz "
+                    "diGdLIrFabqr72af2rUq+UDBKMWXujwZTZUTws32sVldDPk/ "
+                    "NbuacJM25fQXfv5mO3Af7TOoow3AjMaVG9icjCW0V55WcWQU "
+                    "f49t+sXKPzbipN9g+s1ZPiIyofc=");
+    lexer.pushSource(ss);
+
+    const MasterLoaderCallbacks::IssueCallback callback
+        (boost::bind(&dummyCallback, _1, _2, _3));
+    MasterLoaderCallbacks callbacks(callback, callback);
+    const generic::RRSIG expected_rrset(ss.str());
+    EXPECT_EQ(0, expected_rrset.compare(
+                  *createRdata(RRType::RRSIG(), RRClass::IN(), lexer, NULL,
+                               MasterLoader::MANY_ERRORS, callbacks)));
+}
+
 }



More information about the bind10-changes mailing list