diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-10-28 09:03:31 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-10-28 09:03:31 +0000 |
commit | 284cfa1a5085cc8bcbead3a68d381ae30e055c92 (patch) | |
tree | 7a7319e9396fd7c1a9389f4df87b93e3e5ec0f3c | |
parent | a00687f5ec5816fc5ec8bcca25e4e49733b331d7 (diff) | |
download | gnunet-284cfa1a5085cc8bcbead3a68d381ae30e055c92.tar.gz gnunet-284cfa1a5085cc8bcbead3a68d381ae30e055c92.zip |
keep alive task scheduling
-rw-r--r-- | src/transport/gnunet-service-transport_neighbours_3way.c | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/src/transport/gnunet-service-transport_neighbours_3way.c b/src/transport/gnunet-service-transport_neighbours_3way.c index 9828ec773..b09812f61 100644 --- a/src/transport/gnunet-service-transport_neighbours_3way.c +++ b/src/transport/gnunet-service-transport_neighbours_3way.c | |||
@@ -1784,6 +1784,7 @@ GST_neighbours_handle_connect_ack (const struct GNUNET_MessageHeader *message, | |||
1784 | struct NeighbourMapEntry *n; | 1784 | struct NeighbourMapEntry *n; |
1785 | size_t msg_len; | 1785 | size_t msg_len; |
1786 | size_t ret; | 1786 | size_t ret; |
1787 | int was_connected; | ||
1787 | 1788 | ||
1788 | #if DEBUG_TRANSPORT | 1789 | #if DEBUG_TRANSPORT |
1789 | #endif | 1790 | #endif |
@@ -1823,7 +1824,9 @@ GST_neighbours_handle_connect_ack (const struct GNUNET_MessageHeader *message, | |||
1823 | plugin_name, sender_address, sender_address_len, | 1824 | plugin_name, sender_address, sender_address_len, |
1824 | session, ats, ats_count); | 1825 | session, ats, ats_count); |
1825 | 1826 | ||
1826 | change_state (n, S_CONNECTED); | 1827 | was_connected = is_connected(n); |
1828 | if (!is_connected(n)) | ||
1829 | change_state (n, S_CONNECTED); | ||
1827 | 1830 | ||
1828 | #if DEBUG_TRANSPORT | 1831 | #if DEBUG_TRANSPORT |
1829 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1832 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -1832,9 +1835,6 @@ GST_neighbours_handle_connect_ack (const struct GNUNET_MessageHeader *message, | |||
1832 | #endif | 1835 | #endif |
1833 | GST_neighbours_set_incoming_quota(&n->id, n->bandwidth_in); | 1836 | GST_neighbours_set_incoming_quota(&n->id, n->bandwidth_in); |
1834 | 1837 | ||
1835 | n->keepalive_task = GNUNET_SCHEDULER_add_delayed (KEEPALIVE_FREQUENCY, | ||
1836 | &neighbour_keepalive_task, | ||
1837 | n); | ||
1838 | /* send ACK (ACK)*/ | 1838 | /* send ACK (ACK)*/ |
1839 | msg_len = sizeof (msg); | 1839 | msg_len = sizeof (msg); |
1840 | msg.size = htons (msg_len); | 1840 | msg.size = htons (msg_len); |
@@ -1854,21 +1854,30 @@ GST_neighbours_handle_connect_ack (const struct GNUNET_MessageHeader *message, | |||
1854 | n->addrlen), | 1854 | n->addrlen), |
1855 | n->session); | 1855 | n->session); |
1856 | 1856 | ||
1857 | neighbours_connected++; | 1857 | |
1858 | GNUNET_STATISTICS_update (GST_stats, gettext_noop ("# peers connected"), 1, | 1858 | if (!was_connected) |
1859 | GNUNET_NO); | 1859 | { |
1860 | connect_notify_cb (callback_cls, &n->id, ats, ats_count); | 1860 | if (n->keepalive_task == GNUNET_SCHEDULER_NO_TASK) |
1861 | n->keepalive_task = GNUNET_SCHEDULER_add_delayed (KEEPALIVE_FREQUENCY, | ||
1862 | &neighbour_keepalive_task, | ||
1863 | n); | ||
1864 | |||
1865 | neighbours_connected++; | ||
1866 | GNUNET_STATISTICS_update (GST_stats, gettext_noop ("# peers connected"), 1, | ||
1867 | GNUNET_NO); | ||
1868 | connect_notify_cb (callback_cls, &n->id, ats, ats_count); | ||
1861 | 1869 | ||
1862 | #if DEBUG_TRANSPORT | 1870 | #if DEBUG_TRANSPORT |
1863 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1871 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1864 | "Sending outbound quota of %u Bps for peer `%s' to all clients\n", | 1872 | "Sending outbound quota of %u Bps for peer `%s' to all clients\n", |
1865 | ntohl (n->bandwidth_out.value__), GNUNET_i2s (peer)); | 1873 | ntohl (n->bandwidth_out.value__), GNUNET_i2s (peer)); |
1866 | #endif | 1874 | #endif |
1867 | q_msg.header.size = htons (sizeof (struct QuotaSetMessage)); | 1875 | q_msg.header.size = htons (sizeof (struct QuotaSetMessage)); |
1868 | q_msg.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_SET_QUOTA); | 1876 | q_msg.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_SET_QUOTA); |
1869 | q_msg.quota = n->bandwidth_out; | 1877 | q_msg.quota = n->bandwidth_out; |
1870 | q_msg.peer = (*peer); | 1878 | q_msg.peer = (*peer); |
1871 | GST_clients_broadcast (&q_msg.header, GNUNET_NO); | 1879 | GST_clients_broadcast (&q_msg.header, GNUNET_NO); |
1880 | } | ||
1872 | } | 1881 | } |
1873 | 1882 | ||
1874 | void | 1883 | void |
@@ -1929,7 +1938,8 @@ GST_neighbours_handle_ack (const struct GNUNET_MessageHeader *message, | |||
1929 | 1938 | ||
1930 | GST_neighbours_set_incoming_quota(&n->id, n->bandwidth_in); | 1939 | GST_neighbours_set_incoming_quota(&n->id, n->bandwidth_in); |
1931 | 1940 | ||
1932 | n->keepalive_task = GNUNET_SCHEDULER_add_delayed (KEEPALIVE_FREQUENCY, | 1941 | if (n->keepalive_task == GNUNET_SCHEDULER_NO_TASK) |
1942 | n->keepalive_task = GNUNET_SCHEDULER_add_delayed (KEEPALIVE_FREQUENCY, | ||
1933 | &neighbour_keepalive_task, | 1943 | &neighbour_keepalive_task, |
1934 | n); | 1944 | n); |
1935 | 1945 | ||