/** * Function called when the service shuts down. Unloads our plugins * and cancels pending validations. * * @param cls closure, unused * @param tc task context (unused) */ static void shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GST_neighbours_stop (); GST_validation_stop (); GST_plugins_unload (); GNUNET_ATS_scheduling_done (GST_ats); GST_ats = NULL; GST_clients_stop (); GST_blacklist_stop (); GST_hello_stop (); if (GST_peerinfo != NULL) { GNUNET_PEERINFO_disconnect (GST_peerinfo); GST_peerinfo = NULL; } if (GST_stats != NULL) { GNUNET_STATISTICS_destroy (GST_stats, GNUNET_NO); GST_stats = NULL; } if (GST_my_private_key != NULL) { GNUNET_CRYPTO_rsa_key_free (GST_my_private_key); GST_my_private_key = NULL; } }
/** * Main state machine that goes over all options and * runs the next requested function. * * @param cls unused * @param tc scheduler context */ static void shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct PrintContext *pc; struct AddressRecord *ar; unsigned int i; if (NULL != ac) { GNUNET_PEERINFO_add_peer_cancel (ac); ac = NULL; } if (GNUNET_SCHEDULER_NO_TASK != tt) { GNUNET_SCHEDULER_cancel (tt); tt = GNUNET_SCHEDULER_NO_TASK; } if (NULL != pic) { GNUNET_PEERINFO_iterate_cancel (pic); pic = NULL; } while (NULL != (pc = pc_head)) { GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, pc); for (i=0;i<pc->address_list_size;i++) { ar = &pc->address_list[i]; GNUNET_free_non_null (ar->result); if (NULL != ar->atsc) { GNUNET_TRANSPORT_address_to_string_cancel (ar->atsc); ar->atsc = NULL; } } GNUNET_free_non_null (pc->address_list); GNUNET_free (pc); } GPI_plugins_unload (); if (NULL != peerinfo) { GNUNET_PEERINFO_disconnect (peerinfo); peerinfo = NULL; } }
static void process (void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_HELLO_Message *hello, const char *err_msg) { unsigned int agc; if (err_msg != NULL) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Error in communication with PEERINFO service\n")); } if (peer == NULL) { ic = NULL; if ((3 == global_ret) && (retries < 50)) { /* try again */ retries++; add_peer (); ic = GNUNET_PEERINFO_iterate (h, GNUNET_NO, NULL, &process, cls); return; } GNUNET_assert (peer == NULL); GNUNET_assert (2 == global_ret); GNUNET_PEERINFO_disconnect (h); h = NULL; global_ret = 0; return; } if (hello != NULL) { GNUNET_assert (3 == global_ret); agc = 3; GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, &check_it, &agc); GNUNET_assert (agc == 0); global_ret = 2; } }
static void end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { timeout_task = NULL; GNUNET_break(0); if (NULL != pnc_wo_fo) { GNUNET_PEERINFO_notify_cancel (pnc_wo_fo); pnc_wo_fo = NULL; } if (NULL != pnc_w_fo) { GNUNET_PEERINFO_notify_cancel (pnc_w_fo); pnc_w_fo = NULL; } if (NULL != h) { GNUNET_PEERINFO_disconnect (h); h = NULL; } global_ret = 255; }
static void done (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { if (NULL != pnc_w_fo) GNUNET_PEERINFO_notify_cancel (pnc_w_fo); pnc_w_fo = NULL; if (NULL != pnc_wo_fo) GNUNET_PEERINFO_notify_cancel (pnc_wo_fo); pnc_wo_fo = NULL; GNUNET_PEERINFO_disconnect (h); h = NULL; if (NULL != timeout_task) { GNUNET_SCHEDULER_cancel (timeout_task); timeout_task = NULL; } if ((GNUNET_YES == res_cb_w_fo) && (GNUNET_NO == res_cb_wo_fo)) global_ret = 0; else GNUNET_break(0); }
/** * Function called when the service shuts down. Unloads our plugins * and cancels pending validations. * * @param cls closure, unused * @param tc task context (unused) */ static void shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GST_neighbours_stop (); GST_plugins_unload (); GST_validation_stop (); GST_ats_done (); GNUNET_ATS_scheduling_done (GST_ats); GST_ats = NULL; GNUNET_ATS_connectivity_done (GST_ats_connect); GST_ats_connect = NULL; GNUNET_ATS_scanner_done (GST_is); GST_is = NULL; GST_clients_stop (); GST_blacklist_stop (); GST_hello_stop (); GST_manipulation_stop (); if (NULL != GST_peerinfo) { GNUNET_PEERINFO_disconnect (GST_peerinfo); GST_peerinfo = NULL; } if (NULL != GST_stats) { GNUNET_STATISTICS_destroy (GST_stats, GNUNET_NO); GST_stats = NULL; } if (NULL != GST_my_private_key) { GNUNET_free(GST_my_private_key); GST_my_private_key = NULL; } GST_server = NULL; }
/** * Stop server offering our hostlist. */ void GNUNET_HOSTLIST_server_stop () { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hostlist server shutdown\n"); if (NULL != hostlist_task_v6) { GNUNET_SCHEDULER_cancel (hostlist_task_v6); hostlist_task_v6 = NULL; } if (NULL != hostlist_task_v4) { GNUNET_SCHEDULER_cancel (hostlist_task_v4); hostlist_task_v4 = NULL; } if (NULL != daemon_handle_v4) { MHD_stop_daemon (daemon_handle_v4); daemon_handle_v4 = NULL; } if (NULL != daemon_handle_v6) { MHD_stop_daemon (daemon_handle_v6); daemon_handle_v6 = NULL; } if (NULL != response) { MHD_destroy_response (response); response = NULL; } if (NULL != notify) { GNUNET_PEERINFO_notify_cancel (notify); notify = NULL; } if (NULL != builder) { if (NULL != builder->pitr) { GNUNET_PEERINFO_iterate_cancel (builder->pitr); builder->pitr = NULL; } GNUNET_free_non_null (builder->data); GNUNET_free (builder); builder = NULL; } if (NULL != peerinfo) { GNUNET_PEERINFO_disconnect (peerinfo); peerinfo = NULL; } if (NULL != advertisements) { GNUNET_break (0 == GNUNET_CONTAINER_multipeermap_size (advertisements)); GNUNET_CONTAINER_multipeermap_destroy (advertisements); advertisements = NULL; } cfg = NULL; stats = NULL; core = NULL; }