diff options
-rw-r--r-- | src/namestore/gnunet-service-namestore.c | 41 | ||||
-rw-r--r-- | src/namestore/namestore.h | 7 | ||||
-rw-r--r-- | src/namestore/namestore_api.c | 3 | ||||
-rw-r--r-- | src/namestore/test_namestore_api_create.c | 6 | ||||
-rw-r--r-- | src/namestore/test_namestore_api_lookup.c | 7 | ||||
-rw-r--r-- | src/namestore/test_namestore_record_serialization.c | 20 |
6 files changed, 48 insertions, 36 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index 254c27fef..67c83bc42 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c | |||
@@ -212,7 +212,6 @@ handle_lookup_name_it (void *cls, | |||
212 | struct GNUNET_NAMESTORE_RecordData *rd_selected = NULL; | 212 | struct GNUNET_NAMESTORE_RecordData *rd_selected = NULL; |
213 | char *rd_tmp; | 213 | char *rd_tmp; |
214 | char *name_tmp; | 214 | char *name_tmp; |
215 | char *rd_ser; | ||
216 | size_t rd_ser_len; | 215 | size_t rd_ser_len; |
217 | struct GNUNET_CRYPTO_RsaSignature *signature_tmp; | 216 | struct GNUNET_CRYPTO_RsaSignature *signature_tmp; |
218 | 217 | ||
@@ -254,18 +253,22 @@ handle_lookup_name_it (void *cls, | |||
254 | copied_elements = rd_count; | 253 | copied_elements = rd_count; |
255 | rd_selected = (struct GNUNET_NAMESTORE_RecordData *) rd; | 254 | rd_selected = (struct GNUNET_NAMESTORE_RecordData *) rd; |
256 | } | 255 | } |
257 | rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, copied_elements, rd_selected); | ||
258 | } | 256 | } |
259 | else | 257 | else |
260 | { | 258 | { |
261 | /* No results */ | 259 | /* No results */ |
262 | copied_elements = 0; | 260 | copied_elements = 0; |
263 | rd_selected = NULL; | 261 | rd_selected = NULL; |
264 | rd_ser = NULL; | ||
265 | rd_ser_len = 0; | ||
266 | expire = GNUNET_TIME_UNIT_ZERO_ABS; | 262 | expire = GNUNET_TIME_UNIT_ZERO_ABS; |
267 | } | 263 | } |
268 | 264 | ||
265 | |||
266 | |||
267 | rd_ser_len = GNUNET_NAMESTORE_records_get_size(copied_elements, rd_selected); | ||
268 | char rd_ser[rd_ser_len]; | ||
269 | GNUNET_NAMESTORE_records_serialize(copied_elements, rd_selected, rd_ser_len, rd_ser); | ||
270 | |||
271 | |||
269 | if ((copied_elements == rd_count) && (signature != NULL)) | 272 | if ((copied_elements == rd_count) && (signature != NULL)) |
270 | contains_signature = GNUNET_YES; | 273 | contains_signature = GNUNET_YES; |
271 | 274 | ||
@@ -283,6 +286,7 @@ handle_lookup_name_it (void *cls, | |||
283 | lnr_msg->gns_header.header.type = ntohs (GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE); | 286 | lnr_msg->gns_header.header.type = ntohs (GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE); |
284 | lnr_msg->gns_header.header.size = ntohs (r_size); | 287 | lnr_msg->gns_header.header.size = ntohs (r_size); |
285 | lnr_msg->gns_header.r_id = htonl (lnc->request_id); | 288 | lnr_msg->gns_header.r_id = htonl (lnc->request_id); |
289 | lnr_msg->rd_count = htons (rd_count); | ||
286 | lnr_msg->rd_len = htons (rd_ser_len); | 290 | lnr_msg->rd_len = htons (rd_ser_len); |
287 | lnr_msg->name_len = htons (name_len); | 291 | lnr_msg->name_len = htons (name_len); |
288 | lnr_msg->expire = GNUNET_TIME_absolute_hton(expire); | 292 | lnr_msg->expire = GNUNET_TIME_absolute_hton(expire); |
@@ -303,7 +307,6 @@ handle_lookup_name_it (void *cls, | |||
303 | } | 307 | } |
304 | memcpy (name_tmp, name, name_len); | 308 | memcpy (name_tmp, name, name_len); |
305 | memcpy (rd_tmp, rd_ser, rd_ser_len); | 309 | memcpy (rd_tmp, rd_ser, rd_ser_len); |
306 | GNUNET_free_non_null (rd_ser); | ||
307 | 310 | ||
308 | if (GNUNET_YES == contains_signature) | 311 | if (GNUNET_YES == contains_signature) |
309 | memcpy (signature_tmp, signature, sizeof (struct GNUNET_CRYPTO_RsaSignature)); | 312 | memcpy (signature_tmp, signature, sizeof (struct GNUNET_CRYPTO_RsaSignature)); |
@@ -379,7 +382,6 @@ static void handle_record_put (void *cls, | |||
379 | struct GNUNET_NAMESTORE_Client *nc; | 382 | struct GNUNET_NAMESTORE_Client *nc; |
380 | struct GNUNET_TIME_Absolute expire; | 383 | struct GNUNET_TIME_Absolute expire; |
381 | struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key; | 384 | struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key; |
382 | struct GNUNET_NAMESTORE_RecordData *rd; | ||
383 | struct GNUNET_CRYPTO_RsaSignature *signature; | 385 | struct GNUNET_CRYPTO_RsaSignature *signature; |
384 | struct RecordPutResponseMessage rpr_msg; | 386 | struct RecordPutResponseMessage rpr_msg; |
385 | size_t name_len; | 387 | size_t name_len; |
@@ -411,10 +413,11 @@ static void handle_record_put (void *cls, | |||
411 | struct RecordPutMessage * rp_msg = (struct RecordPutMessage *) message; | 413 | struct RecordPutMessage * rp_msg = (struct RecordPutMessage *) message; |
412 | 414 | ||
413 | rid = ntohl (rp_msg->gns_header.r_id); | 415 | rid = ntohl (rp_msg->gns_header.r_id); |
416 | msg_size = ntohs (rp_msg->gns_header.header.size); | ||
414 | key_len = sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded); | 417 | key_len = sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded); |
415 | name_len = ntohs (rp_msg->name_len); | 418 | name_len = ntohs (rp_msg->name_len); |
419 | rd_count = ntohs (rp_msg->rd_count); | ||
416 | rd_ser_len = ntohs(rp_msg->rd_len); | 420 | rd_ser_len = ntohs(rp_msg->rd_len); |
417 | msg_size = ntohs (message->size); | ||
418 | msg_size_exp = sizeof (struct RecordPutMessage) + key_len + name_len + rd_ser_len; | 421 | msg_size_exp = sizeof (struct RecordPutMessage) + key_len + name_len + rd_ser_len; |
419 | 422 | ||
420 | if (msg_size != msg_size_exp) | 423 | if (msg_size != msg_size_exp) |
@@ -445,8 +448,10 @@ static void handle_record_put (void *cls, | |||
445 | 448 | ||
446 | expire = GNUNET_TIME_absolute_ntoh(rp_msg->expire); | 449 | expire = GNUNET_TIME_absolute_ntoh(rp_msg->expire); |
447 | signature = (struct GNUNET_CRYPTO_RsaSignature *) &rp_msg->signature; | 450 | signature = (struct GNUNET_CRYPTO_RsaSignature *) &rp_msg->signature; |
451 | |||
448 | rd_ser = &name[name_len]; | 452 | rd_ser = &name[name_len]; |
449 | rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len); | 453 | struct GNUNET_NAMESTORE_RecordData rd[rd_count]; |
454 | GNUNET_NAMESTORE_records_deserialize(rd_ser_len, rd_ser, rd_count, rd); | ||
450 | 455 | ||
451 | GNUNET_HashCode zone_hash; | 456 | GNUNET_HashCode zone_hash; |
452 | GNUNET_CRYPTO_hash (zone_key, key_len, &zone_hash); | 457 | GNUNET_CRYPTO_hash (zone_key, key_len, &zone_hash); |
@@ -461,8 +466,6 @@ static void handle_record_put (void *cls, | |||
461 | rd_count, rd, | 466 | rd_count, rd, |
462 | signature); | 467 | signature); |
463 | 468 | ||
464 | GNUNET_NAMESTORE_records_free (rd_count, rd); | ||
465 | |||
466 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Putting record for name `%s': %s\n", | 469 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Putting record for name `%s': %s\n", |
467 | name, (res == GNUNET_OK) ? "OK" : "FAIL"); | 470 | name, (res == GNUNET_OK) ? "OK" : "FAIL"); |
468 | 471 | ||
@@ -496,9 +499,11 @@ GNUNET_NAMESTORE_create_signature (const struct GNUNET_CRYPTO_RsaPrivateKey *key | |||
496 | struct GNUNET_CRYPTO_RsaSignature *sig = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignature)); | 499 | struct GNUNET_CRYPTO_RsaSignature *sig = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignature)); |
497 | struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose; | 500 | struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose; |
498 | size_t rd_ser_len; | 501 | size_t rd_ser_len; |
499 | char *rd_ser; | ||
500 | 502 | ||
501 | rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, rd_count, rd); | 503 | rd_ser_len = GNUNET_NAMESTORE_records_get_size(rd_count, rd); |
504 | char rd_ser[rd_ser_len]; | ||
505 | GNUNET_NAMESTORE_records_serialize(rd_count, rd, rd_ser_len, rd_ser); | ||
506 | |||
502 | sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); | 507 | sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); |
503 | 508 | ||
504 | sig_purpose->size = htonl (sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose)+ rd_ser_len); | 509 | sig_purpose->size = htonl (sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose)+ rd_ser_len); |
@@ -566,7 +571,6 @@ static void handle_record_create (void *cls, | |||
566 | { | 571 | { |
567 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n", "NAMESTORE_RECORD_CREATE"); | 572 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n", "NAMESTORE_RECORD_CREATE"); |
568 | struct GNUNET_NAMESTORE_Client *nc; | 573 | struct GNUNET_NAMESTORE_Client *nc; |
569 | struct GNUNET_NAMESTORE_RecordData *rd; | ||
570 | struct CreateRecordContext crc; | 574 | struct CreateRecordContext crc; |
571 | struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pub; | 575 | struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pub; |
572 | GNUNET_HashCode pubkey_hash; | 576 | GNUNET_HashCode pubkey_hash; |
@@ -603,6 +607,7 @@ static void handle_record_create (void *cls, | |||
603 | rid = ntohl (rp_msg->gns_header.r_id); | 607 | rid = ntohl (rp_msg->gns_header.r_id); |
604 | name_len = ntohs (rp_msg->name_len); | 608 | name_len = ntohs (rp_msg->name_len); |
605 | msg_size = ntohs (message->size); | 609 | msg_size = ntohs (message->size); |
610 | rd_count = ntohs (rp_msg->rd_count); | ||
606 | rd_ser_len = ntohs (rp_msg->rd_len); | 611 | rd_ser_len = ntohs (rp_msg->rd_len); |
607 | key_len = ntohs (rp_msg->pkey_len); | 612 | key_len = ntohs (rp_msg->pkey_len); |
608 | msg_size_exp = sizeof (struct RecordCreateMessage) + key_len + name_len + rd_ser_len; | 613 | msg_size_exp = sizeof (struct RecordCreateMessage) + key_len + name_len + rd_ser_len; |
@@ -633,7 +638,8 @@ static void handle_record_create (void *cls, | |||
633 | return; | 638 | return; |
634 | } | 639 | } |
635 | 640 | ||
636 | rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len); | 641 | struct GNUNET_NAMESTORE_RecordData rd[rd_count]; |
642 | GNUNET_NAMESTORE_records_deserialize(rd_ser_len, rd_ser, rd_count, rd); | ||
637 | GNUNET_assert (rd_count == 1); | 643 | GNUNET_assert (rd_count == 1); |
638 | 644 | ||
639 | /* Extracting and converting private key */ | 645 | /* Extracting and converting private key */ |
@@ -650,9 +656,6 @@ static void handle_record_create (void *cls, | |||
650 | /* Get existing records for name */ | 656 | /* Get existing records for name */ |
651 | res = GSN_database->iterate_records(GSN_database->cls, &pubkey_hash, name_tmp, 0, &handle_create_record_it, &crc); | 657 | res = GSN_database->iterate_records(GSN_database->cls, &pubkey_hash, name_tmp, 0, &handle_create_record_it, &crc); |
652 | 658 | ||
653 | GNUNET_CRYPTO_rsa_key_free(pkey); | ||
654 | GNUNET_NAMESTORE_records_free(rd_count, rd); | ||
655 | |||
656 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | 659 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
657 | } | 660 | } |
658 | 661 | ||
@@ -788,7 +791,9 @@ void zone_iteration_proc (void *cls, | |||
788 | 791 | ||
789 | if ((rd_count > 0) && (rd != NULL)) | 792 | if ((rd_count > 0) && (rd != NULL)) |
790 | { | 793 | { |
791 | len = GNUNET_NAMESTORE_records_serialize (&zipr->rd_ser, rd_count, rd); | 794 | len = GNUNET_NAMESTORE_records_get_size(rd_count, rd); |
795 | zipr->rd_ser = GNUNET_malloc (len); | ||
796 | GNUNET_NAMESTORE_records_serialize(rd_count, rd, len, zipr->rd_ser); | ||
792 | zipr->rd_ser_len = len; | 797 | zipr->rd_ser_len = len; |
793 | } | 798 | } |
794 | } | 799 | } |
diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index ab0da6126..c8353e83b 100644 --- a/src/namestore/namestore.h +++ b/src/namestore/namestore.h | |||
@@ -141,6 +141,8 @@ struct LookupNameResponseMessage | |||
141 | 141 | ||
142 | uint16_t rd_len; | 142 | uint16_t rd_len; |
143 | 143 | ||
144 | uint16_t rd_count; | ||
145 | |||
144 | int32_t contains_sig; | 146 | int32_t contains_sig; |
145 | 147 | ||
146 | /* Requested record type */ | 148 | /* Requested record type */ |
@@ -167,6 +169,8 @@ struct RecordPutMessage | |||
167 | /* Length of serialized rd data */ | 169 | /* Length of serialized rd data */ |
168 | uint16_t rd_len; | 170 | uint16_t rd_len; |
169 | 171 | ||
172 | uint16_t rd_count; | ||
173 | |||
170 | /* Length of pubkey */ | 174 | /* Length of pubkey */ |
171 | uint16_t key_len; | 175 | uint16_t key_len; |
172 | 176 | ||
@@ -220,6 +224,9 @@ struct RecordCreateMessage | |||
220 | /* Record data length */ | 224 | /* Record data length */ |
221 | uint16_t rd_len; | 225 | uint16_t rd_len; |
222 | 226 | ||
227 | /* Record count */ | ||
228 | uint16_t rd_count; | ||
229 | |||
223 | /* private key length */ | 230 | /* private key length */ |
224 | uint16_t pkey_len; | 231 | uint16_t pkey_len; |
225 | }; | 232 | }; |
diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c index 5dea13c5e..d3d5e60ef 100644 --- a/src/namestore/namestore_api.c +++ b/src/namestore/namestore_api.c | |||
@@ -815,7 +815,7 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h, | |||
815 | memcpy (name_tmp, name, name_len); | 815 | memcpy (name_tmp, name, name_len); |
816 | msg->expire = GNUNET_TIME_absolute_hton (expire); | 816 | msg->expire = GNUNET_TIME_absolute_hton (expire); |
817 | msg->rd_len = htons (rd_ser_len); | 817 | msg->rd_len = htons (rd_ser_len); |
818 | 818 | msg->rd_count = htons (rd_count); | |
819 | 819 | ||
820 | memcpy (rd_tmp, rd_ser, rd_ser_len); | 820 | memcpy (rd_tmp, rd_ser, rd_ser_len); |
821 | GNUNET_free (rd_ser); | 821 | GNUNET_free (rd_ser); |
@@ -928,6 +928,7 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h, | |||
928 | msg->gns_header.header.size = htons (msg_size); | 928 | msg->gns_header.header.size = htons (msg_size); |
929 | msg->gns_header.r_id = htonl (rid); | 929 | msg->gns_header.r_id = htonl (rid); |
930 | msg->name_len = htons (name_len); | 930 | msg->name_len = htons (name_len); |
931 | msg->rd_count = htons (1); | ||
931 | msg->rd_len = htons (rd_ser_len); | 932 | msg->rd_len = htons (rd_ser_len); |
932 | msg->pkey_len = htons (key_len); | 933 | msg->pkey_len = htons (key_len); |
933 | memcpy (pkey_tmp, pkey_enc, key_len); | 934 | memcpy (pkey_tmp, pkey_enc, key_len); |
diff --git a/src/namestore/test_namestore_api_create.c b/src/namestore/test_namestore_api_create.c index 5caf877c2..e4f9cf124 100644 --- a/src/namestore/test_namestore_api_create.c +++ b/src/namestore/test_namestore_api_create.c | |||
@@ -286,7 +286,6 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
286 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 286 | const struct GNUNET_CONFIGURATION_Handle *cfg) |
287 | { | 287 | { |
288 | endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL); | 288 | endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL); |
289 | char * rd_ser; | ||
290 | size_t rd_ser_len; | 289 | size_t rd_ser_len; |
291 | 290 | ||
292 | /* load privat key */ | 291 | /* load privat key */ |
@@ -298,7 +297,10 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
298 | /* create record */ | 297 | /* create record */ |
299 | s_name = "dummy.dummy.gnunet"; | 298 | s_name = "dummy.dummy.gnunet"; |
300 | s_rd = create_record (RECORDS); | 299 | s_rd = create_record (RECORDS); |
301 | rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, RECORDS, s_rd); | 300 | |
301 | rd_ser_len = GNUNET_NAMESTORE_records_get_size(RECORDS, s_rd); | ||
302 | char rd_ser[rd_ser_len]; | ||
303 | GNUNET_NAMESTORE_records_serialize(RECORDS, s_rd, rd_ser_len, rd_ser); | ||
302 | 304 | ||
303 | /* sign */ | 305 | /* sign */ |
304 | struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); | 306 | struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); |
diff --git a/src/namestore/test_namestore_api_lookup.c b/src/namestore/test_namestore_api_lookup.c index d20a1cdaf..1d91c32c6 100644 --- a/src/namestore/test_namestore_api_lookup.c +++ b/src/namestore/test_namestore_api_lookup.c | |||
@@ -232,7 +232,7 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
232 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 232 | const struct GNUNET_CONFIGURATION_Handle *cfg) |
233 | { | 233 | { |
234 | endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL); | 234 | endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL); |
235 | char * rd_ser; | 235 | |
236 | size_t rd_ser_len; | 236 | size_t rd_ser_len; |
237 | 237 | ||
238 | /* load privat key */ | 238 | /* load privat key */ |
@@ -244,7 +244,10 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
244 | /* create record */ | 244 | /* create record */ |
245 | s_name = "dummy.dummy.gnunet"; | 245 | s_name = "dummy.dummy.gnunet"; |
246 | s_rd = create_record (RECORDS); | 246 | s_rd = create_record (RECORDS); |
247 | rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, RECORDS, s_rd); | 247 | |
248 | rd_ser_len = GNUNET_NAMESTORE_records_get_size(RECORDS, s_rd); | ||
249 | char rd_ser[rd_ser_len]; | ||
250 | GNUNET_NAMESTORE_records_serialize(RECORDS, s_rd, rd_ser_len, rd_ser); | ||
248 | 251 | ||
249 | /* sign */ | 252 | /* sign */ |
250 | struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); | 253 | struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); |
diff --git a/src/namestore/test_namestore_record_serialization.c b/src/namestore/test_namestore_record_serialization.c index cd60a5dda..b389e7faf 100644 --- a/src/namestore/test_namestore_record_serialization.c +++ b/src/namestore/test_namestore_record_serialization.c | |||
@@ -36,15 +36,12 @@ static void | |||
36 | run (void *cls, char *const *args, const char *cfgfile, | 36 | run (void *cls, char *const *args, const char *cfgfile, |
37 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 37 | const struct GNUNET_CONFIGURATION_Handle *cfg) |
38 | { | 38 | { |
39 | char * rd_ser = NULL; | ||
40 | size_t len; | 39 | size_t len; |
41 | int c; | 40 | int c; |
42 | int dst_elem = 0; | ||
43 | 41 | ||
44 | int rd_count = 3; | 42 | int rd_count = 3; |
45 | size_t data_len; | 43 | size_t data_len; |
46 | struct GNUNET_NAMESTORE_RecordData src[rd_count]; | 44 | struct GNUNET_NAMESTORE_RecordData src[rd_count]; |
47 | struct GNUNET_NAMESTORE_RecordData *dst = NULL; | ||
48 | 45 | ||
49 | memset(src, '\0', rd_count * sizeof (struct GNUNET_NAMESTORE_RecordData)); | 46 | memset(src, '\0', rd_count * sizeof (struct GNUNET_NAMESTORE_RecordData)); |
50 | 47 | ||
@@ -61,18 +58,20 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
61 | } | 58 | } |
62 | res = 0; | 59 | res = 0; |
63 | 60 | ||
64 | len = GNUNET_NAMESTORE_records_serialize (&rd_ser, rd_count, src); | 61 | len = GNUNET_NAMESTORE_records_get_size(rd_count, src); |
62 | char rd_ser[len]; | ||
63 | GNUNET_assert (len == GNUNET_NAMESTORE_records_serialize(rd_count, src, len, rd_ser)); | ||
64 | |||
65 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Serialized data len: %u\n",len); | 65 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Serialized data len: %u\n",len); |
66 | 66 | ||
67 | GNUNET_assert (rd_ser != NULL); | 67 | GNUNET_assert (rd_ser != NULL); |
68 | 68 | ||
69 | dst_elem = GNUNET_NAMESTORE_records_deserialize(&dst, rd_ser, len); | 69 | struct GNUNET_NAMESTORE_RecordData dst[rd_count]; |
70 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Deserialized elements: %u\n",dst_elem); | 70 | GNUNET_assert (GNUNET_OK == GNUNET_NAMESTORE_records_deserialize (len, rd_ser, rd_count, dst)); |
71 | 71 | ||
72 | GNUNET_assert (dst_elem == rd_count); | ||
73 | GNUNET_assert (dst != NULL); | 72 | GNUNET_assert (dst != NULL); |
74 | 73 | ||
75 | for (c = 0; c < dst_elem; c++) | 74 | for (c = 0; c < rd_count; c++) |
76 | { | 75 | { |
77 | if (src[c].data_size != dst[c].data_size) | 76 | if (src[c].data_size != dst[c].data_size) |
78 | { | 77 | { |
@@ -116,11 +115,6 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
116 | 115 | ||
117 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Element [%i]: EQUAL\n", c); | 116 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Element [%i]: EQUAL\n", c); |
118 | } | 117 | } |
119 | |||
120 | for (c = 0; c < rd_count; c++) | ||
121 | GNUNET_free ((void *) src[c].data); | ||
122 | GNUNET_NAMESTORE_records_free (dst_elem, dst); | ||
123 | GNUNET_free (rd_ser); | ||
124 | } | 118 | } |
125 | 119 | ||
126 | static int | 120 | static int |