X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fset%2Fgnunet-set-profiler.c;h=68f7be690bbb10c441490d7e2a1724596b30ab2b;hb=c2eedde37e6d157d158eecfa33887e8a312235f4;hp=a6c900f5edae1e7851bf593db075375b11bfff6c;hpb=237dd9f9c93cabd29015d0f5e3c8ceff8af3f071;p=oweals%2Fgnunet.git diff --git a/src/set/gnunet-set-profiler.c b/src/set/gnunet-set-profiler.c index a6c900f5e..68f7be690 100644 --- a/src/set/gnunet-set-profiler.c +++ b/src/set/gnunet-set-profiler.c @@ -59,10 +59,9 @@ static struct GNUNET_PeerIdentity local_peer; static struct GNUNET_SET_ListenHandle *set_listener; static int byzantine; -static int force_delta; -static int force_full; - -static unsigned int element_length = 32; +static unsigned int force_delta; +static unsigned int force_full; +static unsigned int element_size = 32; /** * Handle to the statistics service. @@ -92,7 +91,7 @@ map_remove_iterator (void *cls, GNUNET_assert (NULL != key); - ret = GNUNET_CONTAINER_multihashmap_remove (m, key, NULL); + ret = GNUNET_CONTAINER_multihashmap_remove_all (m, key); if (GNUNET_OK != ret) printf ("spurious element\n"); return GNUNET_YES; @@ -198,7 +197,7 @@ set_result_cb (void *cls, GNUNET_assert (0); } - if (element->size != sizeof (struct GNUNET_HashCode)) + if (element->size != element_size) { GNUNET_log (GNUNET_ERROR_TYPE_INFO, "wrong element size: %u, expected %u\n", @@ -210,8 +209,10 @@ set_result_cb (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_INFO, "set %s: got element (%s)\n", info->id, GNUNET_h2s (element->data)); GNUNET_assert (NULL != element->data); + struct GNUNET_HashCode data_hash; + GNUNET_CRYPTO_hash (element->data, element_size, &data_hash); GNUNET_CONTAINER_multihashmap_put (info->received, - element->data, NULL, + &data_hash, NULL, GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); } @@ -265,14 +266,9 @@ set_insert_iterator (void *cls, struct GNUNET_SET_Handle *set = cls; struct GNUNET_SET_Element el; - GNUNET_assert (element_length > 0); - char payload[element_length]; - - GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, payload, element_length); - el.element_type = 0; - el.data = payload; - el.size = element_length; + el.data = value; + el.size = element_size; GNUNET_SET_add_element (set, &el, NULL, NULL); return GNUNET_YES; } @@ -325,6 +321,8 @@ run (void *cls, config = cfg; + GNUNET_assert (element_size > 0); + if (GNUNET_OK != GNUNET_CRYPTO_get_peer_identity (cfg, &local_peer)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n"); @@ -348,22 +346,28 @@ run (void *cls, for (i = 0; i < num_a; i++) { - GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); - GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, NULL, + char *data = GNUNET_malloc (element_size); + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size); + GNUNET_CRYPTO_hash (data, element_size, &hash); + GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, data, GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); } for (i = 0; i < num_b; i++) { - GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); - GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, NULL, + char *data = GNUNET_malloc (element_size); + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size); + GNUNET_CRYPTO_hash (data, element_size, &hash); + GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, data, GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); } for (i = 0; i < num_c; i++) { - GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); - GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, NULL, + char *data = GNUNET_malloc (element_size); + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size); + GNUNET_CRYPTO_hash (data, element_size, &hash); + GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, data, GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); } @@ -422,34 +426,60 @@ pre_run (void *cls, char *const *args, const char *cfgfile, int main (int argc, char **argv) { - static const struct GNUNET_GETOPT_CommandLineOption options[] = { - { 'A', "num-first", NULL, - gettext_noop ("number of values"), - GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_a }, - { 'B', "num-second", NULL, - gettext_noop ("number of values"), - GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_b }, - { 'b', "byzantine", NULL, - gettext_noop ("use byzantine mode"), - GNUNET_NO, &GNUNET_GETOPT_set_one, &byzantine }, - { 'f', "force-full", NULL, - gettext_noop ("force sending full set"), - GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_full }, - { 'w', "element-length", NULL, - gettext_noop ("element length in byte"), - GNUNET_NO, &GNUNET_GETOPT_set_uint, &element_length }, - { 'd', "force-delta", NULL, - gettext_noop ("number delta operation"), - GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_delta }, - { 'C', "num-common", NULL, - gettext_noop ("number of values"), - GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_c }, - { 'x', "operation", NULL, - gettext_noop ("operation to execute"), - GNUNET_YES, &GNUNET_GETOPT_set_string, &op_str }, - { 's', "statistics", NULL, - gettext_noop ("write statistics to file"), - GNUNET_YES, &GNUNET_GETOPT_set_filename, &statistics_filename }, + struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_option_uint ('A', + "num-first", + NULL, + gettext_noop ("number of values"), + &num_a), + + GNUNET_GETOPT_option_uint ('B', + "num-second", + NULL, + gettext_noop ("number of values"), + &num_b), + + GNUNET_GETOPT_option_flag ('b', + "byzantine", + gettext_noop ("use byzantine mode"), + &byzantine), + + GNUNET_GETOPT_option_uint ('f', + "force-full", + NULL, + gettext_noop ("force sending full set"), + &force_full), + + GNUNET_GETOPT_option_uint ('d', + "force-delta", + NULL, + gettext_noop ("number delta operation"), + &force_delta), + + GNUNET_GETOPT_option_uint ('C', + "num-common", + NULL, + gettext_noop ("number of values"), + &num_c), + + GNUNET_GETOPT_option_string ('x', + "operation", + NULL, + gettext_noop ("operation to execute"), + &op_str), + + GNUNET_GETOPT_option_uint ('w', + "element-size", + NULL, + gettext_noop ("element size"), + &element_size), + + GNUNET_GETOPT_option_filename ('s', + "statistics", + "FILENAME", + gettext_noop ("write statistics to file"), + &statistics_filename), + GNUNET_GETOPT_OPTION_END }; GNUNET_PROGRAM_run2 (argc, argv, "gnunet-set-profiler",