]> granicus.if.org Git - pdns/commitdiff
make packetcache further aware of difference between tcp and udp, so we don't serve...
authorBert Hubert <bert.hubert@netherlabs.nl>
Wed, 12 Jan 2011 19:27:43 +0000 (19:27 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Wed, 12 Jan 2011 19:27:43 +0000 (19:27 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1880 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/packetcache.cc
pdns/packethandler.cc
pdns/tcpreceiver.cc

index 250932d6a6daa0edfa537e80901020627845b28d..c75ce9433479011f29413a883587683ae585708a 100644 (file)
@@ -84,7 +84,8 @@ int PacketCache::get(DNSPacket *p, DNSPacket *cached)
       return 0;
     }
 
-    haveSomething=getEntryLocked(p->qdomain, p->qtype, PacketCache::PACKETCACHE, value, -1, packetMeritsRecursion, p->getMaxReplyLen(), p->d_dnssecOk);
+    uint16_t maxReplyLen = p->d_tcp ? 0xffff : p->getMaxReplyLen();
+    haveSomething=getEntryLocked(p->qdomain, p->qtype, PacketCache::PACKETCACHE, value, -1, packetMeritsRecursion, maxReplyLen, p->d_dnssecOk);
   }
   if(haveSomething) {
     (*d_statnumhit)++;
@@ -122,9 +123,9 @@ void PacketCache::insert(DNSPacket *q, DNSPacket *r)
     return;
 
   bool packetMeritsRecursion=d_doRecursion && q->d.rd;
-
+  uint16_t maxReplyLen = q->d_tcp ? 0xffff : q->getMaxReplyLen();
   insert(q->qdomain, q->qtype, PacketCache::PACKETCACHE, r->getString(), packetMeritsRecursion ? d_recursivettl : d_ttl, -1, packetMeritsRecursion, 
-    q->getMaxReplyLen(), q->d_dnssecOk);
+    maxReplyLen, q->d_dnssecOk);
 }
 
 // universal key appears to be: qname, qtype, kind (packet, query cache), optionally zoneid, meritsRecursion
@@ -138,7 +139,7 @@ void PacketCache::insert(const string &qname, const QType& qtype, CacheEntryType
   if(!ttl)
     return;
   
-  //  cerr<<"Inserting qname '"<<qname<<"', cet: "<<(int)cet<<", value: '"<< (cet ? value : "PACKET") <<"', qtype: "<<qtype.getName()<<", ttl: "<<ttl<<endl;
+  //cerr<<"Inserting qname '"<<qname<<"', cet: "<<(int)cet<<", value: '"<< (cet ? value : "PACKET") <<"', qtype: "<<qtype.getName()<<", ttl: "<<ttl<<", maxreplylen: "<<maxReplyLen<<endl;
   CacheEntry val;
   val.ttd=time(0)+ttl;
   val.qname=qname;
@@ -275,7 +276,7 @@ bool PacketCache::getEntryLocked(const string &qname, const QType& qtype, CacheE
   unsigned int maxReplyLen, bool dnssecOK)
 {
   uint16_t qt = qtype.getCode();
-  
+  //cerr<<"Lookup for maxReplyLen: "<<maxReplyLen<<endl;
   cmap_t::const_iterator i=d_map.find(tie(qname, qt, cet, zoneID, meritsRecursion, maxReplyLen, dnssecOK));
   time_t now=time(0);
   bool ret=(i!=d_map.end() && i->ttd > now);
index ef6efbae75e53554e026cb3ec36b2b62ec0ef106..efe61c478f503cc5393daadf2d368eebfeac5a52 100644 (file)
@@ -1344,9 +1344,7 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse)
     //    doDNSSECProcessing(p, r);
 
     r->wrapup(&d_dk); // needed for inserting in cache
-    if(!p->d_tcp) {
-      PC.insert(p, r); // in the packet cache
-    }
+    PC.insert(p, r); // in the packet cache
   }
   catch(DBException &e) {
     L<<Logger::Error<<"Database module reported condition which prevented lookup ("+e.reason+") sending out servfail"<<endl;
index 1d67e281877ae15581693f3d253fa2ddf6188a04..fc7a37145e16230b68a4fd38035c764e6d7099f2 100644 (file)
@@ -283,7 +283,7 @@ void *TCPNameserver::doConnection(void *data)
       shared_ptr<DNSPacket> reply; 
       shared_ptr<DNSPacket> cached= shared_ptr<DNSPacket>(new DNSPacket);
       if(logDNSDetails) 
-        L << Logger::Notice<<"Remote "<< packet->remote.toString() <<" wants '" << packet->qdomain<<"|"<<packet->qtype.getName() << 
+        L << Logger::Notice<<"TCP Remote "<< packet->remote.toString() <<" wants '" << packet->qdomain<<"|"<<packet->qtype.getName() << 
         "', do = " <<packet->d_dnssecOk <<", bufsize = "<< packet->getMaxReplyLen()<<": ";