From: Mukund Sivaraman Date: Thu, 4 Oct 2012 17:59:10 +0000 (+0530) Subject: [2268] Use a single NSEC3Hash instance inside ZoneDataUpdater X-Git-Tag: trac2402_base~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=23d2eaf5f8e5febc4732f3fdc851e1b04914daf8;p=thirdparty%2Fkea.git [2268] Use a single NSEC3Hash instance inside ZoneDataUpdater --- diff --git a/src/lib/datasrc/memory/zone_data_updater.cc b/src/lib/datasrc/memory/zone_data_updater.cc index 8cd93ba0e3..b8c18dcae7 100644 --- a/src/lib/datasrc/memory/zone_data_updater.cc +++ b/src/lib/datasrc/memory/zone_data_updater.cc @@ -16,7 +16,6 @@ #include #include -#include #include @@ -231,6 +230,22 @@ ZoneDataUpdater::validate(const isc::dns::ConstRRsetPtr rrset) const { } } +const NSEC3Hash* +ZoneDataUpdater::getNSEC3Hash() { + if (hash_ == NULL) { + NSEC3Data* nsec3_data = zone_data_.getNSEC3Data(); + // This should never be NULL in this codepath. + assert(nsec3_data != NULL); + + hash_ = NSEC3Hash::create(nsec3_data->hashalg, + nsec3_data->iterations, + nsec3_data->getSaltData(), + nsec3_data->getSaltLen()); + } + + return (hash_); +} + template void ZoneDataUpdater::setupNSEC3(const ConstRRsetPtr rrset) { @@ -245,12 +260,7 @@ ZoneDataUpdater::setupNSEC3(const ConstRRsetPtr rrset) { zone_data_.setNSEC3Data(nsec3_data); zone_data_.setSigned(true); } else { - const boost::scoped_ptr hash - (NSEC3Hash::create(nsec3_data->hashalg, - nsec3_data->iterations, - nsec3_data->getSaltData(), - nsec3_data->getSaltLen())); - + const NSEC3Hash* hash = getNSEC3Hash(); if (!hash->match(nsec3_rdata)) { isc_throw(AddError, rrset->getType() << " with inconsistent parameters: " diff --git a/src/lib/datasrc/memory/zone_data_updater.h b/src/lib/datasrc/memory/zone_data_updater.h index 5bb03a10a6..dc02aba7d4 100644 --- a/src/lib/datasrc/memory/zone_data_updater.h +++ b/src/lib/datasrc/memory/zone_data_updater.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -37,12 +38,14 @@ public: mem_sgmt_(mem_sgmt), rrclass_(rrclass), zone_name_(zone_name), - zone_data_(zone_data) + zone_data_(zone_data), + hash_(NULL) {} /// The destructor. - ~ZoneDataUpdater() - {} + ~ZoneDataUpdater() { + delete hash_; + } //@} @@ -109,6 +112,7 @@ private: // the strong exception guarantee. void validate(const isc::dns::ConstRRsetPtr rrset) const; + const isc::dns::NSEC3Hash* getNSEC3Hash(); template void setupNSEC3(const isc::dns::ConstRRsetPtr rrset); void addNSEC3(const isc::dns::ConstRRsetPtr rrset, @@ -121,6 +125,7 @@ private: const isc::dns::Name& zone_name_; ZoneData& zone_data_; RdataEncoder encoder_; + isc::dns::NSEC3Hash* hash_; }; } // namespace memory