X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Ftransport-testing.c;h=dcd95053b176f004a79c5744fc01ce23bd514fe6;hb=6d754e6c89fda8cb0da00c4152ffc6dcc707e6ce;hp=d11c885f811ba00ded265a6a3a8ca4b9f466afe3;hpb=0884d78b8fb7a867440802629698692c334bffbd;p=oweals%2Fgnunet.git diff --git a/src/transport/transport-testing.c b/src/transport/transport-testing.c index d11c885f8..dcd95053b 100644 --- a/src/transport/transport-testing.c +++ b/src/transport/transport-testing.c @@ -27,7 +27,6 @@ #include "transport-testing.h" -#define VERBOSE GNUNET_YES #define HOSTKEYFILESIZE 914 static const char * @@ -254,9 +253,13 @@ try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) /** * Start a peer with the given configuration + * @param tth the testing handle + * @param cfgname configuration file + * @param peer_id the peer_id * @param rec receive callback * @param nc connect callback * @param nd disconnect callback + * @param start_cb start callback * @param cb_cls closure for callback * @return the peer context */ @@ -285,22 +288,22 @@ GNUNET_TRANSPORT_TESTING_start_peer (struct GNUNET_TRANSPORT_TESTING_handle p->cfg = GNUNET_CONFIGURATION_create (); GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); - if (GNUNET_CONFIGURATION_have_value (p-> - cfg, "PATHS", "SERVICEHOME")) + if (GNUNET_CONFIGURATION_have_value (p->cfg, "PATHS", "SERVICEHOME")) GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (p->cfg, "PATHS", "SERVICEHOME", &p->servicehome)); - if (NULL != p->servicehome) - GNUNET_DISK_directory_remove (p->servicehome); + if (NULL != p->servicehome) + GNUNET_DISK_directory_remove (p->servicehome); - hostkey = get_host_key(tth); + hostkey = get_host_key (tth); if (hostkey != NULL) { GNUNET_asprintf (&p->hostkeyfile, "%s/.hostkey", p->servicehome); - GNUNET_assert(GNUNET_OK == GNUNET_DISK_directory_create_for_file (p->hostkeyfile)); + GNUNET_assert (GNUNET_OK == + GNUNET_DISK_directory_create_for_file (p->hostkeyfile)); fn = GNUNET_DISK_file_open (p->hostkeyfile, GNUNET_DISK_OPEN_READWRITE | GNUNET_DISK_OPEN_CREATE, @@ -353,25 +356,28 @@ GNUNET_TRANSPORT_TESTING_start_peer (struct GNUNET_TRANSPORT_TESTING_handle * @param tth testing handle * @param p the peer * @param cfgname the cfg file used to restart +* @param restart_cb callback to call when restarted +* @param cb_cls callback closure * @return GNUNET_OK in success otherwise GNUNET_SYSERR */ int -GNUNET_TRANSPORT_TESTING_restart_peer (struct GNUNET_TRANSPORT_TESTING_handle *tth, - struct PeerContext *p, - const char *cfgname) +GNUNET_TRANSPORT_TESTING_restart_peer (struct GNUNET_TRANSPORT_TESTING_handle + *tth, struct PeerContext *p, + const char *cfgname, + GNUNET_TRANSPORT_TESTING_start_cb + restart_cb, void *cb_cls) { struct GNUNET_DISK_FileHandle *fn; - int success = GNUNET_OK; + GNUNET_assert (tth != NULL); GNUNET_assert (p != NULL); GNUNET_assert (p->hostkeyfile != NULL); GNUNET_assert (p->servicehome != NULL); /* shutdown */ #if VERBOSE - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing", - "Stopping peer %u (`%s')\n", p->no, - GNUNET_i2s (&p->id)); + GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing", + "Stopping peer %u (`%s')\n", p->no, GNUNET_i2s (&p->id)); #endif if (p->ghh != NULL) GNUNET_TRANSPORT_get_hello_cancel (p->ghh); @@ -396,73 +402,71 @@ GNUNET_TRANSPORT_TESTING_restart_peer (struct GNUNET_TRANSPORT_TESTING_handle *t GNUNET_CONFIGURATION_destroy (p->cfg); p->cfg = NULL; + /* start */ #if VERBOSE - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing", - "Restarting peer %u (`%s')\n", p->no, - GNUNET_i2s (&p->id)); + GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing", + "Restarting peer %u (`%s')\n", p->no, GNUNET_i2s (&p->id)); #endif + sleep (5); // YUCK! - GNUNET_assert (tth != NULL); if (GNUNET_DISK_file_test (cfgname) == GNUNET_NO) { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing", - "File not found: `%s' \n", cfgname); - success = GNUNET_SYSERR; - goto fail; + GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing", + "File not found: `%s' \n", cfgname); + goto fail; } p->cfg = GNUNET_CONFIGURATION_create (); GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); - if (GNUNET_CONFIGURATION_have_value (p->cfg, "PATHS", "SERVICEHOME")) + + if (!GNUNET_CONFIGURATION_have_value (p->cfg, "PATHS", "SERVICEHOME")) + goto fail; fn = GNUNET_DISK_file_open (p->hostkeyfile, - GNUNET_DISK_OPEN_READWRITE | - GNUNET_DISK_OPEN_CREATE, - GNUNET_DISK_PERM_USER_READ | - GNUNET_DISK_PERM_USER_WRITE); + GNUNET_DISK_OPEN_READWRITE | + GNUNET_DISK_OPEN_CREATE, + GNUNET_DISK_PERM_USER_READ | + GNUNET_DISK_PERM_USER_WRITE); if (fn == NULL) - { - success = GNUNET_SYSERR; - goto fail; - } + goto fail; if (GNUNET_OK != GNUNET_DISK_file_close (fn)) - { - success = GNUNET_SYSERR; - goto fail; - } + goto fail; - p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", - "gnunet-service-arm", "-c", cfgname, - #if VERBOSE_PEERS - "-L", "DEBUG", - #else - "-L", "ERROR", - #endif - NULL); + p->arm_proc = + GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", + "gnunet-service-arm", "-c", cfgname, +#if VERBOSE_PEERS + "-L", "DEBUG", +#else + "-L", "ERROR", +#endif + NULL); p->th = - GNUNET_TRANSPORT_connect (p->cfg, NULL, p, ¬ify_receive, - ¬ify_connect, ¬ify_disconnect); + GNUNET_TRANSPORT_connect (p->cfg, NULL, p, ¬ify_receive, + ¬ify_connect, ¬ify_disconnect); GNUNET_assert (p->th != NULL); + p->start_cb = restart_cb; + p->cb_cls = cb_cls; + p->ghh = GNUNET_TRANSPORT_get_hello (p->th, &get_hello, p); GNUNET_assert (p->ghh != NULL); + return GNUNET_OK; - fail: - if (success == GNUNET_SYSERR) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing", - "Restarting peer %u (`%s') failed, removing peer\n", p->no, - GNUNET_i2s (&p->id)); - GNUNET_TRANSPORT_TESTING_stop_peer (tth,p); - } - return success; +fail: + GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing", + "Restarting peer %u (`%s') failed, removing peer\n", p->no, + GNUNET_i2s (&p->id)); + GNUNET_TRANSPORT_TESTING_stop_peer (tth, p); + return GNUNET_SYSERR; } /** * shutdown the given peer + * @param tth testing handle * @param p the peer */ void @@ -566,7 +570,9 @@ GNUNET_TRANSPORT_TESTING_connect_peers (struct GNUNET_TRANSPORT_TESTING_handle /** * Cancel the request to connect two peers * Tou MUST cancel the request if you stop the peers before the peers connected succesfully - * @param cc a connect request handle + * + * @param tth transport testing handle + * @param ccr a connect request handle */ void GNUNET_TRANSPORT_TESTING_connect_peers_cancel (struct @@ -636,20 +642,20 @@ GNUNET_TRANSPORT_TESTING_done (struct GNUNET_TRANSPORT_TESTING_handle *tth) struct GNUNET_TRANSPORT_TESTING_handle * GNUNET_TRANSPORT_TESTING_init () { - struct GNUNET_TRANSPORT_TESTING_handle *tth = - GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_TESTING_handle)); + struct GNUNET_TRANSPORT_TESTING_handle *tth; struct GNUNET_DISK_FileHandle *fd; uint64_t fs; uint64_t total_hostkeys; /* prepare hostkeys */ + tth = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_TESTING_handle)); tth->hostkey_data = NULL; - char * hostkeys_file = "../../contrib/testing_hostkeys.dat"; + const char *hostkeys_file = "../../contrib/testing_hostkeys.dat"; + if (GNUNET_YES != GNUNET_DISK_file_test (hostkeys_file)) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not read hostkeys file!\n")); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not read hostkeys file!\n")); } else { @@ -658,8 +664,8 @@ GNUNET_TRANSPORT_TESTING_init () GNUNET_DISK_PERM_NONE); if (NULL == fd) { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", - hostkeys_file); + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", hostkeys_file); + GNUNET_free (tth); return NULL; } @@ -669,7 +675,7 @@ GNUNET_TRANSPORT_TESTING_init () if (0 != (fs % HOSTKEYFILESIZE)) { GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing", - "File size %llu seems incorrect for hostkeys...\n", fs); + "File size %llu seems incorrect for hostkeys...\n", fs); } else { @@ -677,7 +683,7 @@ GNUNET_TRANSPORT_TESTING_init () tth->hostkey_data = GNUNET_malloc_large (fs); GNUNET_assert (fs == GNUNET_DISK_file_read (fd, tth->hostkey_data, fs)); GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing", - "Read %llu hostkeys from file\n", total_hostkeys); + "Read %llu hostkeys from file\n", total_hostkeys); tth->hostkeys_total = total_hostkeys; } GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd)); @@ -832,8 +838,9 @@ suc: /** * This function takes the filename (e.g. argv[0), removes a "lt-"-prefix and * if existing ".exe"-prefix and adds the peer-number + * * @param file filename of the test, e.g. argv[0] - * @param cfgname where to write the result + * @param dest where to write the filename * @param count peer number */ void