gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r20603 - gnunet/src/gns


From: gnunet
Subject: [GNUnet-SVN] r20603 - gnunet/src/gns
Date: Mon, 19 Mar 2012 13:20:30 +0100

Author: schanzen
Date: 2012-03-19 13:20:30 +0100 (Mon, 19 Mar 2012)
New Revision: 20603

Modified:
   gnunet/src/gns/gnunet-service-gns_interceptor.c
   gnunet/src/gns/gnunet-service-gns_resolver.c
   gnunet/src/gns/test_gns_simple_mx_lookup.c
Log:
-fix mx records postprocessing


Modified: gnunet/src/gns/gnunet-service-gns_interceptor.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_interceptor.c     2012-03-19 10:52:28 UTC 
(rev 20602)
+++ gnunet/src/gns/gnunet-service-gns_interceptor.c     2012-03-19 12:20:30 UTC 
(rev 20603)
@@ -114,8 +114,25 @@
     {
       answer_records[i].name = ilh->query->name;
       answer_records[i].type = rd[i].record_type;
-      answer_records[i].data.raw.data_len = rd[i].data_size;
-      answer_records[i].data.raw.data = (char*)rd[i].data;
+      switch(rd[i].record_type)
+      {
+       case GNUNET_GNS_RECORD_TYPE_NS:
+       case GNUNET_GNS_RECORD_TYPE_CNAME:
+       case GNUNET_GNS_RECORD_TYPE_PTR:
+         answer_records[i].data.hostname = (char*)rd[i].data;
+         break;
+       case GNUNET_GNS_RECORD_TYPE_SOA:
+         answer_records[i].data.soa =
+           (struct GNUNET_DNSPARSER_SoaRecord *)rd[i].data;
+         break;
+       case GNUNET_GNS_RECORD_MX:
+         answer_records[i].data.mx =
+           (struct GNUNET_DNSPARSER_MxRecord *)rd[i].data;
+         break;
+       default:
+        answer_records[i].data.raw.data_len = rd[i].data_size;
+        answer_records[i].data.raw.data = (char*)rd[i].data;
+      }
       answer_records[i].expiration_time = rd[i].expiration;
       answer_records[i].class = GNUNET_DNSPARSER_CLASS_INTERNET;//hmmn
     }

Modified: gnunet/src/gns/gnunet-service-gns_resolver.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_resolver.c        2012-03-19 10:52:28 UTC 
(rev 20602)
+++ gnunet/src/gns/gnunet-service-gns_resolver.c        2012-03-19 12:20:30 UTC 
(rev 20603)
@@ -954,10 +954,12 @@
   int i;
   char* s_value;
   char new_s_value[256];
+  char new_mx_value[sizeof(struct GNUNET_DNSPARSER_MxRecord)+256];
   int s_len;
   struct GNUNET_NAMESTORE_RecordData p_rd[rd_count];
   char* pos;
   char* trailer;
+  struct GNUNET_DNSPARSER_MxRecord *mx;
 
   if (rd_count > 0)
     memcpy(p_rd, rd, rd_count*sizeof(struct GNUNET_NAMESTORE_RecordData));
@@ -978,11 +980,21 @@
      * also try to resolve the A/AAAA records (RFC1035)
      * FIXME
      */
-    s_value = (char*)rd[i].data;
-    s_len = rd[i].data_size;
+    if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
+    {
+      mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data;
+      s_value = (char*)&mx[1];
+    }
+    else
+    {
+      s_value = (char*)rd[i].data;
+    }
+    
+    s_len = strlen(s_value)+1;
 
     if (s_len < 3)
     {
+      /* no postprocessing */
       p_rd[i].data = rd[i].data;
       continue;
     }
@@ -1007,8 +1019,24 @@
       pos = new_s_value+s_len-2;
       strcpy(pos, trailer);
       pos += strlen(trailer);
-      p_rd[i].data = new_s_value;
-      p_rd[i].data_size = strlen(new_s_value)+1;
+      if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
+      {
+
+        p_rd[i].data_size = sizeof(struct GNUNET_DNSPARSER_MxRecord)
+          +strlen(new_s_value)+1;
+        
+        p_rd[i].data = new_mx_value;
+        mx = (struct GNUNET_DNSPARSER_MxRecord*)p_rd[i].data;
+        mx->preference =
+          ((struct GNUNET_DNSPARSER_MxRecord*)rd[i].data)->preference;
+        memcpy((char*)&mx[1], new_s_value, strlen(new_s_value)+1);
+        mx->mxhost = (char*)&mx[1];
+      }
+      else
+      {
+        p_rd[i].data = new_s_value;
+        p_rd[i].data_size = strlen(new_s_value)+1;
+      }
       GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
                  "Expanded to %s\n", new_s_value);
     }

Modified: gnunet/src/gns/test_gns_simple_mx_lookup.c
===================================================================
--- gnunet/src/gns/test_gns_simple_mx_lookup.c  2012-03-19 10:52:28 UTC (rev 
20602)
+++ gnunet/src/gns/test_gns_simple_mx_lookup.c  2012-03-19 12:20:30 UTC (rev 
20603)
@@ -97,7 +97,7 @@
   char* addr;
   int mx_found = 0;
   int ip_found = 0;
-  char* mx;
+  struct GNUNET_DNSPARSER_MxRecord *mx;
   
   if (rd_count == 0)
   {
@@ -126,8 +126,11 @@
       }
       else if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
       {
-        mx = (char*)rd[i].data;
-        if (0 == strcmp(mx, TEST_EXPECTED_MX))
+        mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data;
+        mx->mxhost = (char*)&mx[1];
+        GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                    "Got MX %s\n", mx->mxhost);
+        if (0 == strcmp(mx->mxhost, TEST_EXPECTED_MX))
         {
           GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                       "%s correctly resolved to %s!\n", TEST_DOMAIN,
@@ -250,6 +253,7 @@
   struct GNUNET_NAMESTORE_RecordData rd;
   char* ip = TEST_IP;
   struct in_addr *mail = GNUNET_malloc(sizeof(struct in_addr));
+  struct GNUNET_DNSPARSER_MxRecord *mx_record;
   rd.expiration = GNUNET_TIME_absolute_get_forever ();
   GNUNET_assert(1 == inet_pton (AF_INET, ip, mail));
   
@@ -283,9 +287,13 @@
                                sig,
                                NULL,
                                NULL);
-
-  rd.data_size = strlen(TEST_MX_NAME)+1;
-  rd.data = TEST_MX_NAME;
+  
+  rd.data_size = sizeof(struct 
GNUNET_DNSPARSER_MxRecord)+strlen(TEST_MX_NAME)+1;
+  mx_record = GNUNET_malloc(rd.data_size);
+  mx_record->preference = 1;
+  mx_record->mxhost = (char*)&mx_record[1];
+  strcpy(mx_record->mxhost, TEST_MX_NAME);
+  rd.data = mx_record;
   rd.record_type = GNUNET_GNS_RECORD_MX;
   sig = GNUNET_NAMESTORE_create_signature(bob_key,
                                           GNUNET_TIME_absolute_get_forever(),
@@ -300,6 +308,7 @@
                                sig,
                                &commence_testing,
                                NULL);
+  GNUNET_free(mx_record);
   GNUNET_free(mail);
   GNUNET_free(sig);
   GNUNET_CRYPTO_rsa_key_free(bob_key);




reply via email to

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