From: Christian Grothoff Date: Sat, 9 Jul 2011 06:18:00 +0000 (+0000) Subject: move X-Git-Tag: initial-import-from-subversion-38251~17924 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7c492f3807011ff6a20bcf6761695f1a2efd754d;p=oweals%2Fgnunet.git move --- diff --git a/src/core/Makefile.am b/src/core/Makefile.am index 93af6f039..4f9a20433 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -25,7 +25,8 @@ libgnunetcore_la_LDFLAGS = \ bin_PROGRAMS = \ - gnunet-service-core + gnunet-service-core \ + gnunet-core-list-connections gnunet_service_core_SOURCES = \ gnunet-service-core.c @@ -37,6 +38,16 @@ gnunet_service_core_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(GN_LIBINTL) + +gnunet_core_list_connections_SOURCES = \ + gnunet-core-list-connections.c +gnunet_core_list_connections_LDADD = \ + $(top_builddir)/src/core/libgnunetcore.la \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/util/libgnunetutil.la + + check_PROGRAMS = \ test_core_api_start_only \ test_core_api \ diff --git a/src/core/gnunet-core-list-connections.c b/src/core/gnunet-core-list-connections.c new file mode 100644 index 000000000..8b0f6773a --- /dev/null +++ b/src/core/gnunet-core-list-connections.c @@ -0,0 +1,206 @@ +/* + This file is part of GNUnet. + (C) 2011 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 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + 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. +*/ + +/** + * @file core/gnunet-core-list-connections.c + * @brief Print information about other known _connected_ peers. + * @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_core_service.h" +#include "gnunet_program_lib.h" + +#define VERBOSE 0 +static int no_resolve; + +#if VERBOSE + static unsigned int peer_count; +#endif + +static const struct GNUNET_CONFIGURATION_Handle *cfg; + +struct AddressStringList +{ + /** + * Pointer to previous element. + */ + struct AddressStringList *prev; + + /** + * Pointer to next element. + */ + struct AddressStringList *next; + + /** + * Address as string. + */ + char *address_string; +}; + +struct PrintContext +{ + struct GNUNET_PeerIdentity peer; + struct AddressStringList *address_list_head; + struct AddressStringList *address_list_tail; +}; + + +static void +dump_pc (struct PrintContext *pc) +{ + struct GNUNET_CRYPTO_HashAsciiEncoded enc; + struct AddressStringList *address; + + GNUNET_CRYPTO_hash_to_enc (&pc->peer.hashPubKey, &enc); + printf (_("Peer `%s'\n"), + (const char *) &enc); + while (NULL != (address = pc->address_list_head)) + { + printf ("\t%s\n", address->address_string); + GNUNET_free(address->address_string); + GNUNET_CONTAINER_DLL_remove(pc->address_list_head, pc->address_list_tail, address); + GNUNET_free(address); + } + + printf ("\n"); + + GNUNET_free (pc); +} + + +/** + * Function to call with a human-readable format of an address + * + * @param cls closure + * @param address NULL on error, otherwise 0-terminated printable UTF-8 string + */ +static void +process_resolved_address (void *cls, + const char *address) +{ + struct PrintContext *pc = cls; + struct AddressStringList *new_address; + + if (address == NULL) + { + dump_pc (pc); + return; + } + + new_address = GNUNET_malloc(sizeof(struct AddressStringList)); +#if VERBOSE + fprintf(stderr, "Received address %s\n", address); +#endif + new_address->address_string = GNUNET_strdup(address); + GNUNET_CONTAINER_DLL_insert(pc->address_list_head, pc->address_list_tail, new_address); +} + + +/** + * Callback for retrieving a list of connected peers. + */ +static void +connected_peer_callback (void *cls, const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_TRANSPORT_ATS_Information *atsi) +{ + struct PrintContext *pc; + + if (peer != NULL) /* Not yet finished */ + { +#if VERBOSE + fprintf(stderr, "Learned about peer %s\n", GNUNET_i2s(peer)); + peer_count++; +#endif + pc = GNUNET_malloc (sizeof (struct PrintContext)); + pc->peer = *peer; + GNUNET_TRANSPORT_peer_address_lookup (cfg, peer, + GNUNET_TIME_UNIT_MINUTES, + &process_resolved_address, pc); + } +#if VERBOSE + else + { + fprintf(stderr, "Counted %u total connected peers.\n", peer_count); + } +#endif +} + + +/** + * Main function that will be run by the scheduler. + * + * @param cls closure + * @param args remaining command-line arguments + * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param c configuration + */ +static void +run (void *cls, + char *const *args, + const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *c) +{ + + cfg = c; + if (args[0] != NULL) + { + fprintf (stderr, + _("Invalid command line argument `%s'\n"), + args[0]); + return; + } + + GNUNET_CORE_iterate_peers (cfg, + &connected_peer_callback, + NULL); + +} + + +/** + * The main function to obtain peer information. + * + * @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) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + {'n', "numeric", NULL, + gettext_noop ("don't resolve host names"), + 0, &GNUNET_GETOPT_set_one, &no_resolve}, + GNUNET_GETOPT_OPTION_END + }; + return (GNUNET_OK == + GNUNET_PROGRAM_run (argc, + argv, + "gnunet-list-connections", + gettext_noop ("Print information about connected peers."), + options, &run, NULL)) ? 0 : 1; +} + +/* end of gnunet-core-list-connections.c */ diff --git a/src/peerinfo-tool/Makefile.am b/src/peerinfo-tool/Makefile.am index a11c500df..8c5fd8fbb 100644 --- a/src/peerinfo-tool/Makefile.am +++ b/src/peerinfo-tool/Makefile.am @@ -10,16 +10,7 @@ if USE_COVERAGE endif bin_PROGRAMS = \ - gnunet-peerinfo \ - gnunet-list-connections - -gnunet_list_connections_SOURCES = \ - gnunet-list-connections.c -gnunet_list_connections_LDADD = \ - $(top_builddir)/src/core/libgnunetcore.la \ - $(top_builddir)/src/transport/libgnunettransport.la \ - $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/util/libgnunetutil.la + gnunet-peerinfo gnunet_peerinfo_SOURCES = \ gnunet-peerinfo.c diff --git a/src/peerinfo-tool/gnunet-list-connections.c b/src/peerinfo-tool/gnunet-list-connections.c deleted file mode 100644 index 9c9cf987b..000000000 --- a/src/peerinfo-tool/gnunet-list-connections.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - This file is part of GNUnet. - (C) 2001, 2002, 2003, 2004, 2006, 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 3, or (at your - option) any later version. - - GNUnet is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - 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. -*/ - -/** - * @file peerinfo-tool/gnunet-list-connections.c - * @brief Print information about other known _connected_ peers. - * @author Christian Grothoff - */ -#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_core_service.h" -#include "gnunet_program_lib.h" - -#define VERBOSE 0 -static int no_resolve; - -#if VERBOSE - static unsigned int peer_count; -#endif - -static const struct GNUNET_CONFIGURATION_Handle *cfg; - -struct AddressStringList -{ - /** - * Pointer to previous element. - */ - struct AddressStringList *prev; - - /** - * Pointer to next element. - */ - struct AddressStringList *next; - - /** - * Address as string. - */ - char *address_string; -}; - -struct PrintContext -{ - struct GNUNET_PeerIdentity peer; - struct AddressStringList *address_list_head; - struct AddressStringList *address_list_tail; -}; - - -static void -dump_pc (struct PrintContext *pc) -{ - struct GNUNET_CRYPTO_HashAsciiEncoded enc; - struct AddressStringList *address; - - GNUNET_CRYPTO_hash_to_enc (&pc->peer.hashPubKey, &enc); - printf (_("Peer `%s'\n"), - (const char *) &enc); - while (NULL != (address = pc->address_list_head)) - { - printf ("\t%s\n", address->address_string); - GNUNET_free(address->address_string); - GNUNET_CONTAINER_DLL_remove(pc->address_list_head, pc->address_list_tail, address); - GNUNET_free(address); - } - - printf ("\n"); - - GNUNET_free (pc); -} - - -/** - * Function to call with a human-readable format of an address - * - * @param cls closure - * @param address NULL on error, otherwise 0-terminated printable UTF-8 string - */ -static void -process_resolved_address (void *cls, - const char *address) -{ - struct PrintContext *pc = cls; - struct AddressStringList *new_address; - - if (address == NULL) - { - dump_pc (pc); - return; - } - - new_address = GNUNET_malloc(sizeof(struct AddressStringList)); -#if VERBOSE - fprintf(stderr, "Received address %s\n", address); -#endif - new_address->address_string = GNUNET_strdup(address); - GNUNET_CONTAINER_DLL_insert(pc->address_list_head, pc->address_list_tail, new_address); -} - - -/** - * Callback for retrieving a list of connected peers. - */ -static void -connected_peer_callback (void *cls, const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_TRANSPORT_ATS_Information *atsi) -{ - struct PrintContext *pc; - - if (peer != NULL) /* Not yet finished */ - { -#if VERBOSE - fprintf(stderr, "Learned about peer %s\n", GNUNET_i2s(peer)); - peer_count++; -#endif - pc = GNUNET_malloc (sizeof (struct PrintContext)); - pc->peer = *peer; - GNUNET_TRANSPORT_peer_address_lookup (cfg, peer, - GNUNET_TIME_UNIT_MINUTES, - &process_resolved_address, pc); - } -#if VERBOSE - else - { - fprintf(stderr, "Counted %u total connected peers.\n", peer_count); - } -#endif -} - - -/** - * Main function that will be run by the scheduler. - * - * @param cls closure - * @param args remaining command-line arguments - * @param cfgfile name of the configuration file used (for saving, can be NULL!) - * @param c configuration - */ -static void -run (void *cls, - char *const *args, - const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *c) -{ - - cfg = c; - if (args[0] != NULL) - { - fprintf (stderr, - _("Invalid command line argument `%s'\n"), - args[0]); - return; - } - - GNUNET_CORE_iterate_peers (cfg, - &connected_peer_callback, - NULL); - -} - - -/** - * The main function to obtain peer information. - * - * @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) -{ - static const struct GNUNET_GETOPT_CommandLineOption options[] = { - {'n', "numeric", NULL, - gettext_noop ("don't resolve host names"), - 0, &GNUNET_GETOPT_set_one, &no_resolve}, - GNUNET_GETOPT_OPTION_END - }; - return (GNUNET_OK == - GNUNET_PROGRAM_run (argc, - argv, - "gnunet-list-connections", - gettext_noop ("Print information about connected peers."), - options, &run, NULL)) ? 0 : 1; -} - -/* end of gnunet-peerinfo.c */