-fix mxrr
authorMartin Schanzenbach <mschanzenbach@posteo.de>
Wed, 21 Mar 2012 14:58:41 +0000 (14:58 +0000)
committerMartin Schanzenbach <mschanzenbach@posteo.de>
Wed, 21 Mar 2012 14:58:41 +0000 (14:58 +0000)
src/gns/gnunet-service-gns_resolver.c
src/gns/test_gns_simple_mx_lookup.c

index e95030db670589c81401c16c625be65d96a5cbf0..cd4b0f1fe37f98fe321a2ee83f537a128443bcb4 100644 (file)
@@ -943,12 +943,11 @@ finish_lookup(struct ResolverHandle *rh,
   int i;
   char* s_value;
   char new_s_value[256];
-  char new_mx_value[sizeof(struct GNUNET_DNSPARSER_MxRecord)+256];
+  char new_mx_value[sizeof(uint16_t)+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));
@@ -971,8 +970,7 @@ finish_lookup(struct ResolverHandle *rh,
      */
     if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
     {
-      mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data;
-      s_value = (char*)&mx[1];
+      s_value = (char*)rd[i].data+sizeof(uint16_t);
     }
     else
     {
@@ -1011,15 +1009,13 @@ finish_lookup(struct ResolverHandle *rh,
       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_size = sizeof(uint16_t)+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];
+        /* cpy preference */
+        memcpy(new_mx_value, (char*)rd[i].data, sizeof(uint16_t));
+        /* cpy string */
+        memcpy(new_mx_value+sizeof(uint16_t), new_s_value, strlen(new_s_value)+1);
       }
       else
       {
index dbdc5b6eb9cbb92f6c5d13a08061e42867b7676e..caf95177c54c37c541de50213a9127bc224aef8c 100644 (file)
@@ -97,7 +97,8 @@ on_lookup_result(void *cls, uint32_t rd_count,
   char* addr;
   int mx_found = 0;
   int ip_found = 0;
-  struct GNUNET_DNSPARSER_MxRecord *mx;
+  uint16_t mx_preference;
+  char* mx;
   
   if (rd_count == 0)
   {
@@ -126,11 +127,11 @@ on_lookup_result(void *cls, uint32_t rd_count,
       }
       else if (rd[i].record_type == GNUNET_GNS_RECORD_MX)
       {
-        mx = (struct GNUNET_DNSPARSER_MxRecord*)rd[i].data;
-        mx->mxhost = (char*)&mx[1];
+        mx = (char*)rd[i].data+sizeof(uint16_t);
+        mx_preference = *(uint16_t*)rd[i].data;
         GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                    "Got MX %s\n", mx->mxhost);
-        if (0 == strcmp(mx->mxhost, TEST_EXPECTED_MX))
+                    "Got MX %s with preference %d\n", mx, mx_preference);
+        if (0 == strcmp(mx, TEST_EXPECTED_MX))
         {
           GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                       "%s correctly resolved to %s!\n", TEST_DOMAIN,
@@ -253,7 +254,8 @@ do_lookup(void *cls, const struct GNUNET_PeerIdentity *id,
   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;
+  char *mx_record;
+  uint16_t mx_preference = 1;
   rd.expiration = GNUNET_TIME_absolute_get_forever ();
   GNUNET_assert(1 == inet_pton (AF_INET, ip, mail));
   
@@ -289,10 +291,9 @@ do_lookup(void *cls, const struct GNUNET_PeerIdentity *id,
                                NULL);
   
   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);
+  mx_record = GNUNET_malloc(sizeof(uint16_t)+strlen(TEST_MX_NAME)+1);
+  memcpy(mx_record, &mx_preference, sizeof(uint16_t));
+  strcpy(mx_record+sizeof(uint16_t), TEST_MX_NAME);
   rd.data = mx_record;
   rd.record_type = GNUNET_GNS_RECORD_MX;
   sig = GNUNET_NAMESTORE_create_signature(bob_key,