From 5b6a9fcaadf0a8be03367367625fdad7e9340998 Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Sun, 14 Apr 2013 21:36:14 +0000 Subject: [PATCH] - input source for lstlisting in c tutorial --- doc/testbed_test.c | 124 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 doc/testbed_test.c diff --git a/doc/testbed_test.c b/doc/testbed_test.c new file mode 100644 index 000000000..593c3c703 --- /dev/null +++ b/doc/testbed_test.c @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include + +/* Number of peers we want to start */ +#define NUM_PEERS 20 + +struct GNUNET_TESTBED_Operation *dht_op; + +struct GNUNET_DHT_Handle *dht_handle; + +GNUNET_SCHEDULER_TaskIdentifier shutdown_tid; + +struct MyContext +{ + int ht_len; +} ctxt; + +static int result; + +static void +shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + shutdown_tid = GNUNET_SCHEDULER_NO_TASK; + if (NULL != dht_op) + { + GNUNET_TESTBED_operation_done (dht_op); /* calls the dht_da() for closing + down the connection */ + dht_op = NULL; + } + result = GNUNET_OK; + GNUNET_SCHEDULER_shutdown (); /* Also kills the testbed */ +} + + +static void +service_connect_comp (void *cls, + struct GNUNET_TESTBED_Operation *op, + void *ca_result, + const char *emsg) +{ + /* Service to DHT successful; do something */ + + GNUNET_SCHEDULER_cancel (shutdown_tid); + GNUNET_SCHEDULER_add_delayed + (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10), + &shutdown_task, NULL); +} + + +static void * +dht_ca (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + struct MyContext *ctxt = cls; + + /* Use the provided configuration to connect to service */ + dht_handle = GNUNET_DHT_connect (cfg, ctxt->ht_len); + return dht_handle; +} + + +static void +dht_da (void *cls, void *op_result) +{ + struct MyContext *ctxt = cls; + + /* Disconnect from DHT service */ + GNUNET_DHT_disconnect ((struct GNUNET_DHT_Handle *) op_result); + ctxt->ht_len = 0; + dht_handle = NULL; +} + +static void +test_master (void *cls, unsigned int num_peers, + struct GNUNET_TESTBED_Peer **peers, + unsigned int links_succeeeded, + unsigned int links_failed) +{ + /* Testbed is ready with peers running and connected in a pre-defined overlay + topology */ + + /* do something */ + ctxt.ht_len = 10; + + /* connect to a peers service */ + dht_op = GNUNET_TESTBED_service_connect + (NULL, /* Closure for operation */ + peers[0], /* The peer whose service to connect to */ + "dht", /* The name of the service */ + service_connect_comp, /* callback to call after a handle to service + is opened */ + NULL, /* closure for the above callback */ + dht_ca, /* callback to call with peer's configuration; + this should open the needed service connection */ + dht_da, /* callback to be called when closing the + opened service connection */ + &ctxt); /* closure for the above two callbacks */ + shutdown_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, + &shutdown_task, NULL); +} + + +int +main (int argc, char **argv) +{ + int ret; + + result = GNUNET_SYSERR; + ret = GNUNET_TESTBED_test_run + ("awesome-test", /* test case name */ + "template.conf", /* template configuration */ + NUM_PEERS, /* number of peers to start */ + 0LL, /* Event mask - set to 0 for no event notifications */ + NULL, /* Controller event callback */ + NULL, /* Closure for controller event callback */ + &test_master, /* continuation callback to be called when testbed setup is + complete */ + NULL); /* Closure for the test_master callback */ + if ( (GNUNET_OK != ret) || (GNUNET_OK != result) ) + return 1; + return 0; +} -- 2.25.1