X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcore%2Ftest_core_api.c;h=38aaf63b175afdb1944448fa8e20d73d47d4ede1;hb=30082674cb0bb93bb8d636baef7d72fc7850bbdf;hp=c931fccc2395520da425a396eb60a18f2a6d0f69;hpb=53d0e2a26886c03a7d92cb400da9ddf5cb841d65;p=oweals%2Fgnunet.git diff --git a/src/core/test_core_api.c b/src/core/test_core_api.c index c931fccc2..38aaf63b1 100644 --- a/src/core/test_core_api.c +++ b/src/core/test_core_api.c @@ -1,10 +1,10 @@ /* This file is part of GNUnet. - (C) 2009 Christian Grothoff (and other contributing authors) + (C) 2009, 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but @@ -34,16 +34,9 @@ #include "gnunet_scheduler_lib.h" #include "gnunet_transport_service.h" -#define VERBOSE GNUNET_YES - +#define VERBOSE GNUNET_NO #define START_ARM GNUNET_YES - -/** - * How long until we give up on transmitting the message? - */ -#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 6) - #define MTYPE 12345 struct PeerContext @@ -53,8 +46,9 @@ struct PeerContext struct GNUNET_PeerIdentity id; struct GNUNET_TRANSPORT_Handle *th; struct GNUNET_MessageHeader *hello; + int connect_status; #if START_ARM - pid_t arm_pid; + struct GNUNET_OS_Process *arm_proc; #endif }; @@ -62,7 +56,7 @@ static struct PeerContext p1; static struct PeerContext p2; -static struct GNUNET_SCHEDULER_Handle *sched; +static GNUNET_SCHEDULER_TaskIdentifier err_task; static int ok; @@ -82,8 +76,6 @@ terminate_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_CORE_disconnect (p2.ch); GNUNET_TRANSPORT_disconnect (p1.th); GNUNET_TRANSPORT_disconnect (p2.th); - GNUNET_ARM_stop_services (p1.cfg, sched, "core", NULL); - GNUNET_ARM_stop_services (p2.cfg, sched, "core", NULL); ok = 0; } @@ -91,27 +83,73 @@ terminate_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) static void terminate_task_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { +#if VERBOSE + fprintf(stderr, "ENDING ANGRILY %u\n", ok); +#endif GNUNET_break (0); GNUNET_CORE_disconnect (p1.ch); GNUNET_CORE_disconnect (p2.ch); GNUNET_TRANSPORT_disconnect (p1.th); GNUNET_TRANSPORT_disconnect (p2.th); - GNUNET_ARM_stop_services (p1.cfg, sched, "core", NULL); - GNUNET_ARM_stop_services (p2.cfg, sched, "core", NULL); ok = 42; } +static size_t +transmit_ready (void *cls, size_t size, void *buf) +{ + struct PeerContext *p = cls; + struct GNUNET_MessageHeader *m; + + GNUNET_assert (ok == 4); + OKPP; + GNUNET_assert (p == &p1); + GNUNET_assert (buf != NULL); + m = (struct GNUNET_MessageHeader *) buf; + m->type = htons (MTYPE); + m->size = htons (sizeof (struct GNUNET_MessageHeader)); + err_task = + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 120), + &terminate_task_error, NULL); + + return sizeof (struct GNUNET_MessageHeader); +} + + static void connect_notify (void *cls, const struct GNUNET_PeerIdentity *peer, - struct GNUNET_TIME_Relative latency, - uint32_t distance) + const struct GNUNET_TRANSPORT_ATS_Information *atsi) { - GNUNET_assert ((ok == 5) || (ok == 6)); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Encrypted connection established to peer `%4s'\n", - GNUNET_i2s (peer)); + struct PeerContext *pc = cls; + + if (0 == memcmp (&pc->id, + peer, + sizeof (struct GNUNET_PeerIdentity))) + return; + GNUNET_assert (pc->connect_status == 0); + pc->connect_status = 1; + if (pc == &p1) + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Encrypted connection established to peer `%4s'\n", + GNUNET_i2s (peer)); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Asking core (1) for transmission to peer `%4s'\n", + GNUNET_i2s (&p2.id)); + if (NULL == GNUNET_CORE_notify_transmit_ready (p1.ch, + GNUNET_YES, + 0, + GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 45), + &p2.id, + sizeof (struct GNUNET_MessageHeader), + &transmit_ready, &p1)) + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "RECEIVED NULL when asking core (1) for transmission to peer `%4s'\n", + GNUNET_i2s (&p2.id)); + } + } } @@ -119,6 +157,13 @@ static void disconnect_notify (void *cls, const struct GNUNET_PeerIdentity *peer) { + struct PeerContext *pc = cls; + + if (0 == memcmp (&pc->id, + peer, + sizeof (struct GNUNET_PeerIdentity))) + return; + pc->connect_status = 0; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Encrypted connection to `%4s' cut\n", GNUNET_i2s (peer)); } @@ -128,8 +173,7 @@ static int inbound_notify (void *cls, const struct GNUNET_PeerIdentity *other, const struct GNUNET_MessageHeader *message, - struct GNUNET_TIME_Relative latency, - uint32_t distance) + const struct GNUNET_TRANSPORT_ATS_Information *atsi) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Core provides inbound data from `%4s'.\n", GNUNET_i2s (other)); @@ -141,8 +185,7 @@ static int outbound_notify (void *cls, const struct GNUNET_PeerIdentity *other, const struct GNUNET_MessageHeader *message, - struct GNUNET_TIME_Relative latency, - uint32_t distance) + const struct GNUNET_TRANSPORT_ATS_Information *atsi) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Core notifies about outbound data for `%4s'.\n", @@ -151,22 +194,19 @@ outbound_notify (void *cls, } -static GNUNET_SCHEDULER_TaskIdentifier err_task; - static int process_mtype (void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_MessageHeader *message, - struct GNUNET_TIME_Relative latency, - uint32_t distance) + const struct GNUNET_TRANSPORT_ATS_Information *atsi) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving message from `%4s'.\n", GNUNET_i2s (peer)); GNUNET_assert (ok == 5); OKPP; - GNUNET_SCHEDULER_cancel (sched, err_task); - GNUNET_SCHEDULER_add_now (sched, &terminate_task, NULL); + GNUNET_SCHEDULER_cancel (err_task); + GNUNET_SCHEDULER_add_now (&terminate_task, NULL); return GNUNET_OK; } @@ -177,28 +217,6 @@ static struct GNUNET_CORE_MessageHandler handlers[] = { }; -static size_t -transmit_ready (void *cls, size_t size, void *buf) -{ - struct PeerContext *p = cls; - struct GNUNET_MessageHeader *m; - - GNUNET_assert (ok == 4); - OKPP; - GNUNET_assert (p == &p1); - GNUNET_assert (buf != NULL); - m = (struct GNUNET_MessageHeader *) buf; - m->type = htons (MTYPE); - m->size = htons (sizeof (struct GNUNET_MessageHeader)); - err_task = - GNUNET_SCHEDULER_add_delayed (sched, - TIMEOUT, &terminate_task_error, NULL); - - return sizeof (struct GNUNET_MessageHeader); -} - - - static void init_notify (void *cls, struct GNUNET_CORE_Handle *server, @@ -218,14 +236,12 @@ init_notify (void *cls, GNUNET_assert (ok == 2); OKPP; /* connect p2 */ - GNUNET_CORE_connect (sched, - p2.cfg, - TIMEOUT, + GNUNET_CORE_connect (p2.cfg, 1, &p2, - &init_notify, - NULL, + &init_notify, &connect_notify, &disconnect_notify, + NULL, &inbound_notify, GNUNET_YES, &outbound_notify, GNUNET_YES, handlers); @@ -236,15 +252,12 @@ init_notify (void *cls, OKPP; GNUNET_assert (cls == &p2); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Asking core (1) for transmission to peer `%4s'\n", + "Asking core (1) to connect to peer `%4s'\n", GNUNET_i2s (&p2.id)); - GNUNET_CORE_notify_transmit_ready (p1.ch, - 0, - TIMEOUT, - &p2.id, - sizeof (struct GNUNET_MessageHeader), - &transmit_ready, &p1); - + GNUNET_CORE_peer_request_connect (p1.ch, + GNUNET_TIME_UNIT_SECONDS, + &p2.id, + NULL, NULL); } } @@ -263,14 +276,14 @@ process_hello (void *cls, p->hello = GNUNET_malloc (ntohs (message->size)); memcpy (p->hello, message, ntohs (message->size)); if ((p == &p1) && (p2.th != NULL)) - GNUNET_TRANSPORT_offer_hello (p2.th, message); + GNUNET_TRANSPORT_offer_hello (p2.th, message, NULL, NULL); if ((p == &p2) && (p1.th != NULL)) - GNUNET_TRANSPORT_offer_hello (p1.th, message); + GNUNET_TRANSPORT_offer_hello (p1.th, message, NULL, NULL); if ((p == &p1) && (p2.hello != NULL)) - GNUNET_TRANSPORT_offer_hello (p1.th, p2.hello); + GNUNET_TRANSPORT_offer_hello (p1.th, p2.hello, NULL, NULL); if ((p == &p2) && (p1.hello != NULL)) - GNUNET_TRANSPORT_offer_hello (p2.th, p1.hello); + GNUNET_TRANSPORT_offer_hello (p2.th, p1.hello, NULL, NULL); } @@ -280,7 +293,7 @@ setup_peer (struct PeerContext *p, const char *cfgname) { p->cfg = GNUNET_CONFIGURATION_create (); #if START_ARM - p->arm_pid = GNUNET_OS_start_process ("gnunet-service-arm", + p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", "gnunet-service-arm", #if VERBOSE "-L", "DEBUG", @@ -288,8 +301,7 @@ setup_peer (struct PeerContext *p, const char *cfgname) "-c", cfgname, NULL); #endif GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); - GNUNET_ARM_start_services (p->cfg, sched, "core", NULL); - p->th = GNUNET_TRANSPORT_connect (sched, p->cfg, p, NULL, NULL, NULL); + p->th = GNUNET_TRANSPORT_connect (p->cfg, NULL, p, NULL, NULL, NULL); GNUNET_assert (p->th != NULL); GNUNET_TRANSPORT_get_hello (p->th, &process_hello, p); } @@ -297,39 +309,36 @@ setup_peer (struct PeerContext *p, const char *cfgname) static void run (void *cls, - struct GNUNET_SCHEDULER_Handle *s, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { GNUNET_assert (ok == 1); OKPP; - sched = s; setup_peer (&p1, "test_core_api_peer1.conf"); setup_peer (&p2, "test_core_api_peer2.conf"); - GNUNET_CORE_connect (sched, - p1.cfg, - TIMEOUT, + GNUNET_CORE_connect (p1.cfg, 1, &p1, &init_notify, - NULL, - &connect_notify, + &connect_notify, &disconnect_notify, + NULL, &inbound_notify, GNUNET_YES, &outbound_notify, GNUNET_YES, handlers); } - static void stop_arm (struct PeerContext *p) { #if START_ARM - if (0 != PLIBC_KILL (p->arm_pid, SIGTERM)) + if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); - if (GNUNET_OS_process_wait(p->arm_pid) != GNUNET_OK) + if (GNUNET_OS_process_wait(p->arm_proc) != GNUNET_OK) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "ARM process %u stopped\n", p->arm_pid); + "ARM process %u stopped\n", GNUNET_OS_process_get_pid (p->arm_proc)); + GNUNET_OS_process_close (p->arm_proc); + p->arm_proc = NULL; #endif GNUNET_CONFIGURATION_destroy (p->cfg); }