aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-02-28 18:53:31 +0100
committerFlorian Dold <florian.dold@gmail.com>2017-02-28 18:53:31 +0100
commita9a6b98c54f5cc3e680c8ea2f9c69e3955e2a7da (patch)
tree65145d9a52ffae1009402bebf5f49b287160acda
parent237dd9f9c93cabd29015d0f5e3c8ceff8af3f071 (diff)
downloadgnunet-a9a6b98c54f5cc3e680c8ea2f9c69e3955e2a7da.tar.gz
gnunet-a9a6b98c54f5cc3e680c8ea2f9c69e3955e2a7da.zip
fix completely broken implementation of variable size elements
-rw-r--r--src/set/gnunet-set-profiler.c46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/set/gnunet-set-profiler.c b/src/set/gnunet-set-profiler.c
index a6c900f5e..8404b191c 100644
--- a/src/set/gnunet-set-profiler.c
+++ b/src/set/gnunet-set-profiler.c
@@ -61,8 +61,7 @@ static struct GNUNET_SET_ListenHandle *set_listener;
61static int byzantine; 61static int byzantine;
62static int force_delta; 62static int force_delta;
63static int force_full; 63static int force_full;
64 64static unsigned int element_size = 32;
65static unsigned int element_length = 32;
66 65
67/** 66/**
68 * Handle to the statistics service. 67 * Handle to the statistics service.
@@ -92,7 +91,7 @@ map_remove_iterator (void *cls,
92 91
93 GNUNET_assert (NULL != key); 92 GNUNET_assert (NULL != key);
94 93
95 ret = GNUNET_CONTAINER_multihashmap_remove (m, key, NULL); 94 ret = GNUNET_CONTAINER_multihashmap_remove_all (m, key);
96 if (GNUNET_OK != ret) 95 if (GNUNET_OK != ret)
97 printf ("spurious element\n"); 96 printf ("spurious element\n");
98 return GNUNET_YES; 97 return GNUNET_YES;
@@ -198,7 +197,7 @@ set_result_cb (void *cls,
198 GNUNET_assert (0); 197 GNUNET_assert (0);
199 } 198 }
200 199
201 if (element->size != sizeof (struct GNUNET_HashCode)) 200 if (element->size != element_size)
202 { 201 {
203 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 202 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
204 "wrong element size: %u, expected %u\n", 203 "wrong element size: %u, expected %u\n",
@@ -210,8 +209,10 @@ set_result_cb (void *cls,
210 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "set %s: got element (%s)\n", 209 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "set %s: got element (%s)\n",
211 info->id, GNUNET_h2s (element->data)); 210 info->id, GNUNET_h2s (element->data));
212 GNUNET_assert (NULL != element->data); 211 GNUNET_assert (NULL != element->data);
212 struct GNUNET_HashCode data_hash;
213 GNUNET_CRYPTO_hash (element->data, element_size, &data_hash);
213 GNUNET_CONTAINER_multihashmap_put (info->received, 214 GNUNET_CONTAINER_multihashmap_put (info->received,
214 element->data, NULL, 215 &data_hash, NULL,
215 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 216 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
216} 217}
217 218
@@ -265,14 +266,9 @@ set_insert_iterator (void *cls,
265 struct GNUNET_SET_Handle *set = cls; 266 struct GNUNET_SET_Handle *set = cls;
266 struct GNUNET_SET_Element el; 267 struct GNUNET_SET_Element el;
267 268
268 GNUNET_assert (element_length > 0);
269 char payload[element_length];
270
271 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, payload, element_length);
272
273 el.element_type = 0; 269 el.element_type = 0;
274 el.data = payload; 270 el.data = value;
275 el.size = element_length; 271 el.size = element_size;
276 GNUNET_SET_add_element (set, &el, NULL, NULL); 272 GNUNET_SET_add_element (set, &el, NULL, NULL);
277 return GNUNET_YES; 273 return GNUNET_YES;
278} 274}
@@ -325,6 +321,8 @@ run (void *cls,
325 321
326 config = cfg; 322 config = cfg;
327 323
324 GNUNET_assert (element_size > 0);
325
328 if (GNUNET_OK != GNUNET_CRYPTO_get_peer_identity (cfg, &local_peer)) 326 if (GNUNET_OK != GNUNET_CRYPTO_get_peer_identity (cfg, &local_peer))
329 { 327 {
330 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n"); 328 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n");
@@ -348,22 +346,28 @@ run (void *cls,
348 346
349 for (i = 0; i < num_a; i++) 347 for (i = 0; i < num_a; i++)
350 { 348 {
351 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); 349 char *data = GNUNET_malloc (element_size);
352 GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, NULL, 350 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size);
351 GNUNET_CRYPTO_hash (data, element_size, &hash);
352 GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, data,
353 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 353 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
354 } 354 }
355 355
356 for (i = 0; i < num_b; i++) 356 for (i = 0; i < num_b; i++)
357 { 357 {
358 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); 358 char *data = GNUNET_malloc (element_size);
359 GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, NULL, 359 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size);
360 GNUNET_CRYPTO_hash (data, element_size, &hash);
361 GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, data,
360 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 362 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
361 } 363 }
362 364
363 for (i = 0; i < num_c; i++) 365 for (i = 0; i < num_c; i++)
364 { 366 {
365 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); 367 char *data = GNUNET_malloc (element_size);
366 GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, NULL, 368 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size);
369 GNUNET_CRYPTO_hash (data, element_size, &hash);
370 GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, data,
367 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 371 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
368 } 372 }
369 373
@@ -435,9 +439,6 @@ main (int argc, char **argv)
435 { 'f', "force-full", NULL, 439 { 'f', "force-full", NULL,
436 gettext_noop ("force sending full set"), 440 gettext_noop ("force sending full set"),
437 GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_full }, 441 GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_full },
438 { 'w', "element-length", NULL,
439 gettext_noop ("element length in byte"),
440 GNUNET_NO, &GNUNET_GETOPT_set_uint, &element_length },
441 { 'd', "force-delta", NULL, 442 { 'd', "force-delta", NULL,
442 gettext_noop ("number delta operation"), 443 gettext_noop ("number delta operation"),
443 GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_delta }, 444 GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_delta },
@@ -447,6 +448,9 @@ main (int argc, char **argv)
447 { 'x', "operation", NULL, 448 { 'x', "operation", NULL,
448 gettext_noop ("operation to execute"), 449 gettext_noop ("operation to execute"),
449 GNUNET_YES, &GNUNET_GETOPT_set_string, &op_str }, 450 GNUNET_YES, &GNUNET_GETOPT_set_string, &op_str },
451 { 'w', "element-size", NULL,
452 gettext_noop ("element size"),
453 GNUNET_YES, &GNUNET_GETOPT_set_uint, &element_size },
450 { 's', "statistics", NULL, 454 { 's', "statistics", NULL,
451 gettext_noop ("write statistics to file"), 455 gettext_noop ("write statistics to file"),
452 GNUNET_YES, &GNUNET_GETOPT_set_filename, &statistics_filename }, 456 GNUNET_YES, &GNUNET_GETOPT_set_filename, &statistics_filename },