gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r20048 - gnunet/src/gns
Date: Sun, 26 Feb 2012 20:28:18 +0100

Author: schanzen
Date: 2012-02-26 20:28:18 +0100 (Sun, 26 Feb 2012)
New Revision: 20048

Modified:
   gnunet/src/gns/gnunet-service-gns.c
Log:
-more dht block layout fixes


Modified: gnunet/src/gns/gnunet-service-gns.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns.c 2012-02-26 19:10:50 UTC (rev 20047)
+++ gnunet/src/gns/gnunet-service-gns.c 2012-02-26 19:28:18 UTC (rev 20048)
@@ -1029,7 +1029,7 @@
  */
 void
 put_gns_record(void *cls,
-                const const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded 
*key,
+                const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *key,
                 struct GNUNET_TIME_Absolute expiration,
                 const char *name,
                 unsigned int rd_count,
@@ -1038,8 +1038,12 @@
 {
   GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Putting records into the DHT\n");
   struct GNUNET_TIME_Relative timeout;
+  struct GNSNameRecordBlock *nrb;
+  struct GNSRecordBlock *rb;
   GNUNET_HashCode name_hash;
   GNUNET_HashCode xor_hash;
+  int i;
+  uint32_t rd_payload_length;
 
   if (NULL == name) //We're done
   {
@@ -1049,6 +1053,39 @@
                                                    NULL);
     return;
   }
+  
+  rd_payload_length = rd_count * sizeof(struct GNSRecordBlock);
+  rd_payload_length += strlen(name) + sizeof(struct GNSNameRecordBlock);
+  //Calculate payload size
+  for (i=0; i<rd_count; i++)
+  {
+    rd_payload_length += rd[i].data_size;
+  }
+  
+  nrb = GNUNET_malloc(rd_payload_length);
+  
+  memcpy(&nrb->signature, signature,
+         sizeof(struct GNUNET_CRYPTO_RsaSignature));
+  //FIXME signature purpose
+  memcpy(&nrb->public_key, key,
+         sizeof(struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded));
+
+  nrb->rd_count = htonl(rd_count);
+
+  memcpy(&nrb[1], name, strlen(name)); //FIXME is this 0 terminated??
+
+  rb = (struct GNSRecordBlock *)(&nrb[1]+strlen(name));
+
+  for (i=0; i<rd_count; i++)
+  {
+    rb->type = htonl(rd[i].record_type);
+    rb->expiration = GNUNET_TIME_absolute_hton(rd[i].expiration);
+    rb->data_length = htonl(rd[i].data_size);
+    rb->flags = htonl(rd[i].flags);
+    memcpy(&rb[1], rd[i].data, rd[i].data_size);
+    rb = &rb[1] + rd[i].data_size;
+  }
+
   /**
    * FIXME magic number 20 move to config file
    */
@@ -1059,8 +1096,8 @@
                   5, //replication level
                   GNUNET_DHT_RO_NONE,
                   GNUNET_BLOCK_TYPE_TEST, //FIXME todo block plugin
-                  rd->data_size,
-                  rd->data,
+                  rd_payload_length,
+                  (char*)nrb,
                   expiration,
                   timeout,
                   NULL, //FIXME continuation needed? success check? yes ofc




reply via email to

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