Fix the lack of memrchr on W32
[oweals/gnunet.git] / src / gns / gnunet-dns2gns.c
index 55d6cc0153821d1d8dd00449af05127c17404f48..1b49c294aaacdff5db0ac88a48200a504ab00b29 100644 (file)
@@ -281,14 +281,14 @@ result_processor (void *cls,
   request->lookup = NULL;
   packet = request->packet;
   packet->flags.query_or_response = 1;
-  packet->flags.return_code = GNUNET_DNSPARSER_RETURN_CODE_NO_ERROR;
+  packet->flags.return_code = GNUNET_TUN_DNS_RETURN_CODE_NO_ERROR;
   packet->flags.checking_disabled = 0;
   packet->flags.authenticated_data = 1;
   packet->flags.zero = 0;
   packet->flags.recursion_available = 1;
   packet->flags.message_truncated = 0;
   packet->flags.authoritative_answer = 0;
-  //packet->flags.opcode = GNUNET_DNSPARSER_OPCODE_STATUS; // ???
+  //packet->flags.opcode = GNUNET_TUN_DNS_OPCODE_STATUS; // ???
   for (i=0;i<rd_count;i++)
     {
       rec.expiration_time.abs_value_us = rd[i].expiration_time;
@@ -297,7 +297,7 @@ result_processor (void *cls,
        case GNUNET_DNSPARSER_TYPE_A:
          GNUNET_assert (sizeof (struct in_addr) == rd[i].data_size);
          rec.name = GNUNET_strdup (packet->queries[0].name);
-         rec.class = GNUNET_DNSPARSER_CLASS_INTERNET;
+         rec.class = GNUNET_TUN_DNS_CLASS_INTERNET;
          rec.type = GNUNET_DNSPARSER_TYPE_A;
          rec.data.raw.data = GNUNET_malloc (sizeof (struct in_addr));
          memcpy (rec.data.raw.data,
@@ -312,7 +312,7 @@ result_processor (void *cls,
          GNUNET_assert (sizeof (struct in6_addr) == rd[i].data_size);
          rec.name = GNUNET_strdup (packet->queries[0].name);
          rec.data.raw.data = GNUNET_malloc (sizeof (struct in6_addr));
-         rec.class = GNUNET_DNSPARSER_CLASS_INTERNET;
+         rec.class = GNUNET_TUN_DNS_CLASS_INTERNET;
          rec.type = GNUNET_DNSPARSER_TYPE_AAAA;
          memcpy (rec.data.raw.data,
                  rd[i].data,
@@ -325,7 +325,7 @@ result_processor (void *cls,
        case GNUNET_DNSPARSER_TYPE_CNAME:
          rec.name = GNUNET_strdup (packet->queries[0].name);
          rec.data.hostname = strdup (rd[i].data);
-         rec.class = GNUNET_DNSPARSER_CLASS_INTERNET;
+         rec.class = GNUNET_TUN_DNS_CLASS_INTERNET;
          rec.type = GNUNET_DNSPARSER_TYPE_CNAME;
          memcpy (rec.data.hostname,
                  rd[i].data,
@@ -362,12 +362,9 @@ handle_request (struct GNUNET_NETWORK_Handle *lsock,
   struct Request *request;
   struct GNUNET_DNSPARSER_Packet *packet;
   char *name;
-  char *dot;
-  char *nname;
   size_t name_len;
   int type;
   int use_gns;
-  struct GNUNET_CRYPTO_ShortHashCode zone;
 
   packet = GNUNET_DNSPARSER_parse (udp_msg, udp_msg_size);
   if (NULL == packet)
@@ -414,73 +411,60 @@ handle_request (struct GNUNET_NETWORK_Handle *lsock,
   name = GNUNET_strdup (packet->queries[0].name);
   name_len = strlen (name);
   use_gns = GNUNET_NO;
-  if ( (name_len > strlen (dns_suffix)) &&
+
+  
+  if ( (name_len > strlen (fcfs_suffix)) &&
+       (0 == strcasecmp (fcfs_suffix,
+                        &name[name_len - strlen (fcfs_suffix)])) )
+  {
+    /* replace ".fcfs.zkey.eu" with ".gnu" */
+    strcpy (&name[name_len - strlen (fcfs_suffix)],
+           ".gnu");
+    use_gns = GNUNET_YES;
+  } else if ( (name_len > strlen (dns_suffix)) &&
        (0 == strcasecmp (dns_suffix,
                         &name[name_len - strlen (dns_suffix)])) )
-    {
-      /* Test if '.zkey' was requested */
-      name[name_len - strlen (dns_suffix)] = '\0';
-      dot = strrchr (name, (int) '.');
-      if ( (NULL != dot) &&
-          (GNUNET_OK ==
-           GNUNET_CRYPTO_short_hash_from_string (dot + 1, &zone)) )
-      {
-       /* valid '.zkey' name */
-       GNUNET_asprintf (&nname, 
-                        "%s.%s", 
-                        name, 
-                        GNUNET_GNS_TLD_ZKEY);
-       GNUNET_free (name);
-       name = nname;
-      }
-      else
-      {        
-       /* try '.gads' name */
-       GNUNET_asprintf (&nname, 
-                        "%s.%s", 
-                        name, 
-                        GNUNET_GNS_TLD);
-       GNUNET_free (name);
-       name = nname;
-      }
-      name_len = strlen (name);
-    }
-  if ( (name_len >= strlen ((GNUNET_GNS_TLD))) &&
-       (0 == strcasecmp (GNUNET_GNS_TLD,
-                         &name[name_len - strlen (GNUNET_GNS_TLD)])) )
+  {
+    /* replace ".fcfs.zkey.eu" with ".zkey" */
+    strcpy (&name[name_len - strlen (dns_suffix)],
+           ".zkey");
     use_gns = GNUNET_YES;
-
-  if ( (name_len > strlen (GNUNET_GNS_TLD_ZKEY)) &&
-       (0 == strcasecmp (GNUNET_GNS_TLD_ZKEY,
-                         &name[name_len - strlen (GNUNET_GNS_TLD_ZKEY)])) )
+  } else if ( (name_len > strlen (".gnu")) &&
+       (0 == strcasecmp (".gnu",
+                        &name[name_len - strlen (".gnu")])) )
+  {
+    /* name is in GNS */
     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,
-                                          &my_zone,
-                                          type,
-                                          GNUNET_NO,
-                                          NULL /* no shorten */,
-                                          &result_processor,
-                                          request);
-    }
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+               "Calling GNS on `%s'\n",
+               name);
+    type = packet->queries[0].type;
+    request->lookup = GNUNET_GNS_lookup (gns,
+                                        name,
+                                        &my_zone,
+                                        type,
+                                        GNUNET_NO,
+                                        NULL /* no shorten */,
+                                        &result_processor,
+                                        request);
+  }
   else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Calling DNS at %s\n", dns_ip);
-      GNUNET_DNSPARSER_free_packet (request->packet);
-      request->packet = NULL;
-      request->dns_lookup = GNUNET_DNSSTUB_resolve2 (dns_stub,
-                                                     udp_msg,
-                                                     udp_msg_size,
-                                                     &dns_result_processor,
-                                                     request);
-    }
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+               "Using DNS resolver IP `%s' to resolve `%s'\n", 
+               dns_ip,
+               name);
+    GNUNET_DNSPARSER_free_packet (request->packet);
+    request->packet = NULL;
+    request->dns_lookup = GNUNET_DNSSTUB_resolve2 (dns_stub,
+                                                  udp_msg,
+                                                  udp_msg_size,
+                                                  &dns_result_processor,
+                                                  request);
+  }
   GNUNET_free (name);
 }