#include "gnunet_statistics_service.h"
-#define CHECK_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5)
-#define STATS_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5)
+#define CHECK_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
+#define STATS_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
#define REPEATED_STATS_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
#define STATS_VALUES 4
struct TransportPlugin *phead;
struct TransportPlugin *ptail;
-int map_check_it (void *cls,
- const GNUNET_HashCode * key,
- void *value)
+static int
+map_check_it (void *cls,
+ const struct GNUNET_HashCode * key,
+ void *value)
{
int *fail = cls;
struct PeerContainer *pc = value;
}
-int map_cleanup_it (void *cls,
- const GNUNET_HashCode * key,
- void *value)
+static int
+map_cleanup_it (void *cls,
+ const struct GNUNET_HashCode * key,
+ void *value)
{
struct PeerContainer *pc = value;
- GNUNET_CONTAINER_multihashmap_remove(peers, key, value);
+ GNUNET_assert (GNUNET_OK == GNUNET_CONTAINER_multihashmap_remove(peers, key, value));
if (NULL != pc->th_ping)
{
GNUNET_TRANSPORT_notify_transmit_ready_cancel(pc->th_ping);
break;
}
-
- GNUNET_asprintf(&cmdline, "netstat -n %s | grep %u", proto, port);
+ /* Use netstat to get a numeric list of all connections on port 'port' in state 'ESTABLISHED' */
+ GNUNET_asprintf(&cmdline, "netstat -n %s | grep %u | grep ESTABLISHED", proto, port);
if (system ("netstat -n > /dev/null 2> /dev/null"))
if (system ("netstat -n > /dev/null 2> /dev/null") == 0)
{
struct TransportPlugin *cur = NULL;
- for (cur = phead; cur != NULL; cur = phead)
+ for (cur = phead; cur != NULL; cur = cur->next)
{
if (0 == strcmp(name, cur->short_name))
return cur;
return cur;
}
-int stats_check_cb (void *cls, const char *subsystem,
- const char *name, uint64_t value,
- int is_persistent)
+static int
+stats_check_cb (void *cls, const char *subsystem,
+ const char *name, uint64_t value,
+ int is_persistent)
{
static int counter;
GNUNET_NETWORK_STRUCT_END
-size_t send_transport_ping_cb (void *cls, size_t size, void *buf)
+static size_t
+send_transport_ping_cb (void *cls, size_t size, void *buf)
{
struct PeerContainer * pc = cls;
struct PING ping;
int map_ping_it (void *cls,
- const GNUNET_HashCode * key,
+ const struct GNUNET_HashCode * key,
void *value)
{
struct PeerContainer *pc = value;
- if ((GNUNET_YES == pc->transport_connected) && (NULL == pc->th_ping))
- pc->th_ping = GNUNET_TRANSPORT_notify_transmit_ready(th, &pc->id,
- sizeof (struct PING), UINT_MAX,
- GNUNET_TIME_relative_get_forever(), &send_transport_ping_cb, pc);
- else
- GNUNET_break(0);
-
- if ((GNUNET_YES == pc->core_connected) && (NULL == pc->ch_ping))
- pc->ch_ping = GNUNET_CORE_notify_transmit_ready(ch,
- GNUNET_NO, UINT_MAX,
- GNUNET_TIME_relative_get_forever(),
- &pc->id,
- sizeof (struct PING),
- send_core_ping_cb, pc);
- else
- GNUNET_break (0);
+ if (ping == GNUNET_YES)
+ {
+ if ((GNUNET_YES == pc->transport_connected) && (NULL == pc->th_ping))
+ pc->th_ping = GNUNET_TRANSPORT_notify_transmit_ready(th, &pc->id,
+ sizeof (struct PING), UINT_MAX,
+ GNUNET_TIME_UNIT_FOREVER_REL, &send_transport_ping_cb, pc);
+ else
+ GNUNET_break(0);
+ if ((GNUNET_YES == pc->core_connected) && (NULL == pc->ch_ping))
+ pc->ch_ping = GNUNET_CORE_notify_transmit_ready(ch,
+ GNUNET_NO, UINT_MAX,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ &pc->id,
+ sizeof (struct PING),
+ send_core_ping_cb, pc);
+ else
+ GNUNET_break (0);
+ }
return GNUNET_OK;
}
GNUNET_STATISTICS_get (stats, "transport", "# peers connected", GNUNET_TIME_UNIT_MINUTES, NULL, &stats_check_cb, &statistics_transport_connections);
GNUNET_STATISTICS_get (stats, "core", "# neighbour entries allocated", GNUNET_TIME_UNIT_MINUTES, NULL, &stats_check_cb, &statistics_core_neighbour_entries);
- GNUNET_STATISTICS_get (stats, "core", "# entries in session map", GNUNET_TIME_UNIT_MINUTES, NULL, &stats_check_cb, &statistics_core_entries_session_map);
+ GNUNET_STATISTICS_get (stats, "core", "# peers connected", GNUNET_TIME_UNIT_MINUTES, NULL, &stats_check_cb, &statistics_core_entries_session_map);
/* TCP plugin specific checks */
if (GNUNET_YES == have_tcp)
return mlen;
}
-size_t send_core_pong_cb (void *cls, size_t size, void *buf)
+static size_t
+send_core_pong_cb (void *cls, size_t size, void *buf)
{
struct PeerContainer * pc = cls;
struct PING ping;
}
pc = GNUNET_CONTAINER_multihashmap_get(peers, &peer->hashPubKey);
+ GNUNET_assert (NULL != pc);
+
if (source == th)
{
if (GNUNET_NO == pc->transport_connected)
if (GNUNET_YES == ping)
{
if (NULL == pc->th_ping)
- pc->th_ping = GNUNET_TRANSPORT_notify_transmit_ready(th, peer, sizeof (struct PING), UINT_MAX, GNUNET_TIME_relative_get_forever(), &send_transport_ping_cb, pc);
+ pc->th_ping = GNUNET_TRANSPORT_notify_transmit_ready(th, peer, sizeof (struct PING), UINT_MAX, GNUNET_TIME_UNIT_FOREVER_REL, &send_transport_ping_cb, pc);
else
GNUNET_break(0);
}
if (NULL == pc->ch_ping)
pc->ch_ping = GNUNET_CORE_notify_transmit_ready(ch,
GNUNET_NO, UINT_MAX,
- GNUNET_TIME_relative_get_forever(),
+ GNUNET_TIME_UNIT_FOREVER_REL,
peer,
sizeof (struct PING),
send_core_ping_cb, pc);
}
pc = GNUNET_CONTAINER_multihashmap_get(peers, &peer->hashPubKey);
+ GNUNET_assert (NULL != pc);
+
if (source == th)
{
if (NULL != pc->th_ping)
check_task = GNUNET_SCHEDULER_add_now (&map_check, &map_cleanup);
}
-void
+static void
transport_notify_connect_cb (void *cls,
const struct GNUNET_PeerIdentity
* peer,
* @param cls closure
* @param peer the peer that disconnected
*/
-void
+static void
transport_notify_disconnect_cb (void *cls,
const struct
GNUNET_PeerIdentity * peer)
if (NULL == pc->th_pong)
pc->th_pong = GNUNET_TRANSPORT_notify_transmit_ready(th,
peer, sizeof (struct PONG),
- UINT_MAX, GNUNET_TIME_relative_get_forever(),
+ UINT_MAX, GNUNET_TIME_UNIT_FOREVER_REL,
&send_transport_pong_cb, pc);
else
GNUNET_break (0);
}
}
-int core_notify_receive_cb (void *cls,
- const struct GNUNET_PeerIdentity * peer,
- const struct GNUNET_MessageHeader * message,
- const struct GNUNET_ATS_Information* atsi,
- unsigned int atsi_count)
+static int
+core_notify_receive_cb (void *cls,
+ const struct GNUNET_PeerIdentity * peer,
+ const struct GNUNET_MessageHeader * message,
+ const struct GNUNET_ATS_Information* atsi,
+ unsigned int atsi_count)
{
struct PeerContainer *pc = NULL;
if (NULL == pc)
{
+ if (0 == memcmp (peer, &my_peer_id, sizeof (my_peer_id)))
+ return GNUNET_OK;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Received unexpected message type %u from unknown peer `%s'\n",
+ ntohs (message->type),
+ GNUNET_i2s (peer));
+
GNUNET_break (0);
return GNUNET_OK;
}
if (NULL == pc->ch_pong)
pc->ch_pong = GNUNET_CORE_notify_transmit_ready(ch,
GNUNET_NO, UINT_MAX,
- GNUNET_TIME_relative_get_forever(),
+ GNUNET_TIME_UNIT_FOREVER_REL,
peer,
sizeof (struct PONG),
send_core_pong_cb, pc);
{
if (0 != memcmp (peer, &my_peer_id, sizeof (struct GNUNET_PeerIdentity)))
{
- GNUNET_assert (core_connections >= 0);
+ GNUNET_assert (core_connections > 0);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "CORE disconnect for peer `%s' (%u total)\n",
GNUNET_i2s (peer), core_connections);
map_disconnect (peer, ch);
char *pos;
char *secname;
int counter;
- long long unsigned int port;
+ unsigned long long port;
have_tcp = GNUNET_NO;
have_udp = GNUNET_NO;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Transport plugin: `%s' port %llu\n"), pos, port);
cur = GNUNET_malloc(sizeof (struct TransportPlugin));
- cur->short_name = strdup (pos);
+ cur->short_name = GNUNET_strdup (pos);
cur->port = port;
if (0 == strcmp("tcp", pos))
{
init();
stats = GNUNET_STATISTICS_create ("watchdog", cfg);
- peers = GNUNET_CONTAINER_multihashmap_create (20);
+ peers = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO);
th = GNUNET_TRANSPORT_connect(cfg, NULL, NULL,
&transport_notify_receive_cb,
&transport_notify_disconnect_cb);
GNUNET_assert (th != NULL);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connected to transport service\n");
- ch = GNUNET_CORE_connect (cfg, 1, NULL,
+ ch = GNUNET_CORE_connect (cfg, NULL,
&core_init_cb,
&core_connect_cb,
&core_disconnect_cb,
GNUNET_NO, &GNUNET_GETOPT_set_one, &ping},
GNUNET_GETOPT_OPTION_END
};
- return (GNUNET_OK ==
- GNUNET_PROGRAM_run (argc, argv, "cn",
- gettext_noop ("help text"), options, &run,
- NULL)) ? ret : 1;
+
+ if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
+ return 2;
+ ret = (GNUNET_OK ==
+ GNUNET_PROGRAM_run (argc, argv, "cn",
+ gettext_noop ("help text"), options, &run,
+ NULL)) ? ret : 1;
+ GNUNET_free ((void*) argv);
+ return ret;
}
/* end of connection_watchdog.c */