- at least compiling
authorMatthias Wachs <wachs@net.in.tum.de>
Thu, 1 Mar 2012 12:30:18 +0000 (12:30 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Thu, 1 Mar 2012 12:30:18 +0000 (12:30 +0000)
src/namestore/gnunet-service-namestore.c
src/namestore/namestore.h
src/namestore/namestore_api.c
src/namestore/test_namestore_api_create.c
src/namestore/test_namestore_api_lookup.c
src/namestore/test_namestore_record_serialization.c

index 254c27fef311a9c3676788affc070a556fb4d982..67c83bc4262991cd87ca7d8206ed70d13dbf4809 100644 (file)
@@ -212,7 +212,6 @@ handle_lookup_name_it (void *cls,
   struct GNUNET_NAMESTORE_RecordData *rd_selected = NULL;
   char *rd_tmp;
   char *name_tmp;
-  char *rd_ser;
   size_t rd_ser_len;
   struct GNUNET_CRYPTO_RsaSignature *signature_tmp;
 
@@ -254,18 +253,22 @@ handle_lookup_name_it (void *cls,
       copied_elements = rd_count;
       rd_selected = (struct GNUNET_NAMESTORE_RecordData *) rd;
     }
-    rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, copied_elements, rd_selected);
   }
   else
   {
     /* No results */
     copied_elements = 0;
     rd_selected = NULL;
-    rd_ser = NULL;
-    rd_ser_len = 0;
     expire = GNUNET_TIME_UNIT_ZERO_ABS;
   }
 
+
+
+  rd_ser_len = GNUNET_NAMESTORE_records_get_size(copied_elements, rd_selected);
+  char rd_ser[rd_ser_len];
+  GNUNET_NAMESTORE_records_serialize(copied_elements, rd_selected, rd_ser_len, rd_ser);
+
+
   if ((copied_elements == rd_count) && (signature != NULL))
       contains_signature = GNUNET_YES;
 
@@ -283,6 +286,7 @@ handle_lookup_name_it (void *cls,
   lnr_msg->gns_header.header.type = ntohs (GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE);
   lnr_msg->gns_header.header.size = ntohs (r_size);
   lnr_msg->gns_header.r_id = htonl (lnc->request_id);
+  lnr_msg->rd_count = htons (rd_count);
   lnr_msg->rd_len = htons (rd_ser_len);
   lnr_msg->name_len = htons (name_len);
   lnr_msg->expire = GNUNET_TIME_absolute_hton(expire);
@@ -303,7 +307,6 @@ handle_lookup_name_it (void *cls,
   }
   memcpy (name_tmp, name, name_len);
   memcpy (rd_tmp, rd_ser, rd_ser_len);
-  GNUNET_free_non_null (rd_ser);
 
   if (GNUNET_YES == contains_signature)
     memcpy (signature_tmp, signature, sizeof (struct GNUNET_CRYPTO_RsaSignature));
@@ -379,7 +382,6 @@ static void handle_record_put (void *cls,
   struct GNUNET_NAMESTORE_Client *nc;
   struct GNUNET_TIME_Absolute expire;
   struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key;
-  struct GNUNET_NAMESTORE_RecordData *rd;
   struct GNUNET_CRYPTO_RsaSignature *signature;
   struct RecordPutResponseMessage rpr_msg;
   size_t name_len;
@@ -411,10 +413,11 @@ static void handle_record_put (void *cls,
   struct RecordPutMessage * rp_msg = (struct RecordPutMessage *) message;
 
   rid = ntohl (rp_msg->gns_header.r_id);
+  msg_size = ntohs (rp_msg->gns_header.header.size);
   key_len = sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded);
   name_len = ntohs (rp_msg->name_len);
+  rd_count = ntohs (rp_msg->rd_count);
   rd_ser_len = ntohs(rp_msg->rd_len);
-  msg_size = ntohs (message->size);
   msg_size_exp = sizeof (struct RecordPutMessage) + key_len + name_len  + rd_ser_len;
 
   if (msg_size != msg_size_exp)
@@ -445,8 +448,10 @@ static void handle_record_put (void *cls,
 
   expire = GNUNET_TIME_absolute_ntoh(rp_msg->expire);
   signature = (struct GNUNET_CRYPTO_RsaSignature *) &rp_msg->signature;
+
   rd_ser = &name[name_len];
-  rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len);
+  struct GNUNET_NAMESTORE_RecordData rd[rd_count];
+  GNUNET_NAMESTORE_records_deserialize(rd_ser_len, rd_ser, rd_count, rd);
 
   GNUNET_HashCode zone_hash;
   GNUNET_CRYPTO_hash (zone_key, key_len, &zone_hash);
@@ -461,8 +466,6 @@ static void handle_record_put (void *cls,
                                 rd_count, rd,
                                 signature);
 
-  GNUNET_NAMESTORE_records_free (rd_count, rd);
-
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Putting record for name `%s': %s\n",
       name, (res == GNUNET_OK) ? "OK" : "FAIL");
 
@@ -496,9 +499,11 @@ GNUNET_NAMESTORE_create_signature (const struct GNUNET_CRYPTO_RsaPrivateKey *key
   struct GNUNET_CRYPTO_RsaSignature *sig = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignature));
   struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose;
   size_t rd_ser_len;
-  char *rd_ser;
 
-  rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, rd_count, rd);
+  rd_ser_len = GNUNET_NAMESTORE_records_get_size(rd_count, rd);
+  char rd_ser[rd_ser_len];
+  GNUNET_NAMESTORE_records_serialize(rd_count, rd, rd_ser_len, rd_ser);
+
   sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len);
 
   sig_purpose->size = htonl (sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose)+ rd_ser_len);
@@ -566,7 +571,6 @@ static void handle_record_create (void *cls,
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n", "NAMESTORE_RECORD_CREATE");
   struct GNUNET_NAMESTORE_Client *nc;
-  struct GNUNET_NAMESTORE_RecordData *rd;
   struct CreateRecordContext crc;
   struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pub;
   GNUNET_HashCode pubkey_hash;
@@ -603,6 +607,7 @@ static void handle_record_create (void *cls,
   rid = ntohl (rp_msg->gns_header.r_id);
   name_len = ntohs (rp_msg->name_len);
   msg_size = ntohs (message->size);
+  rd_count = ntohs (rp_msg->rd_count);
   rd_ser_len = ntohs (rp_msg->rd_len);
   key_len = ntohs (rp_msg->pkey_len);
   msg_size_exp = sizeof (struct RecordCreateMessage) + key_len + name_len + rd_ser_len;
@@ -633,7 +638,8 @@ static void handle_record_create (void *cls,
     return;
   }
 
-  rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len);
+  struct GNUNET_NAMESTORE_RecordData rd[rd_count];
+  GNUNET_NAMESTORE_records_deserialize(rd_ser_len, rd_ser, rd_count, rd);
   GNUNET_assert (rd_count == 1);
 
   /* Extracting and converting private key */
@@ -650,9 +656,6 @@ static void handle_record_create (void *cls,
   /* Get existing records for name */
   res = GSN_database->iterate_records(GSN_database->cls, &pubkey_hash, name_tmp, 0, &handle_create_record_it, &crc);
 
-  GNUNET_CRYPTO_rsa_key_free(pkey);
-  GNUNET_NAMESTORE_records_free(rd_count, rd);
-
   GNUNET_SERVER_receive_done (client, GNUNET_OK);
 }
 
@@ -788,7 +791,9 @@ void zone_iteration_proc (void *cls,
 
   if ((rd_count > 0) && (rd != NULL))
   {
-    len = GNUNET_NAMESTORE_records_serialize (&zipr->rd_ser, rd_count, rd);
+    len = GNUNET_NAMESTORE_records_get_size(rd_count, rd);
+    zipr->rd_ser = GNUNET_malloc (len);
+    GNUNET_NAMESTORE_records_serialize(rd_count, rd, len, zipr->rd_ser);
     zipr->rd_ser_len = len;
   }
 }
index ab0da612647ae777e919b5d0208eaa98e54b0490..c8353e83b5cf5c39b3381cc3e4feed012441d119 100644 (file)
@@ -141,6 +141,8 @@ struct LookupNameResponseMessage
 
   uint16_t rd_len;
 
+  uint16_t rd_count;
+
   int32_t contains_sig;
 
   /* Requested record type */
@@ -167,6 +169,8 @@ struct RecordPutMessage
   /* Length of serialized rd data */
   uint16_t rd_len;
 
+  uint16_t rd_count;
+
   /* Length of pubkey */
   uint16_t key_len;
 
@@ -220,6 +224,9 @@ struct RecordCreateMessage
   /* Record data length */
   uint16_t rd_len;
 
+  /* Record count */
+  uint16_t rd_count;
+
   /* private key length */
   uint16_t pkey_len;
 };
index 5dea13c5e77fbb61724c6125c1bc9ce11c1446f8..d3d5e60efbeddb710fe7429e541ab6819fdb3d77 100644 (file)
@@ -815,7 +815,7 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
   memcpy (name_tmp, name, name_len);
   msg->expire = GNUNET_TIME_absolute_hton (expire);
   msg->rd_len = htons (rd_ser_len);
-
+  msg->rd_count = htons (rd_count);
 
   memcpy (rd_tmp, rd_ser, rd_ser_len);
   GNUNET_free (rd_ser);
@@ -928,6 +928,7 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
   msg->gns_header.header.size = htons (msg_size);
   msg->gns_header.r_id = htonl (rid);
   msg->name_len = htons (name_len);
+  msg->rd_count = htons (1);
   msg->rd_len = htons (rd_ser_len);
   msg->pkey_len = htons (key_len);
   memcpy (pkey_tmp, pkey_enc, key_len);
index 5caf877c28f01ba006a33e7a003c01e80bffa673..e4f9cf124ba2f988939b66819cb65aca34ea450e 100644 (file)
@@ -286,7 +286,6 @@ run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL);
-  char * rd_ser;
   size_t rd_ser_len;
 
   /* load privat key */
@@ -298,7 +297,10 @@ run (void *cls, char *const *args, const char *cfgfile,
   /* create record */
   s_name = "dummy.dummy.gnunet";
   s_rd = create_record (RECORDS);
-  rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, RECORDS, s_rd);
+
+  rd_ser_len = GNUNET_NAMESTORE_records_get_size(RECORDS, s_rd);
+  char rd_ser[rd_ser_len];
+  GNUNET_NAMESTORE_records_serialize(RECORDS, s_rd, rd_ser_len, rd_ser);
 
   /* sign */
   struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len);
index d20a1cdafd20e2f8c724e05ff1c97ed56d80b8a6..1d91c32c6c420a638e485916864a538447c89cde 100644 (file)
@@ -232,7 +232,7 @@ run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL);
-  char * rd_ser;
+
   size_t rd_ser_len;
 
   /* load privat key */
@@ -244,7 +244,10 @@ run (void *cls, char *const *args, const char *cfgfile,
   /* create record */
   s_name = "dummy.dummy.gnunet";
   s_rd = create_record (RECORDS);
-  rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, RECORDS, s_rd);
+
+  rd_ser_len = GNUNET_NAMESTORE_records_get_size(RECORDS, s_rd);
+  char rd_ser[rd_ser_len];
+  GNUNET_NAMESTORE_records_serialize(RECORDS, s_rd, rd_ser_len, rd_ser);
 
   /* sign */
   struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len);
index cd60a5dda49096499c337a7fb1a9decb7a11b8c9..b389e7fafc5bda122e297374adb76869514f4a55 100644 (file)
@@ -36,15 +36,12 @@ static void
 run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
-  char * rd_ser = NULL;
   size_t len;
   int c;
-  int dst_elem = 0;
 
   int rd_count = 3;
   size_t data_len;
   struct GNUNET_NAMESTORE_RecordData src[rd_count];
-  struct GNUNET_NAMESTORE_RecordData *dst = NULL;
 
   memset(src, '\0', rd_count * sizeof (struct GNUNET_NAMESTORE_RecordData));
 
@@ -61,18 +58,20 @@ run (void *cls, char *const *args, const char *cfgfile,
   }
   res = 0;
 
-  len = GNUNET_NAMESTORE_records_serialize (&rd_ser, rd_count, src);
+  len = GNUNET_NAMESTORE_records_get_size(rd_count, src);
+  char rd_ser[len];
+  GNUNET_assert (len == GNUNET_NAMESTORE_records_serialize(rd_count, src, len, rd_ser));
+
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Serialized data len: %u\n",len);
 
   GNUNET_assert (rd_ser != NULL);
 
-  dst_elem = GNUNET_NAMESTORE_records_deserialize(&dst, rd_ser, len);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Deserialized elements: %u\n",dst_elem);
+  struct GNUNET_NAMESTORE_RecordData dst[rd_count];
+  GNUNET_assert (GNUNET_OK == GNUNET_NAMESTORE_records_deserialize (len, rd_ser, rd_count, dst));
 
-  GNUNET_assert (dst_elem == rd_count);
   GNUNET_assert (dst != NULL);
 
-  for (c = 0; c < dst_elem; c++)
+  for (c = 0; c < rd_count; c++)
   {
     if (src[c].data_size != dst[c].data_size)
     {
@@ -116,11 +115,6 @@ run (void *cls, char *const *args, const char *cfgfile,
 
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Element [%i]: EQUAL\n", c);
   }
-
-  for (c = 0; c < rd_count; c++)
-    GNUNET_free ((void *)  src[c].data);
-  GNUNET_NAMESTORE_records_free (dst_elem, dst);
-  GNUNET_free (rd_ser);
 }
 
 static int