diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-02-28 18:53:31 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-02-28 18:53:31 +0100 |
commit | a9a6b98c54f5cc3e680c8ea2f9c69e3955e2a7da (patch) | |
tree | 65145d9a52ffae1009402bebf5f49b287160acda /src/set | |
parent | 237dd9f9c93cabd29015d0f5e3c8ceff8af3f071 (diff) | |
download | gnunet-a9a6b98c54f5cc3e680c8ea2f9c69e3955e2a7da.tar.gz gnunet-a9a6b98c54f5cc3e680c8ea2f9c69e3955e2a7da.zip |
fix completely broken implementation of variable size elements
Diffstat (limited to 'src/set')
-rw-r--r-- | src/set/gnunet-set-profiler.c | 46 |
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; | |||
61 | static int byzantine; | 61 | static int byzantine; |
62 | static int force_delta; | 62 | static int force_delta; |
63 | static int force_full; | 63 | static int force_full; |
64 | 64 | static unsigned int element_size = 32; | |
65 | static 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 }, |