Browse Source

[2165] Remove multiple copies of the same code

Mukund Sivaraman 12 years ago
parent
commit
52f1d2c35b

+ 2 - 23
src/bin/auth/tests/query_unittest.cc

@@ -314,27 +314,6 @@ textToRRset(const string& text_rrset, const Name& origin = Name::ROOT_NAME()) {
     return (rrset);
 }
 
-ConstRRsetPtr
-prepareRRset(ConstRRsetPtr rr, const ZoneFinder::FindOptions options) {
-    ConstRRsetPtr sig_rrset = rr->getRRsig();
-    if (sig_rrset &&
-        ((options & ZoneFinder::FIND_DNSSEC) == 0)) {
-        RRsetPtr result_base(new RRset(rr->getName(),
-                                       rr->getClass(),
-                                       rr->getType(),
-                                       rr->getTTL()));
-        for (RdataIteratorPtr i(rr->getRdataIterator());
-             !i->isLast();
-             i->next()) {
-            result_base->addRdata(i->getCurrent());
-        }
-
-        return(result_base);
-    } else {
-        return(rr);
-    }
-}
-
 // This is a mock Zone Finder class for testing.
 // It is a derived class of ZoneFinder for the convenient of tests.
 // Its find() method emulates the common behavior of protocol compliant
@@ -506,7 +485,7 @@ protected:
                                        isc::dns::ConstRRsetPtr rrset,
                                        FindResultFlags flags = RESULT_DEFAULT)
     {
-        ConstRRsetPtr rr = (rrset ? prepareRRset(rrset, options) : rrset);
+        ConstRRsetPtr rr = (rrset ? stripRRsigs(rrset, options) : rrset);
         return (ZoneFinderContextPtr(
                     new Context(*this, options,
                                 ResultContext(code, rr, flags))));
@@ -622,7 +601,7 @@ MockZoneFinder::findAll(const Name& name, std::vector<ConstRRsetPtr>& target,
                  found_domain->second.begin();
                  found_rrset != found_domain->second.end(); ++found_rrset) {
                 // Insert RRs under the domain name into target
-                target.push_back(prepareRRset(found_rrset->second, options));
+                target.push_back(stripRRsigs(found_rrset->second, options));
             }
             return (ZoneFinderContextPtr(
                         new Context(*this, options,

+ 1 - 18
src/lib/datasrc/memory_datasrc.cc

@@ -860,24 +860,7 @@ private:
                     } else {
                         rr = found->second;
                     }
-
-                    ConstRRsetPtr sig_rrset = rr->getRRsig();
-                    if (sig_rrset &&
-                        ((options & ZoneFinder::FIND_DNSSEC) == 0)) {
-                        RRsetPtr result_base(new RRset(rr->getName(),
-                                                       rr->getClass(),
-                                                       rr->getType(),
-                                                       rr->getTTL()));
-                        for (RdataIteratorPtr i(rr->getRdataIterator());
-                             !i->isLast();
-                             i->next()) {
-                            result_base->addRdata(i->getCurrent());
-                        }
-
-                        result.push_back(result_base);
-                    } else {
-                        result.push_back(rr);
-                    }
+                    result.push_back(ZoneFinder::stripRRsigs(rr, options));
                 }
             }
         }

+ 23 - 0
src/lib/datasrc/zone.h

@@ -134,6 +134,29 @@ protected:
     };
 
 public:
+    /// \brief A helper function to strip RRSIGs when FIND_DNSSEC is not
+    /// requested.
+    static isc::dns::ConstRRsetPtr
+    stripRRsigs(isc::dns::ConstRRsetPtr rr, const FindOptions options) {
+        isc::dns::ConstRRsetPtr sig_rrset = rr->getRRsig();
+        if (sig_rrset &&
+            ((options & ZoneFinder::FIND_DNSSEC) == 0)) {
+            isc::dns::RRsetPtr result_base(new isc::dns::RRset(rr->getName(),
+                                           rr->getClass(),
+                                           rr->getType(),
+                                           rr->getTTL()));
+            for (isc::dns::RdataIteratorPtr i(rr->getRdataIterator());
+                 !i->isLast();
+                 i->next()) {
+                result_base->addRdata(i->getCurrent());
+            }
+
+            return(result_base);
+        } else {
+            return(rr);
+        }
+    }
+
     /// \brief Context of the result of a find() call.
     ///
     /// This class encapsulates results and (possibly) associated context

+ 2 - 18
src/lib/datasrc/zone_finder_context.cc

@@ -47,24 +47,8 @@ getAdditionalAddrs(ZoneFinder& finder, const Name& name,
     BOOST_FOREACH(RRType rrtype, requested_types) {
         ConstZoneFinderContextPtr ctx = finder.find(name, rrtype, options);
         if (ctx->code == ZoneFinder::SUCCESS) {
-            ConstRRsetPtr rr = ctx->rrset;
-            ConstRRsetPtr sig_rrset = rr->getRRsig();
-            if (sig_rrset &&
-                ((options & ZoneFinder::FIND_DNSSEC) == 0)) {
-                RRsetPtr result_base(new RRset(rr->getName(),
-                                               rr->getClass(),
-                                               rr->getType(),
-                                               rr->getTTL()));
-                for (RdataIteratorPtr i(rr->getRdataIterator());
-                     !i->isLast();
-                     i->next()) {
-                    result_base->addRdata(i->getCurrent());
-                }
-
-                result_rrsets.push_back(result_base);
-            } else {
-                result_rrsets.push_back(rr);
-            }
+            result_rrsets.push_back(ZoneFinder::stripRRsigs(ctx->rrset,
+                                                            options));
         }
     }
 }