X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Ftest_server_with_client.c;h=b28b3b69f0705f0c4e82981bca9191e767194b2d;hb=555214089c7045298f23fea9e060ea931804e75f;hp=cccb2652da25db4199a3643a78026aae169791a0;hpb=d713802b3badf20aa9328207f2a7eb89a859bd83;p=oweals%2Fgnunet.git diff --git a/src/util/test_server_with_client.c b/src/util/test_server_with_client.c index cccb2652d..b28b3b69f 100644 --- a/src/util/test_server_with_client.c +++ b/src/util/test_server_with_client.c @@ -30,7 +30,7 @@ #include "gnunet_server_lib.h" #include "gnunet_time_lib.h" -#define VERBOSE GNUNET_YES +#define VERBOSE GNUNET_NO #define PORT 22335 @@ -74,6 +74,9 @@ recv_cb (void *cls, GNUNET_assert (addrlen == sizeof (struct sockaddr_in)); have = addr; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = have->sin_port; sa.sin_addr.s_addr = htonl (INADDR_LOOPBACK); @@ -84,16 +87,13 @@ recv_cb (void *cls, case 2: ok++; GNUNET_SCHEDULER_add_delayed (sched, - GNUNET_YES, - GNUNET_SCHEDULER_PRIORITY_KEEP, - GNUNET_SCHEDULER_NO_PREREQUISITE_TASK, GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 50), &send_done, argclient); break; case 4: ok++; - GNUNET_CLIENT_disconnect (client); + GNUNET_CLIENT_disconnect (client, GNUNET_YES); GNUNET_SERVER_receive_done (argclient, GNUNET_OK); break; default: @@ -103,6 +103,16 @@ recv_cb (void *cls, } +static void +clean_up (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + GNUNET_SERVER_destroy (server); + server = NULL; + GNUNET_CONFIGURATION_destroy (cfg); + cfg = NULL; +} + + /** * Functions with this signature are called whenever a client * is disconnected on the network level. @@ -113,10 +123,12 @@ recv_cb (void *cls, static void notify_disconnect (void *cls, struct GNUNET_SERVER_Client *client) { + if (client == NULL) + return; GNUNET_assert (ok == 5); ok = 0; - GNUNET_SCHEDULER_shutdown (sched); - GNUNET_CONFIGURATION_destroy (cfg); + GNUNET_SCHEDULER_add_now (sched, + &clean_up, NULL); } @@ -148,16 +160,25 @@ static void task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct sockaddr_in sa; + struct sockaddr * sap[2]; + socklen_t slens[2]; + sap[0] = (struct sockaddr*) &sa; + slens[0] = sizeof (sa); + sap[1] = NULL; + slens[1] = 0; sched = tc->sched; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = htons (PORT); server = GNUNET_SERVER_create (tc->sched, NULL, NULL, - (const struct sockaddr *) &sa, - sizeof (sa), + sap, + slens, 1024, GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 250), @@ -170,13 +191,15 @@ task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_CONFIGURATION_set_value_number (cfg, "test", "PORT", PORT); GNUNET_CONFIGURATION_set_value_string (cfg, "test", "HOSTNAME", "localhost"); + GNUNET_CONFIGURATION_set_value_string (cfg, "resolver", "HOSTNAME", + "localhost"); client = GNUNET_CLIENT_connect (tc->sched, "test", cfg); GNUNET_assert (client != NULL); GNUNET_CLIENT_notify_transmit_ready (client, 256, GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 250), - ¬ify_ready, NULL); + GNUNET_NO, ¬ify_ready, NULL); }