aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-02-28 16:14:06 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-02-28 16:14:06 +0000
commit2f4b20ea2c334ce412dbc1fe29253cc110765205 (patch)
tree66c55a0d2409d11ac530c6eb2bfd25054cdcac66 /src
parentefdbca9f6d63d177280669211448683aa033d92b (diff)
downloadgnunet-2f4b20ea2c334ce412dbc1fe29253cc110765205.tar.gz
gnunet-2f4b20ea2c334ce412dbc1fe29253cc110765205.zip
- using de/serialization functionality
Diffstat (limited to 'src')
-rw-r--r--src/namestore/Makefile.am19
-rw-r--r--src/namestore/gnunet-service-namestore.c9
-rw-r--r--src/namestore/namestore.h4
-rw-r--r--src/namestore/namestore_api.c40
-rw-r--r--src/namestore/test_namestore_api.c16
-rw-r--r--src/namestore/test_namestore_api.conf2
6 files changed, 62 insertions, 28 deletions
diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am
index 2e9a99d5f..47517b9c8 100644
--- a/src/namestore/Makefile.am
+++ b/src/namestore/Makefile.am
@@ -23,19 +23,20 @@ endif
23 23
24 24
25check_PROGRAMS = \ 25check_PROGRAMS = \
26 $(SQLITE_TESTS) 26 $(SQLITE_TESTS) \
27 test_namestore_api \
28 test_namestore_api_zone_iteration \
29 test_namestore_record_serialization
27 30
28if HAVE_EXPERIMENTAL 31if HAVE_EXPERIMENTAL
29check_PROGRAMS += test_namestore_api \ 32 check_PROGRAMS
30test_namestore_api_zone_iteration \
31test_namestore_record_serialization
32endif 33endif
33 34
34lib_LTLIBRARIES = \ 35lib_LTLIBRARIES = \
35 libgnunetnamestore.la 36 libgnunetnamestore.la
36 37
37libgnunetnamestore_la_SOURCES = \ 38libgnunetnamestore_la_SOURCES = \
38 namestore_api.c namestore.h 39 namestore_api.c namestore.h
39libgnunetnamestore_la_LIBADD = \ 40libgnunetnamestore_la_LIBADD = \
40 $(top_builddir)/src/statistics/libgnunetstatistics.la \ 41 $(top_builddir)/src/statistics/libgnunetstatistics.la \
41 $(top_builddir)/src/util/libgnunetutil.la \ 42 $(top_builddir)/src/util/libgnunetutil.la \
@@ -72,13 +73,15 @@ libgnunet_plugin_namestore_sqlite_la_LDFLAGS = \
72 73
73 74
74test_namestore_api_SOURCES = \ 75test_namestore_api_SOURCES = \
75 test_namestore_api.c 76 test_namestore_api.c \
77 namestore_common.c
76test_namestore_api_LDADD = \ 78test_namestore_api_LDADD = \
77 $(top_builddir)/src/util/libgnunetutil.la \ 79 $(top_builddir)/src/util/libgnunetutil.la \
78 $(top_builddir)/src/namestore/libgnunetnamestore.la 80 $(top_builddir)/src/namestore/libgnunetnamestore.la
79 81
80test_namestore_api_zone_iteration_SOURCES = \ 82test_namestore_api_zone_iteration_SOURCES = \
81 test_namestore_api_zone_iteration.c 83 test_namestore_api_zone_iteration.c \
84 namestore_common.c
82test_namestore_api_zone_iteration_LDADD = \ 85test_namestore_api_zone_iteration_LDADD = \
83 $(top_builddir)/src/util/libgnunetutil.la \ 86 $(top_builddir)/src/util/libgnunetutil.la \
84 $(top_builddir)/src/namestore/libgnunetnamestore.la 87 $(top_builddir)/src/namestore/libgnunetnamestore.la
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c
index 8f969371b..92eb218b9 100644
--- a/src/namestore/gnunet-service-namestore.c
+++ b/src/namestore/gnunet-service-namestore.c
@@ -369,7 +369,9 @@ static void handle_record_put (void *cls,
369 size_t msg_size; 369 size_t msg_size;
370 size_t msg_size_exp; 370 size_t msg_size_exp;
371 char * name; 371 char * name;
372 char * rd_ser;
372 uint32_t id = 0; 373 uint32_t id = 0;
374 uint32_t rd_ser_len;
373 uint32_t rd_count; 375 uint32_t rd_count;
374 int res = GNUNET_SYSERR; 376 int res = GNUNET_SYSERR;
375 377
@@ -391,9 +393,9 @@ static void handle_record_put (void *cls,
391 struct RecordPutMessage * rp_msg = (struct RecordPutMessage *) message; 393 struct RecordPutMessage * rp_msg = (struct RecordPutMessage *) message;
392 id = ntohl (rp_msg->op_id); 394 id = ntohl (rp_msg->op_id);
393 name_len = ntohs (rp_msg->name_len); 395 name_len = ntohs (rp_msg->name_len);
394 rd_count = ntohl(rp_msg->rd_count); 396 rd_ser_len = ntohs(rp_msg->rd_len);
395 msg_size = ntohs (message->size); 397 msg_size = ntohs (message->size);
396 msg_size_exp = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len + rd_count * (sizeof (struct GNUNET_NAMESTORE_RecordData)); 398 msg_size_exp = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len + rd_ser_len;
397 399
398 if (msg_size != msg_size_exp) 400 if (msg_size != msg_size_exp)
399 { 401 {
@@ -415,7 +417,8 @@ static void handle_record_put (void *cls,
415 name = (char *) &zone_key[1]; 417 name = (char *) &zone_key[1];
416 expire = GNUNET_TIME_absolute_ntoh(rp_msg->expire); 418 expire = GNUNET_TIME_absolute_ntoh(rp_msg->expire);
417 signature = (struct GNUNET_CRYPTO_RsaSignature *) &rp_msg->signature; 419 signature = (struct GNUNET_CRYPTO_RsaSignature *) &rp_msg->signature;
418 rd = (struct GNUNET_NAMESTORE_RecordData *) &name[name_len]; 420 rd_ser = &name[name_len];
421 rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len);
419 422
420 /* Database operation */ 423 /* Database operation */
421 res = GSN_database->put_records(GSN_database->cls, 424 res = GSN_database->put_records(GSN_database->cls,
diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h
index 5b6a24ca6..22fc860eb 100644
--- a/src/namestore/namestore.h
+++ b/src/namestore/namestore.h
@@ -196,8 +196,8 @@ struct RecordPutMessage
196 /* name length */ 196 /* name length */
197 uint16_t name_len; 197 uint16_t name_len;
198 198
199 /* Requested record type */ 199 /* Length of serialized rd data */
200 uint32_t rd_count; 200 uint16_t rd_len;
201 201
202 struct GNUNET_TIME_AbsoluteNBO expire; 202 struct GNUNET_TIME_AbsoluteNBO expire;
203 203
diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c
index ace9945da..1d41399c6 100644
--- a/src/namestore/namestore_api.c
+++ b/src/namestore/namestore_api.c
@@ -739,11 +739,13 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
739 739
740 /* pointer to elements */ 740 /* pointer to elements */
741 struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key_tmp; 741 struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key_tmp;
742 struct GNUNET_NAMESTORE_RecordData *rd_tmp; 742 char * rd_tmp;
743 char * rd_ser;
743 char * name_tmp; 744 char * name_tmp;
744 745
745 size_t msg_size = 0; 746 size_t msg_size = 0;
746 size_t name_len = strlen(name) + 1; 747 size_t name_len = strlen(name) + 1;
748 size_t rd_ser_len = 0;
747 uint32_t id = 0; 749 uint32_t id = 0;
748 750
749 GNUNET_assert (NULL != h); 751 GNUNET_assert (NULL != h);
@@ -756,8 +758,10 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
756 GNUNET_CONTAINER_DLL_insert_tail(h->op_head, h->op_tail, qe); 758 GNUNET_CONTAINER_DLL_insert_tail(h->op_head, h->op_tail, qe);
757 759
758 /* set msg_size*/ 760 /* set msg_size*/
761 rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, rd_count, rd);
762
759 struct RecordPutMessage * msg; 763 struct RecordPutMessage * msg;
760 msg_size = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len + rd_count * (sizeof (struct GNUNET_NAMESTORE_RecordData)); 764 msg_size = sizeof (struct RecordPutMessage) + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) + name_len + rd_ser_len;
761 765
762 /* create msg here */ 766 /* create msg here */
763 pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size); 767 pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size);
@@ -766,7 +770,7 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
766 msg = (struct RecordPutMessage *) &pe[1]; 770 msg = (struct RecordPutMessage *) &pe[1];
767 zone_key_tmp = (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *) &msg[1]; 771 zone_key_tmp = (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *) &msg[1];
768 name_tmp = (char *) &zone_key_tmp[1]; 772 name_tmp = (char *) &zone_key_tmp[1];
769 rd_tmp = (struct GNUNET_NAMESTORE_RecordData *) &name_tmp[name_len]; 773 rd_tmp = &name_tmp[name_len];
770 774
771 msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT); 775 msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT);
772 msg->header.size = htons (msg_size); 776 msg->header.size = htons (msg_size);
@@ -776,8 +780,10 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h,
776 msg->name_len = htons (name_len); 780 msg->name_len = htons (name_len);
777 memcpy (name_tmp, name, name_len); 781 memcpy (name_tmp, name, name_len);
778 msg->expire = GNUNET_TIME_absolute_hton (expire); 782 msg->expire = GNUNET_TIME_absolute_hton (expire);
779 msg->rd_count = htonl(rd_count); 783 msg->rd_len = htons (rd_ser_len);
780 memcpy (rd_tmp, rd, rd_count * (sizeof (struct GNUNET_NAMESTORE_RecordData))); 784
785 memcpy (rd_tmp, rd_ser, rd_ser_len);
786 GNUNET_free (rd_ser);
781 787
782 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_PUT", name, msg_size); 788 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_PUT", name, msg_size);
783 789
@@ -832,8 +838,10 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
832{ 838{
833 struct GNUNET_NAMESTORE_QueueEntry *qe; 839 struct GNUNET_NAMESTORE_QueueEntry *qe;
834 struct PendingMessage *pe; 840 struct PendingMessage *pe;
835 struct GNUNET_NAMESTORE_RecordData * rd_tmp;
836 char * name_tmp; 841 char * name_tmp;
842 char * rd_tmp;
843 char * rd_ser;
844 size_t rd_ser_len = 0;
837 size_t msg_size = 0; 845 size_t msg_size = 0;
838 size_t name_len = 0; 846 size_t name_len = 0;
839 uint32_t id = 0; 847 uint32_t id = 0;
@@ -848,8 +856,9 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
848 qe->op_id = id; 856 qe->op_id = id;
849 857
850 /* set msg_size*/ 858 /* set msg_size*/
859 rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, 1, rd);
851 struct RecordCreateMessage * msg; 860 struct RecordCreateMessage * msg;
852 msg_size = sizeof (struct RecordCreateMessage) + name_len + sizeof (struct GNUNET_NAMESTORE_RecordData); 861 msg_size = sizeof (struct RecordCreateMessage) + name_len + rd_ser_len;
853 862
854 /* create msg here */ 863 /* create msg here */
855 pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size); 864 pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size);
@@ -858,7 +867,7 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
858 msg = (struct RecordCreateMessage *) &pe[1]; 867 msg = (struct RecordCreateMessage *) &pe[1];
859 868
860 name_tmp = (char *) &msg[1]; 869 name_tmp = (char *) &msg[1];
861 rd_tmp = (struct GNUNET_NAMESTORE_RecordData *) &name_tmp[name_len]; 870 rd_tmp = &name_tmp[name_len];
862 871
863 msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE); 872 msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE);
864 msg->header.size = htons (msg_size); 873 msg->header.size = htons (msg_size);
@@ -866,7 +875,8 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h,
866 //msg->signature = *signature; 875 //msg->signature = *signature;
867 msg->name_len = htons (name_len); 876 msg->name_len = htons (name_len);
868 memcpy (name_tmp, name, name_len); 877 memcpy (name_tmp, name, name_len);
869 memcpy (rd_tmp, rd, sizeof (struct GNUNET_NAMESTORE_RecordData)); 878 memcpy (rd_tmp, rd_ser, rd_ser_len);
879 GNUNET_free (rd_ser);
870 880
871 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_CREATE", name, msg_size); 881 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_CREATE", name, msg_size);
872 882
@@ -901,8 +911,10 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
901{ 911{
902 struct GNUNET_NAMESTORE_QueueEntry *qe; 912 struct GNUNET_NAMESTORE_QueueEntry *qe;
903 struct PendingMessage *pe; 913 struct PendingMessage *pe;
904 struct GNUNET_NAMESTORE_RecordData * rd_tmp; 914 char * rd_tmp;
915 char * rd_ser;
905 char * name_tmp; 916 char * name_tmp;
917 size_t rd_ser_len = 0;
906 size_t msg_size = 0; 918 size_t msg_size = 0;
907 size_t name_len = 0; 919 size_t name_len = 0;
908 uint32_t id = 0; 920 uint32_t id = 0;
@@ -917,8 +929,9 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
917 qe->op_id = id; 929 qe->op_id = id;
918 930
919 /* set msg_size*/ 931 /* set msg_size*/
932 rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, 1, rd);
920 struct RecordRemoveMessage * msg; 933 struct RecordRemoveMessage * msg;
921 msg_size = sizeof (struct RecordRemoveMessage) + name_len + sizeof (struct GNUNET_NAMESTORE_RecordData); 934 msg_size = sizeof (struct RecordRemoveMessage) + name_len + rd_ser_len;
922 935
923 /* create msg here */ 936 /* create msg here */
924 pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size); 937 pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size);
@@ -927,7 +940,7 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
927 msg = (struct RecordRemoveMessage *) &pe[1]; 940 msg = (struct RecordRemoveMessage *) &pe[1];
928 941
929 name_tmp = (char *) &msg[1]; 942 name_tmp = (char *) &msg[1];
930 rd_tmp = (struct GNUNET_NAMESTORE_RecordData *) &name_tmp[name_len]; 943 rd_tmp = &name_tmp[name_len];
931 944
932 msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE); 945 msg->header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE);
933 msg->header.size = htons (msg_size); 946 msg->header.size = htons (msg_size);
@@ -935,7 +948,8 @@ GNUNET_NAMESTORE_record_remove (struct GNUNET_NAMESTORE_Handle *h,
935 //msg->signature = *signature; 948 //msg->signature = *signature;
936 msg->name_len = htons (name_len); 949 msg->name_len = htons (name_len);
937 memcpy (name_tmp, name, name_len); 950 memcpy (name_tmp, name, name_len);
938 memcpy (rd_tmp, rd, sizeof (struct GNUNET_NAMESTORE_RecordData)); 951 memcpy (rd_tmp, rd_ser, rd_ser_len);
952 GNUNET_free (rd_ser);
939 953
940 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_REMOVE", name, msg_size); 954 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message for name `%s' with size %u\n", "NAMESTORE_RECORD_REMOVE", name, msg_size);
941 955
diff --git a/src/namestore/test_namestore_api.c b/src/namestore/test_namestore_api.c
index b907c7139..ebd8be3f6 100644
--- a/src/namestore/test_namestore_api.c
+++ b/src/namestore/test_namestore_api.c
@@ -40,6 +40,10 @@ static GNUNET_HashCode zone;
40 40
41static int res; 41static int res;
42 42
43#define TEST_RECORD_TYPE 1234
44#define TEST_RECORD_DATALEN 123
45#define TEST_RECORD_DATA 'a'
46
43 47
44static void 48static void
45start_arm (const char *cfgname) 49start_arm (const char *cfgname)
@@ -152,6 +156,13 @@ run (void *cls, char *const *args, const char *cfgfile,
152 156
153 157
154 struct GNUNET_CRYPTO_RsaSignature signature; 158 struct GNUNET_CRYPTO_RsaSignature signature;
159 struct GNUNET_NAMESTORE_RecordData rd;
160
161 rd.expiration = GNUNET_TIME_absolute_get();
162 rd.record_type = TEST_RECORD_TYPE;
163 rd.data_size = TEST_RECORD_DATALEN;
164 rd.data = GNUNET_malloc(TEST_RECORD_DATALEN);
165 memset ((char *) rd.data, 'a', TEST_RECORD_DATALEN);
155 char * name = "dummy.dummy.gnunet"; 166 char * name = "dummy.dummy.gnunet";
156 167
157 start_arm (cfgfile); 168 start_arm (cfgfile);
@@ -162,7 +173,10 @@ run (void *cls, char *const *args, const char *cfgfile,
162 173
163 GNUNET_NAMESTORE_record_put (nsh, &pubkey, name, 174 GNUNET_NAMESTORE_record_put (nsh, &pubkey, name,
164 GNUNET_TIME_absolute_get_forever(), 175 GNUNET_TIME_absolute_get_forever(),
165 0, NULL, &signature, put_cont, name); 176 1, &rd, &signature, put_cont, name);
177
178 GNUNET_free ((void *)rd.data);
179
166} 180}
167 181
168static int 182static int
diff --git a/src/namestore/test_namestore_api.conf b/src/namestore/test_namestore_api.conf
index 1683d13cf..1b83e8f13 100644
--- a/src/namestore/test_namestore_api.conf
+++ b/src/namestore/test_namestore_api.conf
@@ -4,7 +4,7 @@ DEFAULTSERVICES = namestore
4UNIXPATH = /tmp/gnunet-p1-service-arm.sock 4UNIXPATH = /tmp/gnunet-p1-service-arm.sock
5 5
6[namestore] 6[namestore]
7PREFIX = valgrind --leak-check=full 7#PREFIX = valgrind --leak-check=full
8AUTOSTART = YES 8AUTOSTART = YES
9UNIXPATH = /tmp/gnunet-service-namestore.sock 9UNIXPATH = /tmp/gnunet-service-namestore.sock
10UNIX_MATCH_UID = YES 10UNIX_MATCH_UID = YES