X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ffragmentation%2Ftest_fragmentation.c;h=cbfb8efe456df8f647eaee1a67fc0e1f4dd4c306;hb=6d754e6c89fda8cb0da00c4152ffc6dcc707e6ce;hp=b534a134e5bdc55e1fee53013abc45b075ac0954;hpb=502af2167f7c218366666ca4944bd7cc54b5b19a;p=oweals%2Fgnunet.git diff --git a/src/fragmentation/test_fragmentation.c b/src/fragmentation/test_fragmentation.c index b534a134e..cbfb8efe4 100644 --- a/src/fragmentation/test_fragmentation.c +++ b/src/fragmentation/test_fragmentation.c @@ -25,7 +25,7 @@ #include "platform.h" #include "gnunet_fragmentation_lib.h" -#define VERBOSE GNUNET_NO +#define VERBOSE GNUNET_EXTRA_LOGGING #define DETAILS GNUNET_NO @@ -62,6 +62,27 @@ static struct GNUNET_BANDWIDTH_Tracker trackers[NUM_MSGS]; static struct GNUNET_FRAGMENT_Context *frags[NUM_MSGS]; +static GNUNET_SCHEDULER_TaskIdentifier shutdown_task; + +static void +do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + unsigned int i; + + ret = 0; + shutdown_task = GNUNET_SCHEDULER_NO_TASK; + GNUNET_DEFRAGMENT_context_destroy (defrag); + defrag = NULL; + for (i = 0; i < NUM_MSGS; i++) + { + if (frags[i] == NULL) + continue; + GNUNET_FRAGMENT_context_destroy (frags[i]); + frags[i] = NULL; + } +} + + static void proc_msgs (void *cls, const struct GNUNET_MessageHeader *hdr) { @@ -70,7 +91,7 @@ proc_msgs (void *cls, const struct GNUNET_MessageHeader *hdr) const char *buf; #if DETAILS - fprintf (stderr, "!"); /* message complete, good! */ + FPRINTF (stderr, "%s", "!"); /* message complete, good! */ #endif buf = (const char *) hdr; for (i = sizeof (struct GNUNET_MessageHeader); i < ntohs (hdr->size); i++) @@ -78,21 +99,13 @@ proc_msgs (void *cls, const struct GNUNET_MessageHeader *hdr) total++; #if ! DETAILS if (0 == (total % (NUM_MSGS / 100))) - fprintf (stderr, "."); + FPRINTF (stderr, "%s", "."); #endif /* tolerate 10% loss, i.e. due to duplicate fragment IDs */ - if (total >= NUM_MSGS - (NUM_MSGS / 10)) + if ((total >= NUM_MSGS - (NUM_MSGS / 10)) && (ret != 0)) { - ret = 0; - GNUNET_DEFRAGMENT_context_destroy (defrag); - defrag = NULL; - for (i = 0; i < NUM_MSGS; i++) - { - if (frags[i] == NULL) - continue; - GNUNET_FRAGMENT_context_destroy (frags[i]); - frags[i] = NULL; - } + if (GNUNET_SCHEDULER_NO_TASK == shutdown_task) + shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); } } @@ -119,7 +132,7 @@ proc_acks (void *cls, uint32_t msg_id, const struct GNUNET_MessageHeader *hdr) if (ret == GNUNET_OK) { #if DETAILS - fprintf (stderr, "@"); /* good ACK */ + FPRINTF (stderr, "%s", "@"); /* good ACK */ #endif GNUNET_FRAGMENT_context_destroy (frags[i]); frags[i] = NULL; @@ -129,14 +142,14 @@ proc_acks (void *cls, uint32_t msg_id, const struct GNUNET_MessageHeader *hdr) if (ret == GNUNET_NO) { #if DETAILS - fprintf (stderr, "@"); /* good ACK */ + FPRINTF (stderr, "%s", "@"); /* good ACK */ #endif acks++; return; } } #if DETAILS - fprintf (stderr, "_"); /* BAD: ack that nobody feels responsible for... */ + FPRINTF (stderr, "%s", "_"); /* BAD: ack that nobody feels responsible for... */ #endif } @@ -158,21 +171,21 @@ proc_frac (void *cls, const struct GNUNET_MessageHeader *hdr) } if (NULL == defrag) { - fprintf (stderr, "E"); /* Error: frag after shutdown!? */ + FPRINTF (stderr, "%s", "E"); /* Error: frag after shutdown!? */ return; } ret = GNUNET_DEFRAGMENT_process_fragment (defrag, hdr); if (ret == GNUNET_NO) { #if DETAILS - fprintf (stderr, "?"); /* duplicate fragment */ + FPRINTF (stderr, "%s", "?"); /* duplicate fragment */ #endif dups++; } else if (ret == GNUNET_OK) { #if DETAILS - fprintf (stderr, "."); /* good fragment */ + FPRINTF (stderr, "%s", "."); /* good fragment */ #endif fragc++; } @@ -183,9 +196,8 @@ proc_frac (void *cls, const struct GNUNET_MessageHeader *hdr) * Main function run with scheduler. */ static void -run (void *cls, - char *const *args, - const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) { unsigned int i; struct GNUNET_MessageHeader *msg; @@ -202,10 +214,9 @@ run (void *cls, msg->size = htons (sizeof (struct GNUNET_MessageHeader) + (17 * i) % (32 * 1024)); frags[i] = GNUNET_FRAGMENT_context_create (NULL /* no stats */ , - MTU, - &trackers[i], - GNUNET_TIME_UNIT_SECONDS, - msg, &proc_frac, &frags[i]); + MTU, &trackers[i], + GNUNET_TIME_UNIT_SECONDS, msg, + &proc_frac, &frags[i]); } } @@ -243,7 +254,7 @@ main (int argc, char *argv[]) 100); GNUNET_PROGRAM_run (5, argv_prog, "test-fragmentation", "nohelp", options, &run, NULL); - fprintf (stderr, + FPRINTF (stderr, "\nHad %u good fragments, %u duplicate fragments, %u acks and %u simulated drops of acks\n", fragc, dups, acks, ack_drops); return ret;