X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fintegration-tests%2Fconnection_watchdog.c;h=456782ddd2ff115a12479adcfbd5fbc86a3de292;hb=9f81c1a85bb5485bdd2b4dd5a95fc02d2f6deeb4;hp=7ee858cfa0d8c671373c0970079a080a0d0458f0;hpb=f29d8a789665fc11cf0bba8dfd90546dc0e5f737;p=oweals%2Fgnunet.git diff --git a/src/integration-tests/connection_watchdog.c b/src/integration-tests/connection_watchdog.c index 7ee858cfa..456782ddd 100644 --- a/src/integration-tests/connection_watchdog.c +++ b/src/integration-tests/connection_watchdog.c @@ -35,8 +35,8 @@ #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 @@ -119,9 +119,10 @@ struct TransportPlugin 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; @@ -139,12 +140,13 @@ int map_check_it (void *cls, } -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); @@ -228,8 +230,8 @@ check_lowlevel_connections (int port, int protocol) 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) @@ -268,7 +270,7 @@ find_plugin (char * name) { 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; @@ -276,9 +278,10 @@ find_plugin (char * name) 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; @@ -397,7 +400,8 @@ struct PONG 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; @@ -447,28 +451,30 @@ return mlen; 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; } @@ -493,7 +499,7 @@ stats_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 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) @@ -526,7 +532,8 @@ size_t send_transport_pong_cb (void *cls, size_t size, void *buf) 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; @@ -565,15 +572,20 @@ map_connect (const struct GNUNET_PeerIdentity *peer, void * source) } pc = GNUNET_CONTAINER_multihashmap_get(peers, &peer->hashPubKey); + GNUNET_assert (NULL != pc); + if (source == th) { if (GNUNET_NO == pc->transport_connected) { pc->transport_connected = GNUNET_YES; - if ((GNUNET_YES == ping) && (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); - else - GNUNET_break(0); + 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_UNIT_FOREVER_REL, &send_transport_ping_cb, pc); + else + GNUNET_break(0); + } } else { @@ -590,15 +602,18 @@ map_connect (const struct GNUNET_PeerIdentity *peer, void * source) if (GNUNET_NO == pc->core_connected) { pc->core_connected = GNUNET_YES; - if ((GNUNET_YES == ping) && (NULL == pc->ch_ping)) - pc->ch_ping = GNUNET_CORE_notify_transmit_ready(ch, + if (GNUNET_YES == ping) + { + 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); - else - GNUNET_break (0); + else + GNUNET_break (0); + } } else { @@ -645,6 +660,8 @@ map_disconnect (const struct GNUNET_PeerIdentity * peer, void * source) } pc = GNUNET_CONTAINER_multihashmap_get(peers, &peer->hashPubKey); + GNUNET_assert (NULL != pc); + if (source == th) { if (NULL != pc->th_ping) @@ -761,7 +778,7 @@ cleanup_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) check_task = GNUNET_SCHEDULER_add_now (&map_check, &map_cleanup); } -void +static void transport_notify_connect_cb (void *cls, const struct GNUNET_PeerIdentity * peer, @@ -782,7 +799,7 @@ transport_notify_connect_cb (void *cls, * @param cls closure * @param peer the peer that disconnected */ -void +static void transport_notify_disconnect_cb (void *cls, const struct GNUNET_PeerIdentity * peer) @@ -824,13 +841,16 @@ transport_notify_receive_cb (void *cls, "TRANSPORT", "PING", GNUNET_i2s (peer)) ; - if ((GNUNET_YES == ping) && (NULL == pc->th_pong)) - pc->th_pong = GNUNET_TRANSPORT_notify_transmit_ready(th, + if (GNUNET_YES == ping) + { + 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); + else + GNUNET_break (0); + } } if ((message->size == ntohs (sizeof (struct PONG))) && (message->type == ntohs (4321))) @@ -842,11 +862,12 @@ transport_notify_receive_cb (void *cls, } } -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; @@ -854,6 +875,13 @@ int core_notify_receive_cb (void *cls, 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; } @@ -864,15 +892,18 @@ int core_notify_receive_cb (void *cls, "CORE", "PING", GNUNET_i2s (peer)); - if ((GNUNET_YES == ping) && (NULL == pc->ch_pong)) - pc->ch_pong = GNUNET_CORE_notify_transmit_ready(ch, + if (GNUNET_YES == ping) + { + 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); - else - GNUNET_break (0); + else + GNUNET_break (0); + } } if ((message->size == ntohs (sizeof (struct PONG))) && (message->type == ntohs (4321))) @@ -913,7 +944,7 @@ core_disconnect_cb (void *cls, { 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); @@ -944,7 +975,7 @@ init () char *pos; char *secname; int counter; - long long unsigned int port; + unsigned long long port; have_tcp = GNUNET_NO; have_udp = GNUNET_NO; @@ -969,7 +1000,7 @@ init () 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)) { @@ -1033,7 +1064,7 @@ run (void *cls, char *const *args, const char *cfgfile, &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, @@ -1063,6 +1094,10 @@ main (int argc, char *const *argv) GNUNET_NO, &GNUNET_GETOPT_set_one, &ping}, GNUNET_GETOPT_OPTION_END }; + + if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) + return 2; + return (GNUNET_OK == GNUNET_PROGRAM_run (argc, argv, "cn", gettext_noop ("help text"), options, &run,