|
@@ -232,25 +232,24 @@ MessageEntry::parseNegativeResponseAuthoritySection(const isc::dns::Message& msg
|
|
|
uint32_t& min_ttl,
|
|
|
uint16_t& rrset_count)
|
|
|
{
|
|
|
-
|
|
|
// We found the SOA record, so we can cache the message and RRsets in the cache
|
|
|
uint16_t count = 0;
|
|
|
for (RRsetIterator iter = msg.beginSection(Message::SECTION_AUTHORITY);
|
|
|
iter != msg.endSection(Message::SECTION_AUTHORITY);
|
|
|
++iter) {
|
|
|
RRsetPtr rrset_ptr = *iter;
|
|
|
- RRsetTrustLevel level = getRRsetTrustLevel(msg, rrset_ptr, Message::SECTION_AUTHORITY);
|
|
|
- uint32_t rrset_ttl = 0;
|
|
|
- if (rrset_ptr->getType() == RRType::SOA()){
|
|
|
- RRsetEntryPtr rrset_entry = negative_soa_cache_->update(*rrset_ptr, level);
|
|
|
- rrsets_.push_back(RRsetRef(rrset_ptr->getName(), rrset_ptr->getType(), negative_soa_cache_));
|
|
|
- rrset_ttl = rrset_entry->getTTL();
|
|
|
- } else {
|
|
|
- RRsetEntryPtr rrset_entry = rrset_cache_->update(*rrset_ptr, level);
|
|
|
- rrsets_.push_back(RRsetRef(rrset_ptr->getName(), rrset_ptr->getType(), rrset_cache_));
|
|
|
- rrset_ttl = rrset_entry->getTTL();
|
|
|
- }
|
|
|
-
|
|
|
+ RRsetTrustLevel level = getRRsetTrustLevel(msg, rrset_ptr,
|
|
|
+ Message::SECTION_AUTHORITY);
|
|
|
+ boost::shared_ptr<RRsetCache> rrset_cache_ptr = rrset_cache_;
|
|
|
+ if (rrset_ptr->getType() == RRType::SOA()) {
|
|
|
+ rrset_cache_ptr.reset(negative_soa_cache_);
|
|
|
+ }
|
|
|
+
|
|
|
+ RRsetEntryPtr rrset_entry = rrset_cache_ptr->update(*rrset_ptr, level);
|
|
|
+ rrsets_.push_back(RRsetRef(rrset_ptr->getName(),
|
|
|
+ rrset_ptr->getType(),
|
|
|
+ rrset_cache_ptr));
|
|
|
+ uint32_t rrset_ttl = rrset_entry->getTTL();
|
|
|
if (min_ttl > rrset_ttl) {
|
|
|
min_ttl = rrset_ttl;
|
|
|
}
|
|
@@ -280,22 +279,18 @@ MessageEntry::initMessageEntry(const isc::dns::Message& msg) {
|
|
|
parseSection(msg, Message::SECTION_AUTHORITY, min_ttl, authority_count_);
|
|
|
parseSection(msg, Message::SECTION_ADDITIONAL, min_ttl, additional_count_);
|
|
|
} else {
|
|
|
- uint16_t rrset_count = 0;
|
|
|
-
|
|
|
- // For negative response, if no soa RRset is found in authority section, dont cache it
|
|
|
+ // For negative response, if no soa RRset is found in authority
|
|
|
+ // section, don't cache it
|
|
|
if (!hasTheRecordInAuthoritySection(msg, RRType::SOA())) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- parseNegativeResponseAuthoritySection(msg, min_ttl, rrset_count);
|
|
|
-
|
|
|
- authority_count_ = rrset_count;
|
|
|
+ parseNegativeResponseAuthoritySection(msg, min_ttl, authority_count_);
|
|
|
parseSection(msg, Message::SECTION_ANSWER, min_ttl, answer_count_);
|
|
|
parseSection(msg, Message::SECTION_ADDITIONAL, min_ttl, additional_count_);
|
|
|
|
|
|
}
|
|
|
expire_time_ = time(NULL) + min_ttl;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
bool
|