-fix logging, revert to break instead of assert
[oweals/gnunet.git] / src / core / gnunet-core.c
1 /*
2      This file is part of GNUnet.
3      (C) 2011, 2012 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * @file core/gnunet-core.c
23  * @brief Print information about other known _connected_ peers.
24  * @author Nathan Evans
25  */
26 #include "platform.h"
27 #include "gnunet_crypto_lib.h"
28 #include "gnunet_configuration_lib.h"
29 #include "gnunet_getopt_lib.h"
30 #include "gnunet_peerinfo_service.h"
31 #include "gnunet_transport_service.h"
32 #include "gnunet_core_service.h"
33 #include "gnunet_program_lib.h"
34
35
36 /**
37  * Callback for retrieving a list of connected peers.
38  *
39  * @param cls closure (unused)
40  * @param peer peer identity this notification is about
41  * @param atsi performance data for the connection
42  * @param atsi_count number of records in 'atsi'
43  */
44 static void
45 connected_peer_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
46                          const struct GNUNET_ATS_Information *atsi,
47                          unsigned int atsi_count)
48 {
49   struct GNUNET_CRYPTO_HashAsciiEncoded enc;
50
51   if (NULL == peer)
52     return;
53   GNUNET_CRYPTO_hash_to_enc (&peer->hashPubKey, &enc);
54   printf (_("Peer `%s'\n"), (const char *) &enc);
55 }
56
57
58 /**
59  * Main function that will be run by the scheduler.
60  *
61  * @param cls closure
62  * @param args remaining command-line arguments
63  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
64  * @param cfg configuration
65  */
66 static void
67 run (void *cls, char *const *args, const char *cfgfile,
68      const struct GNUNET_CONFIGURATION_Handle *cfg)
69 {
70   if (args[0] != NULL)
71   {
72     FPRINTF (stderr, _("Invalid command line argument `%s'\n"), args[0]);
73     return;
74   }
75   GNUNET_CORE_iterate_peers (cfg, &connected_peer_callback, NULL);
76 }
77
78
79 /**
80  * The main function to obtain peer information.
81  *
82  * @param argc number of arguments from the command line
83  * @param argv command line arguments
84  * @return 0 ok, 1 on error
85  */
86 int
87 main (int argc, char *const *argv)
88 {
89   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
90     GNUNET_GETOPT_OPTION_END
91   };
92   return (GNUNET_OK ==
93           GNUNET_PROGRAM_run (argc, argv, "gnunet-core",
94                               gettext_noop
95                               ("Print information about connected peers."),
96                               options, &run, NULL)) ? 0 : 1;
97 }
98
99 /* end of gnunet-core.c */