- using de/serialization functionality
authorMatthias Wachs <wachs@net.in.tum.de>
Tue, 28 Feb 2012 16:14:06 +0000 (16:14 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Tue, 28 Feb 2012 16:14:06 +0000 (16:14 +0000)
src/namestore/Makefile.am
src/namestore/gnunet-service-namestore.c
src/namestore/namestore.h
src/namestore/namestore_api.c
src/namestore/test_namestore_api.c
src/namestore/test_namestore_api.conf

index 2e9a99d5f942f6d1c55ceb1b100ab7d7c09431ca..47517b9c850fbc33a3875ff4e72c159343a075df 100644 (file)
@@ -23,19 +23,20 @@ endif
 
 
 check_PROGRAMS = \
- $(SQLITE_TESTS) 
+ $(SQLITE_TESTS) \
+ test_namestore_api \
+ test_namestore_api_zone_iteration \
+ test_namestore_record_serialization
 
 if HAVE_EXPERIMENTAL
-check_PROGRAMS += test_namestore_api \
-test_namestore_api_zone_iteration \
-test_namestore_record_serialization
+ check_PROGRAMS
 endif
 
 lib_LTLIBRARIES = \
   libgnunetnamestore.la
-
+  
 libgnunetnamestore_la_SOURCES = \
-  namestore_api.c namestore.h 
+  namestore_api.c namestore.h
 libgnunetnamestore_la_LIBADD = \
   $(top_builddir)/src/statistics/libgnunetstatistics.la \
   $(top_builddir)/src/util/libgnunetutil.la \
@@ -72,13 +73,15 @@ libgnunet_plugin_namestore_sqlite_la_LDFLAGS = \
 
 
 test_namestore_api_SOURCES = \
- test_namestore_api.c
+ test_namestore_api.c \
+ namestore_common.c
 test_namestore_api_LDADD = \
   $(top_builddir)/src/util/libgnunetutil.la \
   $(top_builddir)/src/namestore/libgnunetnamestore.la
   
 test_namestore_api_zone_iteration_SOURCES = \
- test_namestore_api_zone_iteration.c
+ test_namestore_api_zone_iteration.c \
+ namestore_common.c
 test_namestore_api_zone_iteration_LDADD = \
   $(top_builddir)/src/util/libgnunetutil.la \
   $(top_builddir)/src/namestore/libgnunetnamestore.la  
index 8f969371b40a1121c4d322d7c499f05c547ccb50..92eb218b937acce540f61ec89ec5977da1c203e4 100644 (file)
@@ -369,7 +369,9 @@ static void handle_record_put (void *cls,
   size_t msg_size;
   size_t msg_size_exp;
   char * name;
+  char * rd_ser;
   uint32_t id = 0;
+  uint32_t rd_ser_len;
   uint32_t rd_count;
   int res = GNUNET_SYSERR;
 
@@ -391,9 +393,9 @@ static void handle_record_put (void *cls,
   struct RecordPutMessage * rp_msg = (struct RecordPutMessage *) message;
   id = ntohl (rp_msg->op_id);
   name_len = ntohs (rp_msg->name_len);
-  rd_count = ntohl(rp_msg->rd_count);
+  rd_ser_len = ntohs(rp_msg->rd_len);
   msg_size = ntohs (message->size);
-  msg_size_exp = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len  + rd_count * (sizeof (struct GNUNET_NAMESTORE_RecordData));
+  msg_size_exp = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len  + rd_ser_len;
 
   if (msg_size != msg_size_exp)
   {
@@ -415,7 +417,8 @@ static void handle_record_put (void *cls,
   name = (char *) &zone_key[1];
   expire = GNUNET_TIME_absolute_ntoh(rp_msg->expire);
   signature = (struct GNUNET_CRYPTO_RsaSignature *) &rp_msg->signature;
-  rd = (struct GNUNET_NAMESTORE_RecordData *) &name[name_len];
+  rd_ser = &name[name_len];
+  rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len);
 
   /* Database operation */
   res = GSN_database->put_records(GSN_database->cls,
index 5b6a24ca6b05c176e88a2aef1bed8deb02384ef7..22fc860ebcf984b72c86e4e262429e1c8dd75072 100644 (file)
@@ -196,8 +196,8 @@ struct RecordPutMessage
   /* name length */
   uint16_t name_len;
 
-  /* Requested record type */
-  uint32_t rd_count;
+  /* Length of serialized rd data */
+  uint16_t rd_len;
 
   struct GNUNET_TIME_AbsoluteNBO expire;
 
index ace9945da29b30eb6670fab6b77ea3a37319d8e9..1d41399c602728541c707169718e20e279e60e6a 100644 (file)
@@ -739,11 +739,13 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
 
   /* pointer to elements */
   struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key_tmp;
-  struct GNUNET_NAMESTORE_RecordData *rd_tmp;
+  char * rd_tmp;
+  char * rd_ser;
   char * name_tmp;
 
   size_t msg_size = 0;
   size_t name_len = strlen(name) + 1;
+  size_t rd_ser_len = 0;
   uint32_t id = 0;
 
   GNUNET_assert (NULL != h);
@@ -756,8 +758,10 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
   GNUNET_CONTAINER_DLL_insert_tail(h->op_head, h->op_tail, qe);
 
   /* set msg_size*/
+  rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, rd_count, rd);
+
   struct RecordPutMessage * msg;
-  msg_size = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len  + rd_count * (sizeof (struct GNUNET_NAMESTORE_RecordData));
+  msg_size = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len  + rd_ser_len;
 
   /* create msg here */
   pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size);
@@ -766,7 +770,7 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
   msg = (struct RecordPutMessage *) &pe[1];
   zone_key_tmp = (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *) &msg[1];
   name_tmp = (char *) &zone_key_tmp[1];
-  rd_tmp = (struct GNUNET_NAMESTORE_RecordData *) &name_tmp[name_len];
+  rd_tmp = &name_tmp[name_len];
 
   msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT);
   msg->header.size = htons (msg_size);
@@ -776,8 +780,10 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
   msg->name_len = htons (name_len);
   memcpy (name_tmp, name, name_len);
   msg->expire = GNUNET_TIME_absolute_hton (expire);
-  msg->rd_count = htonl(rd_count);
-  memcpy (rd_tmp, rd, rd_count * (sizeof (struct GNUNET_NAMESTORE_RecordData)));
+  msg->rd_len = htons (rd_ser_len);
+
+  memcpy (rd_tmp, rd_ser, rd_ser_len);
+  GNUNET_free (rd_ser);
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_PUT", name, msg_size);
 
@@ -832,8 +838,10 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
 {
   struct GNUNET_NAMESTORE_QueueEntry *qe;
   struct PendingMessage *pe;
-  struct GNUNET_NAMESTORE_RecordData * rd_tmp;
   char * name_tmp;
+  char * rd_tmp;
+  char * rd_ser;
+  size_t rd_ser_len = 0;
   size_t msg_size = 0;
   size_t name_len = 0;
   uint32_t id = 0;
@@ -848,8 +856,9 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
   qe->op_id = id;
 
   /* set msg_size*/
+  rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, 1, rd);
   struct RecordCreateMessage * msg;
-  msg_size = sizeof (struct RecordCreateMessage) + name_len + sizeof (struct GNUNET_NAMESTORE_RecordData);
+  msg_size = sizeof (struct RecordCreateMessage) + name_len + rd_ser_len;
 
   /* create msg here */
   pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size);
@@ -858,7 +867,7 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
   msg = (struct RecordCreateMessage *) &pe[1];
 
   name_tmp = (char *) &msg[1];
-  rd_tmp = (struct GNUNET_NAMESTORE_RecordData *) &name_tmp[name_len];
+  rd_tmp = &name_tmp[name_len];
 
   msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE);
   msg->header.size = htons (msg_size);
@@ -866,7 +875,8 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
   //msg->signature = *signature;
   msg->name_len = htons (name_len);
   memcpy (name_tmp, name, name_len);
-  memcpy (rd_tmp, rd, sizeof (struct GNUNET_NAMESTORE_RecordData));
+  memcpy (rd_tmp, rd_ser, rd_ser_len);
+  GNUNET_free (rd_ser);
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_CREATE", name, msg_size);
 
@@ -901,8 +911,10 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
 {
   struct GNUNET_NAMESTORE_QueueEntry *qe;
   struct PendingMessage *pe;
-  struct GNUNET_NAMESTORE_RecordData * rd_tmp;
+  char * rd_tmp;
+  char * rd_ser;
   char * name_tmp;
+  size_t rd_ser_len = 0;
   size_t msg_size = 0;
   size_t name_len = 0;
   uint32_t id = 0;
@@ -917,8 +929,9 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
   qe->op_id = id;
 
   /* set msg_size*/
+  rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, 1, rd);
   struct RecordRemoveMessage * msg;
-  msg_size = sizeof (struct RecordRemoveMessage) + name_len + sizeof (struct GNUNET_NAMESTORE_RecordData);
+  msg_size = sizeof (struct RecordRemoveMessage) + name_len + rd_ser_len;
 
   /* create msg here */
   pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size);
@@ -927,7 +940,7 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
   msg = (struct RecordRemoveMessage *) &pe[1];
 
   name_tmp = (char *) &msg[1];
-  rd_tmp = (struct GNUNET_NAMESTORE_RecordData *) &name_tmp[name_len];
+  rd_tmp = &name_tmp[name_len];
 
   msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE);
   msg->header.size = htons (msg_size);
@@ -935,7 +948,8 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
   //msg->signature = *signature;
   msg->name_len = htons (name_len);
   memcpy (name_tmp, name, name_len);
-  memcpy (rd_tmp, rd, sizeof (struct GNUNET_NAMESTORE_RecordData));
+  memcpy (rd_tmp, rd_ser, rd_ser_len);
+  GNUNET_free (rd_ser);
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_REMOVE", name, msg_size);
 
index b907c713920da80783933e352540529512de0298..ebd8be3f6ac51259b2e0788894f2559c7b07fd3c 100644 (file)
@@ -40,6 +40,10 @@ static GNUNET_HashCode zone;
 
 static int res;
 
+#define TEST_RECORD_TYPE 1234
+#define TEST_RECORD_DATALEN 123
+#define TEST_RECORD_DATA 'a'
+
 
 static void
 start_arm (const char *cfgname)
@@ -152,6 +156,13 @@ run (void *cls, char *const *args, const char *cfgfile,
 
 
   struct GNUNET_CRYPTO_RsaSignature signature;
+  struct GNUNET_NAMESTORE_RecordData rd;
+
+  rd.expiration = GNUNET_TIME_absolute_get();
+  rd.record_type = TEST_RECORD_TYPE;
+  rd.data_size = TEST_RECORD_DATALEN;
+  rd.data = GNUNET_malloc(TEST_RECORD_DATALEN);
+  memset ((char *) rd.data, 'a', TEST_RECORD_DATALEN);
   char * name = "dummy.dummy.gnunet";
 
   start_arm (cfgfile);
@@ -162,7 +173,10 @@ run (void *cls, char *const *args, const char *cfgfile,
 
   GNUNET_NAMESTORE_record_put (nsh, &pubkey, name,
                               GNUNET_TIME_absolute_get_forever(),
-                              0, NULL, &signature, put_cont, name);
+                              1, &rd, &signature, put_cont, name);
+
+  GNUNET_free ((void *)rd.data);
+
 }
 
 static int
index 1683d13cf5154b99a86d59cf2ee4ba43b19d0007..1b83e8f13a84d6f9ccae6a8740b53f59713827dd 100644 (file)
@@ -4,7 +4,7 @@ DEFAULTSERVICES = namestore
 UNIXPATH = /tmp/gnunet-p1-service-arm.sock
 
 [namestore]
-PREFIX = valgrind --leak-check=full
+#PREFIX = valgrind --leak-check=full
 AUTOSTART = YES
 UNIXPATH = /tmp/gnunet-service-namestore.sock
 UNIX_MATCH_UID = YES