gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r19012 - gnunet/src/dns


From: gnunet
Subject: [GNUnet-SVN] r19012 - gnunet/src/dns
Date: Thu, 5 Jan 2012 17:23:58 +0100

Author: grothoff
Date: 2012-01-05 17:23:58 +0100 (Thu, 05 Jan 2012)
New Revision: 19012

Modified:
   gnunet/src/dns/gnunet-service-dns_new.c
Log:
-addressing FIXMEs and adding statistics

Modified: gnunet/src/dns/gnunet-service-dns_new.c
===================================================================
--- gnunet/src/dns/gnunet-service-dns_new.c     2012-01-05 16:13:52 UTC (rev 
19011)
+++ gnunet/src/dns/gnunet-service-dns_new.c     2012-01-05 16:23:58 UTC (rev 
19012)
@@ -29,6 +29,7 @@
 #include "gnunet_signatures.h"
 #include "dns_new.h"
 #include "gnunet_dns_service-new.h"
+#include "gnunet_statistics_service.h"
 
 /* see http://www.iana.org/assignments/ethernet-numbers */
 #ifndef ETH_P_IPV4
@@ -279,6 +280,11 @@
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
 /**
+ * Statistics.
+ */
+static struct GNUNET_STATISTICS_Handle *stats;
+
+/**
  * Handle to DNS hijacker helper process ("gnunet-helper-dns").
  */
 static struct GNUNET_HELPER_Handle *hijacker;
@@ -371,6 +377,11 @@
     cleanup_rr (&requests[i]);
   GNUNET_SERVER_notification_context_destroy (nc);
   nc = NULL;
+  if (stats != NULL)
+  {
+    GNUNET_STATISTICS_destroy (stats, GNUNET_YES);
+    stats = NULL;
+  }
 }
 
 
@@ -561,6 +572,9 @@
                        hdr,
                        GNUNET_YES,
                        NULL, NULL);
+    GNUNET_STATISTICS_update (stats,
+                             gettext_noop ("# DNS requests answered via TUN 
interface"),
+                             1, GNUNET_NO);
   }
   /* clean up, we're done */
   cleanup_rr (rr);
@@ -678,7 +692,9 @@
     }
     if (NULL == dnsout)
     {
-      /* fail, FIXME: case for statistics! */
+      GNUNET_STATISTICS_update (stats,
+                               gettext_noop ("# DNS exit failed (address 
family not supported)"),
+                               1, GNUNET_NO);
       cleanup_rr (rr);
       return;
     }
@@ -842,8 +858,10 @@
     rr = &requests[dns->id];
     if (rr->phase != RP_INTERNET_DNS) 
     {
-      /* FIXME: case for statistics */
       /* unexpected / bogus reply */
+      GNUNET_STATISTICS_update (stats,
+                               gettext_noop ("# External DNS response 
discarded (no matching request)"),
+                               1, GNUNET_NO);
       return; 
     }
     GNUNET_free_non_null (rr->payload);
@@ -1028,9 +1046,9 @@
   rr = &requests[off];
   if (rr->request_id != resp->request_id)
   {
-    // FIXME: this is a case for calling statistics...
-    // (client is answering a request that we've lost
-    // track of -- more than 64k requests ago or so...)
+    GNUNET_STATISTICS_update (stats,
+                             gettext_noop ("# Client response discarded (no 
matching request)"),
+                             1, GNUNET_NO);
     GNUNET_SERVER_receive_done (client, GNUNET_OK);
     return;
   }
@@ -1132,8 +1150,8 @@
         (ip4->protocol != IPPROTO_UDP) )
     {
       /* non-IP/UDP packet received on TUN (or with options) */
-      // FIXME: maybe just log with stats?
-      GNUNET_break (0);
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                 _("Received malformed IPv4-UDP packet on TUN interface.\n"));
       return;
     }
     udp = (const struct udp_packet*) &ip4[1];
@@ -1147,8 +1165,8 @@
         (ip6->next_header != IPPROTO_UDP) )
     {
       /* non-IP/UDP packet received on TUN (or with extensions) */
-      // FIXME: maybe just log with stats?
-      GNUNET_break (0);
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                 _("Received malformed IPv6-UDP packet on TUN interface.\n"));
       return;
     }
     udp = (const struct udp_packet*) &ip6[1];
@@ -1156,17 +1174,18 @@
     break;
   default:
     /* non-IP packet received on TUN!? */
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-               _("Got packet with %u bytes and protocol %u from TUN\n"),
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               _("Got non-IP packet with %u bytes and protocol %u from TUN\n"),
                (unsigned int) msize,
                ntohs (tun->proto));
-    GNUNET_break (0);
     return;
   }
   if (msize <= sizeof (struct udp_packet) + sizeof (struct dns_header))
   {    
     /* non-DNS packet received on TUN, ignore */
-    /* FIXME: case for statistics... */
+    GNUNET_STATISTICS_update (stats,
+                             gettext_noop ("# Non-DNS UDP packet received via 
TUN interface"),
+                             1, GNUNET_NO);
     return;
   }
   msize -= sizeof (struct udp_packet);
@@ -1194,7 +1213,10 @@
     dsta4->sin_addr = ip4->destination_address;
     srca4->sin_port = udp->spt;
     dsta4->sin_port = udp->dpt;
-    /* FIXME: bother with FreeBSD sin_len crap? */
+#if HAVE_SOCKADDR_IN_SIN_LEN
+    srca4->sin_len = sizeof (sizeof (struct sockaddr_in));
+    dsta4->sin_len = sizeof (sizeof (struct sockaddr_in));
+#endif
   }
   else /* ipv6 */
   {
@@ -1208,7 +1230,10 @@
     dsta6->sin6_addr = ip6->destination_address;
     srca6->sin6_port = udp->spt;
     dsta6->sin6_port = udp->dpt;
-    /* FIXME: bother with FreeBSD sin_len crap? */
+#if HAVE_SOCKADDR_IN_SIN_LEN
+    srca6->sin_len = sizeof (sizeof (struct sockaddr_in6));
+    dsta6->sin_len = sizeof (sizeof (struct sockaddr_in6));
+#endif
   }
   rr->payload = GNUNET_malloc (msize);
   rr->payload_length = msize;
@@ -1216,7 +1241,9 @@
   rr->request_id = dns->id | (request_id_gen << 16);
   request_id_gen++;
 
-  /* FIXME: case for statistics... */
+  GNUNET_STATISTICS_update (stats,
+                           gettext_noop ("# DNS requests received via TUN 
interface"),
+                           1, GNUNET_NO);
   /* start request processing state machine */
   next_phase (rr);
 }
@@ -1246,6 +1273,7 @@
   char *ipv6prefix;
 
   cfg = cfg_;
+  stats = GNUNET_STATISTICS_create ("dns", cfg);
   nc = GNUNET_SERVER_notification_context_create (server, 1);
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task,
                                 cls);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]