gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r23344 - in gnunet/src: dns gns


From: gnunet
Subject: [GNUnet-SVN] r23344 - in gnunet/src: dns gns
Date: Tue, 21 Aug 2012 15:04:41 +0200

Author: schanzen
Date: 2012-08-21 15:04:41 +0200 (Tue, 21 Aug 2012)
New Revision: 23344

Modified:
   gnunet/src/dns/dnsstub.c
   gnunet/src/gns/Makefile.am
   gnunet/src/gns/gnunet-dns2gns.c
Log:
-bugfix dnsstub, add dns support to gns gateway

Modified: gnunet/src/dns/dnsstub.c
===================================================================
--- gnunet/src/dns/dnsstub.c    2012-08-21 12:39:15 UTC (rev 23343)
+++ gnunet/src/dns/dnsstub.c    2012-08-21 13:04:41 UTC (rev 23344)
@@ -356,6 +356,8 @@
          so,
          salen);
   rs->addrlen = salen;
+  rs->rc = rc;
+  rs->rc_cls = rc_cls;
   GNUNET_NETWORK_socket_sendto (dnsout,
                                request,
                                request_len, so, salen); 

Modified: gnunet/src/gns/Makefile.am
===================================================================
--- gnunet/src/gns/Makefile.am  2012-08-21 12:39:15 UTC (rev 23343)
+++ gnunet/src/gns/Makefile.am  2012-08-21 13:04:41 UTC (rev 23344)
@@ -295,6 +295,7 @@
   $(top_builddir)/src/util/libgnunetutil.la \
   $(top_builddir)/src/namestore/libgnunetnamestore.la \
   $(top_builddir)/src/dns/libgnunetdnsparser.la \
+       $(top_builddir)/src/dns/libgnunetdnsstub.la \
   $(GN_LIBINTL)
 gnunet_dns2gns_DEPENDENCIES = \
   libgnunetgns.la

Modified: gnunet/src/gns/gnunet-dns2gns.c
===================================================================
--- gnunet/src/gns/gnunet-dns2gns.c     2012-08-21 12:39:15 UTC (rev 23343)
+++ gnunet/src/gns/gnunet-dns2gns.c     2012-08-21 13:04:41 UTC (rev 23344)
@@ -26,6 +26,8 @@
 #include <gnunet_util_lib.h>
 #include <gnunet_dnsparser_lib.h>
 #include <gnunet_gns_service.h>
+#include <gnunet_dnsstub_lib.h>
+#include "gns.h"
 
 /**
  * Timeout for DNS requests.
@@ -33,6 +35,16 @@
 #define TIMEOUT GNUNET_TIME_UNIT_MINUTES
 
 /**
+ * Default suffix
+ */
+#define DNS_SUFFIX ".zkey.eu"
+
+/**
+ * FCFS suffix
+ */
+#define FCFS_SUFFIX "fcfs.zkey.eu"
+
+/**
  * Data kept per request.
  */
 struct Request
@@ -59,6 +71,11 @@
   struct GNUNET_GNS_LookupRequest *lookup;
 
   /**
+   * Our DNS request handle
+   */
+  struct GNUNET_DNSSTUB_RequestSocket *dns_lookup;
+
+  /**
    * Task run on timeout or shutdown to clean up without
    * response.
    */
@@ -78,6 +95,11 @@
 struct GNUNET_GNS_Handle *gns;
 
 /**
+ * Stub resolver
+ */
+struct GNUNET_DNSSTUB_Context *dns_stub;
+
+/**
  * Listen socket for IPv4.
  */
 static struct GNUNET_NETWORK_Handle *listen_socket4;
@@ -97,8 +119,22 @@
  */
 static GNUNET_SCHEDULER_TaskIdentifier t6;
 
+/**
+ * DNS suffix
+ */
+static char *dns_suffix;
 
 /**
+ * FCFS suffix
+ */
+static char *fcfs_suffix;
+
+/**
+ * IP of DNS server
+ */
+static char *dns_ip;
+
+/**
  * Task run on shutdown.  Cleans up everything.
  *
  * @param cls unused
@@ -123,6 +159,7 @@
     listen_socket6 = NULL;
   }
   GNUNET_GNS_disconnect (gns);
+  GNUNET_DNSSTUB_stop (dns_stub);
   gns = NULL;
 }
 
@@ -182,6 +219,24 @@
   GNUNET_free (request);
 }
 
+/**
+ * Iterator called on obtained result for a DNS
+ * lookup
+ *
+ * @param cls closure
+ * @param rd_count number of records
+ * @param rd the records in reply
+ */
+static void
+dns_result_processor (void *cls,
+                  struct GNUNET_DNSSTUB_RequestSocket *rs,
+                  const struct GNUNET_TUN_DnsHeader *dns,
+                  size_t r)
+{
+  struct Request *request = cls;
+  request->packet = GNUNET_DNSPARSER_parse ((char*)dns, r);
+  send_response (request);
+}
 
 /**
  * Iterator called on obtained result for a GNS
@@ -332,32 +387,37 @@
   name = GNUNET_strdup (packet->queries[0].name);
   name_len = strlen (name);
   use_gns = GNUNET_NO;
-  if ( (name_len > strlen (".zkey.eu")) &&
-       (0 == strcasecmp (".zkey.eu",
-                        &name[name_len - strlen (".zkey.eu")])) )
+  if ( (name_len > strlen (dns_suffix)) &&
+       (0 == strcasecmp (dns_suffix,
+                        &name[name_len - strlen (dns_suffix)])) )
     {
-      if (0 == strcasecmp ("fcfs.zkey.eu",
-                           &name[name_len - strlen ("fcfs.zkey.eu")]))
+      if (0 == strcasecmp (fcfs_suffix,
+                           &name[name_len - strlen (fcfs_suffix)]))
       {
-        name[name_len - strlen ("zkey.eu")] = '\0';
-        strcat (name, ".gnunet");
+        name[name_len - strlen (dns_suffix) + 1] = '\0';
+        strcat (name, GNUNET_GNS_TLD);
       }
       else
-        name[name_len - strlen (".eu")] = '\0';
+      {
+        name[name_len - strlen (dns_suffix) + 1] = '\0';
+        strcat (name, GNUNET_GNS_TLD_ZKEY);
+      }
       name_len = strlen (name);
     }
-  if ( (name_len > strlen (".gnunet")) &&
-       (0 == strcasecmp (".gnunet",
-                         &name[name_len - strlen (".gnunet")])) )
+  if ( (name_len > strlen ((GNUNET_GNS_TLD) + 1)) &&
+       (0 == strcasecmp (GNUNET_GNS_TLD,
+                         &name[name_len - strlen (GNUNET_GNS_TLD)])) )
     use_gns = GNUNET_YES;
 
-  if ( (name_len > strlen (".zkey")) &&
-       (0 == strcasecmp (".zkey",
-                         &name[name_len - strlen (".zkey")])) )
+  if ( (name_len > strlen (GNUNET_GNS_TLD_ZKEY)) &&
+       (0 == strcasecmp (GNUNET_GNS_TLD_ZKEY,
+                         &name[name_len - strlen (GNUNET_GNS_TLD_ZKEY)])) )
     use_gns = GNUNET_YES;
 
   if (GNUNET_YES == use_gns)
   {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Calling GNS\n");
       type = packet->queries[0].type;
       request->lookup = GNUNET_GNS_lookup (gns,
                                           name,
@@ -372,7 +432,17 @@
       /* FIXME: do traditional *DNS* lookup; note that
         gnunet-service-dns already has code to do this;
         factor into library to share! Why not use GNUNET_RESOLVER here?*/
-      GNUNET_break (0);
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Calling DNS at %s\n", dns_ip);
+      GNUNET_DNSPARSER_free_packet (request->packet);
+      request->dns_lookup = GNUNET_DNSSTUB_resolve2 (dns_stub,
+                                                     udp_msg,
+                                                     udp_msg_size,
+                                                     &dns_result_processor,
+                                                     request);
+
+
+
     }
   GNUNET_free (name);
 }
@@ -476,7 +546,26 @@
 run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
+  if (NULL == dns_ip)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "No DNS server specified!\n");
+    return;
+  }
+
+  if (NULL == dns_suffix)
+    dns_suffix = DNS_SUFFIX;
+
+  if (NULL == fcfs_suffix)
+    fcfs_suffix = FCFS_SUFFIX;
+
   gns = GNUNET_GNS_connect (cfg);
+
+  dns_stub = GNUNET_DNSSTUB_start (dns_ip);
+
+  if (NULL == dns_stub)
+    return;
+
   if (NULL == gns)
     return;
   listen_socket4 = GNUNET_NETWORK_socket_create (PF_INET,
@@ -556,6 +645,15 @@
       char *const *argv)
 {
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+    {'d', "dns", NULL,
+      gettext_noop ("IP of recursive dns resolver to use (required)"), 1,
+      &GNUNET_GETOPT_set_string, &dns_ip},
+    {'s', "suffix", NULL,
+      gettext_noop ("Authoritative DNS suffix to use (optional); default: 
zkey.eu"), 1,
+      &GNUNET_GETOPT_set_string, &dns_suffix},
+    {'f', "fcfs", NULL,
+      gettext_noop ("Authoritative FCFS suffix to use (optional); default: 
fcfs.zkey.eu"), 1,
+      &GNUNET_GETOPT_set_string, &fcfs_suffix},
     GNUNET_GETOPT_OPTION_END
   };
   int ret;




reply via email to

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