gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r22049 - in gnunet/src: gns namestore


From: gnunet
Subject: [GNUnet-SVN] r22049 - in gnunet/src: gns namestore
Date: Sat, 16 Jun 2012 21:22:49 +0200

Author: schanzen
Date: 2012-06-16 21:22:49 +0200 (Sat, 16 Jun 2012)
New Revision: 22049

Modified:
   gnunet/src/gns/gnunet-service-gns_resolver.c
   gnunet/src/namestore/namestore_common.c
Log:
-proper data layout vpn record

Modified: gnunet/src/gns/gnunet-service-gns_resolver.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_resolver.c        2012-06-16 19:14:55 UTC 
(rev 22048)
+++ gnunet/src/gns/gnunet-service-gns_resolver.c        2012-06-16 19:22:49 UTC 
(rev 22049)
@@ -1593,6 +1593,8 @@
   struct GNUNET_CRYPTO_HashAsciiEncoded s_pid;
   struct GNUNET_HashCode serv_desc;
   struct GNUNET_CRYPTO_HashAsciiEncoded s_sd;
+  char* pos;
+  size_t len = (sizeof (uint32_t) * 2) + (sizeof (struct GNUNET_HashCode) * 2);
   
   /* We cancel here as to not include the ns lookup in the timeout */
   if (rh->timeout_task != GNUNET_SCHEDULER_NO_TASK)
@@ -1611,8 +1613,7 @@
   }
 
   /* Extracting VPN information FIXME rd parsing with NS API?*/
-  if (4 != SSCANF ((char*)rd, "%d:%d:%s:%s", &af, &proto,
-                   (char*)&s_pid, (char*)&s_sd))
+  if (len != rd->data_size)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "GNS_PHASE_REC_VPN-%llu: Error parsing VPN RR!\n",
@@ -1621,6 +1622,16 @@
     return;
   }
 
+  pos = (char*)rd;
+  memcpy (&af, pos, sizeof (uint32_t));
+  pos += sizeof (uint32_t);
+  memcpy (&proto, pos, sizeof (uint32_t));
+  pos += sizeof (uint32_t);
+  memcpy (&s_pid, pos, sizeof (struct GNUNET_HashCode));
+  pos += sizeof (struct GNUNET_HashCode);
+  memcpy (&s_sd, pos, sizeof (struct GNUNET_HashCode));
+
+
   if ((GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_pid, &peer_id)) 
||
       (GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_sd, &serv_desc)))
   {

Modified: gnunet/src/namestore/namestore_common.c
===================================================================
--- gnunet/src/namestore/namestore_common.c     2012-06-16 19:14:55 UTC (rev 
22048)
+++ gnunet/src/namestore/namestore_common.c     2012-06-16 19:22:49 UTC (rev 
22049)
@@ -319,6 +319,13 @@
   uint32_t soa_retry;
   uint32_t soa_expire;
   uint32_t soa_min;
+  uint32_t *af;
+  uint32_t *proto;
+  char* vpn_str;
+  struct GNUNET_HashCode *h_peer;
+  struct GNUNET_HashCode *h_serv;
+  struct GNUNET_CRYPTO_HashAsciiEncoded s_peer;
+  struct GNUNET_CRYPTO_HashAsciiEncoded s_serv;
 
   switch (type)
   {
@@ -377,7 +384,16 @@
   case GNUNET_NAMESTORE_TYPE_LEHO:
     return GNUNET_strndup (data, data_size);
   case GNUNET_NAMESTORE_TYPE_VPN:
-    return GNUNET_strndup (data, data_size);
+    af = (uint32_t*)data;
+    proto = (uint32_t*)((char*)af + sizeof (uint32_t));
+    h_peer = (struct GNUNET_HashCode*)((char*)proto + sizeof (struct 
GNUNET_HashCode));
+    h_serv = (struct GNUNET_HashCode*)((char*)h_peer + sizeof (struct 
GNUNET_HashCode));
+
+    GNUNET_CRYPTO_hash_to_enc (h_peer, &s_peer);
+    GNUNET_CRYPTO_hash_to_enc (h_serv, &s_serv);
+    if (GNUNET_OK != GNUNET_asprintf (&vpn_str, "%d:%d:%s:%s", af, proto, 
(char*)&s_peer, (char*)&s_serv))
+      return NULL;
+    return vpn_str;
   default:
     GNUNET_break (0);
   }
@@ -416,11 +432,12 @@
   uint32_t soa_retry;
   uint32_t soa_expire;
   uint32_t soa_min;
-  struct GNUNET_HashCode hash;
+  struct GNUNET_HashCode *h_peer;
+  struct GNUNET_HashCode *h_serv;
   struct GNUNET_CRYPTO_HashAsciiEncoded s_peer;
   struct GNUNET_CRYPTO_HashAsciiEncoded s_serv;
-  int af;
-  int proto;
+  uint32_t* af;
+  uint32_t* proto;
   
   switch (type)
   {
@@ -503,18 +520,26 @@
     *data_size = strlen (s);
     return GNUNET_OK;
   case GNUNET_NAMESTORE_TYPE_VPN:
+    
+    *data_size = sizeof (uint32_t) * 2;
+    *data_size += sizeof (struct GNUNET_HashCode) * 2;
+    *data = GNUNET_malloc (*data_size);
+    af = (uint32_t*)(*data);
+    proto = (uint32_t*) ((char*)af + sizeof (uint32_t));
+    h_peer = (struct GNUNET_HashCode*)((char*)proto + sizeof (uint32_t));
+    h_serv = (struct GNUNET_HashCode*)((char*)h_peer + sizeof (struct 
GNUNET_HashCode));
+    
     if (4 != SSCANF (s,"%d:%d:%s:%s",
-                     &af, &proto, (char*)&s_peer, (char*)&s_serv))
+                     af, proto, (char*)&s_peer, (char*)&s_serv))
     {
       return GNUNET_SYSERR;
     }
-    if ((GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_peer, &hash)) 
||
-        (GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_serv, &hash)))
+    if ((GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_peer, h_peer)) 
||
+        (GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_serv, h_serv)))
     {
+      GNUNET_free (*data);
       return GNUNET_SYSERR;
     }
-    *data = GNUNET_strdup (s);
-    *data_size = strlen (s);
     return GNUNET_OK;
   default:
     GNUNET_break (0);




reply via email to

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