]> granicus.if.org Git - pdns/commitdiff
update statistics for answers served from the packet cache
authorBert Hubert <bert.hubert@netherlabs.nl>
Mon, 11 Jan 2010 01:20:43 +0000 (01:20 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Mon, 11 Jan 2010 01:20:43 +0000 (01:20 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1498 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/pdns_recursor.cc

index 8b571a2b5a1a9f906300d3c11cc6a2d3cef3da0e..3ffcbbcef85b2e7b34acb0a9d2a7e4ec953b9323 100644 (file)
@@ -468,6 +468,21 @@ struct TCPConnection
 unsigned int TCPConnection::s_currentConnections; 
 void handleRunningTCPQuestion(int fd, FDMultiplexer::funcparam_t& var);
 
+void updateRcodeStats(int res)
+{
+  switch(res) {
+  case RCode::ServFail:
+    g_stats.servFails++;
+    break;
+  case RCode::NXDomain:
+    g_stats.nxDomains++;
+    break;
+  case RCode::NoError:
+    g_stats.noErrors++;
+    break;
+  }
+}
+
 void startDoResolve(void *p)
 {
   DNSComboWriter* dc=(DNSComboWriter *)p;
@@ -518,19 +533,8 @@ void startDoResolve(void *p)
     }
     else {
       pw.getHeader()->rcode=res;
-      switch(res) {
-      case RCode::ServFail:
-        g_stats.servFails++;
-        break;
-      case RCode::NXDomain:
-        g_stats.nxDomains++;
-        break;
-      case RCode::NoError:
-        g_stats.noErrors++;
-        break;
-      }
-      
-
+      updateRcodeStats(res);
+    
       if(ret.size()) {
         shuffle(ret);
         
@@ -812,6 +816,8 @@ void handleNewUDPQuestion(int fd, FDMultiplexer::funcparam_t& var)
             g_stats.packetCacheHits++;
             SyncRes::s_queries++;
             sendto(fd, response.c_str(), response.length(), 0, (struct sockaddr*) &fromaddr, fromaddr.getSocklen());
+            if(response.length() >= sizeof(struct dnsheader))
+              updateRcodeStats(((struct dnsheader*)response.c_str())->rcode);
             return;
           }
         }