Browse Source

Insert RRset data to new created RRset
Update TTL when client request
Change genRRset() to getRRset()

Ocean Wang 14 years ago
parent
commit
39158d307d

+ 3 - 3
src/lib/cache/message_entry.cc

@@ -53,14 +53,14 @@ MessageEntry::genMessage(const time_t& time_now,
         // Add answer section's rrsets.
         for(index = 0; index < answer_count_; index++) {
             msg.addRRset(Message::SECTION_ANSWER, 
-                         rrsets_[index]->genRRset(), dnssec_need);
+                         rrsets_[index]->getRRset(), dnssec_need);
         }
         
         // Add authority section's rrsets.
         uint16_t end = answer_count_ + authority_count_;
         for(index = answer_count_; index < end; index++) {
             msg.addRRset(Message::SECTION_AUTHORITY, 
-                         rrsets_[index]->genRRset(), dnssec_need);
+                         rrsets_[index]->getRRset(), dnssec_need);
         }
 
         // Add additional section's rrsets.
@@ -68,7 +68,7 @@ MessageEntry::genMessage(const time_t& time_now,
         end = end + additional_count_;
         for(; index < end; index++) {
             msg.addRRset(Message::SECTION_ADDITIONAL, 
-                         rrsets_[index]->genRRset(), dnssec_need);
+                         rrsets_[index]->getRRset(), dnssec_need);
         }
         return true;
     }

+ 2 - 2
src/lib/cache/recursor_cache.cc

@@ -54,7 +54,7 @@ RecursorCache::lookup(const isc::dns::Name& qname,
     if (cache_iter != rrsets_cache1_.end()) {
         RRsetEntryPtr rrset_entry = cache_iter->second->lookup(qname, qtype);
         if (rrset_entry) {
-            boost::shared_ptr<isc::dns::RRset> rrset_ptr = rrset_entry->genRRset();
+            boost::shared_ptr<isc::dns::RRset> rrset_ptr = rrset_entry->getRRset();
             response.addRRset(Message::SECTION_ANSWER, rrset_ptr);
         }
     }
@@ -79,7 +79,7 @@ RecursorCache::lookup_in_rrset_cache(const isc::dns::Name& qname,
     if (cache_iter != rrsets_cache.end()) {
         RRsetEntryPtr rrset_entry = cache_iter->second->lookup(qname, qtype);
         if (rrset_entry) {
-            return rrset_entry->genRRset();
+            return rrset_entry->getRRset();
         }
     }
 

+ 19 - 1
src/lib/cache/rrset_entry.cc

@@ -29,10 +29,16 @@ RRsetEntry::RRsetEntry(const isc::dns::RRset& rrset, const RRsetTrustLevel& leve
     trust_level_(level),
     rrset_(new RRset(rrset.getName(), rrset.getClass(), rrset.getType(), rrset.getTTL()))
 {
+    RdataIteratorPtr rdata_itor = rrset.getRdataIterator();
+    rdata_itor->first();
+    while(!rdata_itor->isLast()){
+        rrset_->addRdata(rdata_itor->getCurrent());
+    }
 }
 
 isc::dns::RRsetPtr
-RRsetEntry::genRRset() const {
+RRsetEntry::getRRset() {
+    updateTTL();
     return rrset_;
 }
 
@@ -47,6 +53,18 @@ RRsetEntry::hashKey() const {
     return HashKey(keydata.first, keydata.second, RRClass(rrset_->getClass().getCode()));
 }
 
+void
+RRsetEntry::updateTTL(){
+    uint32_t oldTTL = rrset_->getTTL().getValue();
+    if(oldTTL == 0) return;
+
+    uint32_t now = time(NULL);
+    uint32_t newTTL = now < expire_time_ ? (expire_time_ - now) : 0;
+
+    RRTTL ttl(newTTL);
+    rrset_->setTTL(ttl);
+}
+
 } // namespace cache
 } // namespace isc
 

+ 6 - 5
src/lib/cache/rrset_entry.h

@@ -71,13 +71,14 @@ public:
     RRsetEntry(const isc::dns::RRset& rrset, const RRsetTrustLevel& level);
 
     /// \brief Return a pointer to a generated RRset
-    isc::dns::RRsetPtr genRRset() const;
+    isc::dns::RRsetPtr getRRset();
     
     /// \brief Get the expiration time of the RRset.
     time_t getExpireTime() const;
 
     /// \brief Get the ttl of the RRset.
-    uint32_t getTTL() const {
+    uint32_t getTTL() {
+        updateTTL();
         return rrset_->getTTL().getValue();
     }
 
@@ -88,11 +89,11 @@ public:
     RRsetTrustLevel getTrustLevel() const {
         return trust_level_;
     }
-
 private:
-    uint32_t rr_count_;     // RRset count
-    uint32_t rrsig_count_;  // RRSIG count
+    /// \brief Update TTL according to expiration time
+    void updateTTL();
 
+private:
     time_t expire_time_;    // Expiration time of rrset.
     RRsetTrustLevel trust_level_; // rrset trustworthiness.
     boost::shared_ptr<isc::dns::RRset> rrset_;