aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/gnunet-core-list-connections.c140
1 files changed, 16 insertions, 124 deletions
diff --git a/src/core/gnunet-core-list-connections.c b/src/core/gnunet-core-list-connections.c
index fcd076564..4fe0a4f86 100644
--- a/src/core/gnunet-core-list-connections.c
+++ b/src/core/gnunet-core-list-connections.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 (C) 2011 Christian Grothoff (and other contributing authors) 3 (C) 2011, 2012 Christian Grothoff (and other contributing authors)
4 4
5 GNUnet is free software; you can redistribute it and/or modify 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 6 it under the terms of the GNU General Public License as published
@@ -19,7 +19,7 @@
19*/ 19*/
20 20
21/** 21/**
22 * @file core/gnunet-core-list-connections.c 22 * @file core/gnunet-core.c
23 * @brief Print information about other known _connected_ peers. 23 * @brief Print information about other known _connected_ peers.
24 * @author Nathan Evans 24 * @author Nathan Evans
25 */ 25 */
@@ -32,127 +32,26 @@
32#include "gnunet_core_service.h" 32#include "gnunet_core_service.h"
33#include "gnunet_program_lib.h" 33#include "gnunet_program_lib.h"
34 34
35#define VERBOSE 0
36static int no_resolve;
37
38#if VERBOSE
39static unsigned int peer_count;
40#endif
41
42static const struct GNUNET_CONFIGURATION_Handle *cfg;
43
44struct AddressStringList
45{
46 /**
47 * Pointer to previous element.
48 */
49 struct AddressStringList *prev;
50
51 /**
52 * Pointer to next element.
53 */
54 struct AddressStringList *next;
55
56 /**
57 * Address as string.
58 */
59 char *address_string;
60};
61
62struct PrintContext
63{
64 struct GNUNET_PeerIdentity peer;
65 struct AddressStringList *address_list_head;
66 struct AddressStringList *address_list_tail;
67};
68
69
70static void
71dump_pc (struct PrintContext *pc)
72{
73 struct GNUNET_CRYPTO_HashAsciiEncoded enc;
74 struct AddressStringList *address;
75
76 GNUNET_CRYPTO_hash_to_enc (&pc->peer.hashPubKey, &enc);
77 printf (_("Peer `%s'\n"), (const char *) &enc);
78 while (NULL != (address = pc->address_list_head))
79 {
80 printf ("\t%s\n", address->address_string);
81 GNUNET_free (address->address_string);
82 GNUNET_CONTAINER_DLL_remove (pc->address_list_head, pc->address_list_tail,
83 address);
84 GNUNET_free (address);
85 }
86
87 printf ("\n");
88
89 GNUNET_free (pc);
90}
91
92
93/**
94 * Function to call with a human-readable format of an address
95 *
96 * @param cls closure
97 * @param peer peer this update is about
98 * @param address NULL on error, otherwise 0-terminated printable UTF-8 string
99 */
100static void
101process_resolved_address (void *cls, const struct GNUNET_PeerIdentity *peer,
102 const struct GNUNET_HELLO_Address *address)
103{
104 struct PrintContext *pc = cls;
105
106// struct AddressStringList *new_address;
107
108 if (address == NULL)
109 {
110 dump_pc (pc);
111 return;
112 }
113
114 /* This does exactly the same as gnunet-transport -i ! */
115 /*
116 * new_address = GNUNET_malloc (sizeof (struct AddressStringList));
117 * #if VERBOSE
118 * FPRINTF (stderr, "Received address %s\n", address);
119 * #endif
120 *
121 * new_address->address_string = GNUNET_strdup ("FIXME");
122 * GNUNET_CONTAINER_DLL_insert (pc->address_list_head, pc->address_list_tail,
123 * new_address);
124 */
125}
126
127 35
128/** 36/**
129 * Callback for retrieving a list of connected peers. 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'
130 */ 43 */
131static void 44static void
132connected_peer_callback (void *cls, const struct GNUNET_PeerIdentity *peer, 45connected_peer_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
133 const struct GNUNET_ATS_Information *atsi, 46 const struct GNUNET_ATS_Information *atsi,
134 unsigned int atsi_count) 47 unsigned int atsi_count)
135{ 48{
136 struct PrintContext *pc; 49 struct GNUNET_CRYPTO_HashAsciiEncoded enc;
137 50
138 if (peer != NULL) /* Not yet finished */ 51 if (NULL == peer)
139 { 52 return;
140#if VERBOSE 53 GNUNET_CRYPTO_hash_to_enc (&peer->hashPubKey, &enc);
141 FPRINTF (stderr, "Learned about peer %s\n", GNUNET_i2s (peer)); 54 printf (_("Peer `%s'\n"), (const char *) &enc);
142 peer_count++;
143#endif
144 pc = GNUNET_malloc (sizeof (struct PrintContext));
145 pc->peer = *peer;
146 GNUNET_TRANSPORT_peer_get_active_addresses (cfg, peer, GNUNET_YES,
147 GNUNET_TIME_UNIT_MINUTES,
148 &process_resolved_address, pc);
149 }
150#if VERBOSE
151 else
152 {
153 FPRINTF (stderr, "Counted %u total connected peers.\n", peer_count);
154 }
155#endif
156} 55}
157 56
158 57
@@ -162,22 +61,18 @@ connected_peer_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
162 * @param cls closure 61 * @param cls closure
163 * @param args remaining command-line arguments 62 * @param args remaining command-line arguments
164 * @param cfgfile name of the configuration file used (for saving, can be NULL!) 63 * @param cfgfile name of the configuration file used (for saving, can be NULL!)
165 * @param c configuration 64 * @param cfg configuration
166 */ 65 */
167static void 66static void
168run (void *cls, char *const *args, const char *cfgfile, 67run (void *cls, char *const *args, const char *cfgfile,
169 const struct GNUNET_CONFIGURATION_Handle *c) 68 const struct GNUNET_CONFIGURATION_Handle *cfg)
170{ 69{
171
172 cfg = c;
173 if (args[0] != NULL) 70 if (args[0] != NULL)
174 { 71 {
175 FPRINTF (stderr, _("Invalid command line argument `%s'\n"), args[0]); 72 FPRINTF (stderr, _("Invalid command line argument `%s'\n"), args[0]);
176 return; 73 return;
177 } 74 }
178
179 GNUNET_CORE_iterate_peers (cfg, &connected_peer_callback, NULL); 75 GNUNET_CORE_iterate_peers (cfg, &connected_peer_callback, NULL);
180
181} 76}
182 77
183 78
@@ -192,16 +87,13 @@ int
192main (int argc, char *const *argv) 87main (int argc, char *const *argv)
193{ 88{
194 static const struct GNUNET_GETOPT_CommandLineOption options[] = { 89 static const struct GNUNET_GETOPT_CommandLineOption options[] = {
195 {'n', "numeric", NULL,
196 gettext_noop ("don't resolve host names"),
197 0, &GNUNET_GETOPT_set_one, &no_resolve},
198 GNUNET_GETOPT_OPTION_END 90 GNUNET_GETOPT_OPTION_END
199 }; 91 };
200 return (GNUNET_OK == 92 return (GNUNET_OK ==
201 GNUNET_PROGRAM_run (argc, argv, "gnunet-list-connections", 93 GNUNET_PROGRAM_run (argc, argv, "gnunet-core",
202 gettext_noop 94 gettext_noop
203 ("Print information about connected peers."), 95 ("Print information about connected peers."),
204 options, &run, NULL)) ? 0 : 1; 96 options, &run, NULL)) ? 0 : 1;
205} 97}
206 98
207/* end of gnunet-core-list-connections.c */ 99/* end of gnunet-core.c */