X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcore%2Fgnunet-core.c;h=d91dc304d5c1b88152b44f994e958f9d221f9fea;hb=4a99ca1c3eaa4587c9dfbb01790b306014347bce;hp=cfdae33bfa81321c9895b46c5bc54c7886843e89;hpb=6d5b099541c60303b664547f18f4aaa864e33d68;p=oweals%2Fgnunet.git diff --git a/src/core/gnunet-core.c b/src/core/gnunet-core.c index cfdae33bf..d91dc304d 100644 --- a/src/core/gnunet-core.c +++ b/src/core/gnunet-core.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2011, 2012 Christian Grothoff (and other contributing authors) + Copyright (C) 2011, 2012, 2014 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,23 +14,19 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** * @file core/gnunet-core.c - * @brief Print information about other known _connected_ peers. + * @brief Print information about other peers known to CORE. * @author Nathan Evans */ #include "platform.h" -#include "gnunet_crypto_lib.h" -#include "gnunet_configuration_lib.h" -#include "gnunet_getopt_lib.h" -#include "gnunet_peerinfo_service.h" -#include "gnunet_transport_service.h" +#include "gnunet_util_lib.h" #include "gnunet_core_service.h" -#include "gnunet_program_lib.h" + /** * Option -m. @@ -38,109 +34,95 @@ static int monitor_connections; /** - * Current number of connections in monitor mode + * Handle to the CORE monitor. */ -static int monitor_connections_counter; - -static struct GNUNET_CORE_Handle *ch; +static struct GNUNET_CORE_MonitorHandle *mh; -static struct GNUNET_PeerIdentity my_id; /** * Task run in monitor mode when the user presses CTRL-C to abort. * Stops monitoring activity. * - * @param cls the 'struct GNUNET_TRANSPORT_PeerIterateContext *' - * @param tc scheduler context + * @param cls NULL */ static void -shutdown_task (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +shutdown_task (void *cls) { - if (NULL != ch) + if (NULL != mh) { - GNUNET_CORE_disconnect (ch); - ch = NULL; + GNUNET_CORE_monitor_stop (mh); + mh = NULL; } } -/** - * Callback for retrieving a list of connected peers. - * - * @param cls closure (unused) - * @param peer peer identity this notification is about - */ -static void -connected_peer_callback (void *cls, - const struct GNUNET_PeerIdentity *peer) -{ - if (NULL == peer) - return; - printf (_("Peer `%s'\n"), - GNUNET_i2s_full (peer)); -} - - -static void -monitor_notify_startup (void *cls, - const struct GNUNET_PeerIdentity *my_identity) -{ - my_id = (*my_identity); -} - - /** * Function called to notify core users that another - * peer connected to us. + * peer changed its state with us. * * @param cls closure - * @param peer the peer that connected + * @param peer the peer that changed state + * @param state new state of the peer + * @param timeout timeout for the new state */ static void -monitor_notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer) +monitor_cb (void *cls, + const struct GNUNET_PeerIdentity *peer, + enum GNUNET_CORE_KxState state, + struct GNUNET_TIME_Absolute timeout) { struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get(); const char *now_str; + const char *state_str; - if (0 != memcmp (&my_id, peer, sizeof (my_id))) + if ( ( (NULL == peer) || + (GNUNET_CORE_KX_ITERATION_FINISHED == state) ) && + (GNUNET_NO == monitor_connections) ) { - monitor_connections_counter ++; - now_str = GNUNET_STRINGS_absolute_time_to_string (now); - FPRINTF (stdout, _("%24s: %-17s %4s (%u connections in total)\n"), - now_str, - _("Connected to"), - GNUNET_i2s (peer), - monitor_connections_counter); + GNUNET_SCHEDULER_shutdown (); + return; } -} - -/** - * Function called to notify core users that another - * peer disconnected from us. - * - * @param cls closure - * @param peer the peer that disconnected - */ -static void -monitor_notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) -{ - struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get(); - const char *now_str; - - if (0 != memcmp (&my_id, peer, sizeof (my_id))) + switch (state) { - now_str = GNUNET_STRINGS_absolute_time_to_string (now); - - GNUNET_assert (monitor_connections_counter > 0); - monitor_connections_counter--; - FPRINTF (stdout, _("%24s: %-17s %4s (%u connections in total)\n"), - now_str, - _("Disconnected from"), - GNUNET_i2s (peer), - monitor_connections_counter); + case GNUNET_CORE_KX_STATE_DOWN: + /* should never happen, as we immediately send the key */ + state_str = _("fresh connection"); + break; + case GNUNET_CORE_KX_STATE_KEY_SENT: + state_str = _("key sent"); + break; + case GNUNET_CORE_KX_STATE_KEY_RECEIVED: + state_str = _("key received"); + break; + case GNUNET_CORE_KX_STATE_UP: + state_str = _("connection established"); + break; + case GNUNET_CORE_KX_STATE_REKEY_SENT: + state_str = _("rekeying"); + break; + case GNUNET_CORE_KX_PEER_DISCONNECT: + state_str = _("disconnected"); + break; + case GNUNET_CORE_KX_ITERATION_FINISHED: + return; + case GNUNET_CORE_KX_CORE_DISCONNECT: + FPRINTF (stderr, + "%s\n", + _("Connection to CORE service lost (reconnecting)")); + return; + default: + state_str = _("unknown state"); + break; } + now_str = GNUNET_STRINGS_absolute_time_to_string (now); + FPRINTF (stdout, + _("%24s: %-30s %4s (timeout in %6s)\n"), + now_str, + state_str, + GNUNET_i2s (peer), + GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_remaining (timeout), + GNUNET_YES)); } @@ -156,44 +138,37 @@ static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { - static const struct GNUNET_CORE_MessageHandler handlers[] = { - {NULL, 0, 0} - }; - if (args[0] != NULL) + if (NULL != args[0]) { - FPRINTF (stderr, _("Invalid command line argument `%s'\n"), args[0]); + FPRINTF (stderr, + _("Invalid command line argument `%s'\n"), + args[0]); return; } - if (GNUNET_NO == monitor_connections) - GNUNET_CORE_iterate_peers (cfg, &connected_peer_callback, NULL); - else + mh = GNUNET_CORE_monitor_start (cfg, + &monitor_cb, + NULL); + if (NULL == mh) { - memset(&my_id, '\0', sizeof (my_id)); - ch = GNUNET_CORE_connect (cfg, NULL, - monitor_notify_startup, - monitor_notify_connect, - monitor_notify_disconnect, - NULL, GNUNET_NO, - NULL, GNUNET_NO, - handlers); - - if (NULL == ch) - GNUNET_SCHEDULER_add_now (shutdown_task, NULL); - else - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, shutdown_task, NULL); + FPRINTF (stderr, + "%s", + _("Failed to connect to CORE service!\n")); + return; } + GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); } /** - * The main function to obtain peer information. + * The main function to obtain peer information from CORE. * * @param argc number of arguments from the command line * @param argv command line arguments * @return 0 ok, 1 on error */ int -main (int argc, char *const *argv) +main (int argc, + char *const *argv) { int res; static const struct GNUNET_GETOPT_CommandLineOption options[] = { @@ -205,19 +180,15 @@ main (int argc, char *const *argv) if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) return 2; - - res = GNUNET_PROGRAM_run (argc, argv, "gnunet-core", - gettext_noop - ("Print information about connected peers."), - options, &run, NULL); + gettext_noop + ("Print information about connected peers."), + options, &run, NULL); GNUNET_free ((void *) argv); - if (GNUNET_OK == res) return 0; - else - return 1; + return 1; } /* end of gnunet-core.c */