From b08879fa56e3c3979466650ae07c55ac8873fb28 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 12 Feb 2015 14:25:33 +0000 Subject: reset blocking time for addresses upon successful connection --- src/transport/gnunet-service-transport_ats.c | 26 ++++++++++++++++++++++ src/transport/gnunet-service-transport_ats.h | 14 ++++++++++-- .../gnunet-service-transport_neighbours.c | 9 +++----- 3 files changed, 41 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/transport/gnunet-service-transport_ats.c b/src/transport/gnunet-service-transport_ats.c index d204a8950..5301090ff 100644 --- a/src/transport/gnunet-service-transport_ats.c +++ b/src/transport/gnunet-service-transport_ats.c @@ -344,6 +344,32 @@ GST_ats_block_address (const struct GNUNET_HELLO_Address *address, } +/** + * Reset address blocking time. Resets the exponential + * back-off timer for this address to zero. Done when + * an address was used to create a successful connection. + * + * @param address the address to reset the blocking timer + * @param session the session (can be NULL) + */ +void +GST_ats_block_reset (const struct GNUNET_HELLO_Address *address, + struct Session *session) +{ + struct AddressInfo *ai; + + ai = find_ai (address, session); + if (NULL == ai) + { + GNUNET_break (0); + return; + } + /* address is in successful use, so it should not be blocked right now */ + GNUNET_break (NULL == ai->unblock_task); + ai->back_off = GNUNET_TIME_UNIT_ZERO; +} + + /** * Notify ATS about the a new inbound address. We may already * know the address (as this is called each time we receive diff --git a/src/transport/gnunet-service-transport_ats.h b/src/transport/gnunet-service-transport_ats.h index 780e66f60..bee38d0cd 100644 --- a/src/transport/gnunet-service-transport_ats.h +++ b/src/transport/gnunet-service-transport_ats.h @@ -67,8 +67,18 @@ GST_ats_block_address (const struct GNUNET_HELLO_Address *address, struct Session *session); -/* FIXME: might want to add a function to reset the - back-off from blocking */ +/** + * Reset address blocking time. Resets the exponential + * back-off timer for this address to zero. Done when + * an address was used to create a successful connection. + * + * @param address the address to reset the blocking timer + * @param session the session (can be NULL) + */ +void +GST_ats_block_reset (const struct GNUNET_HELLO_Address *address, + struct Session *session); + /** * Notify ATS about the a new inbound address. We may already diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index 623712efa..729de12d3 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -3467,12 +3467,9 @@ GST_neighbours_handle_session_ack (const struct GNUNET_MessageHeader *message, GNUNET_TRANSPORT_PS_CONNECTED, GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT)); - /* Set primary address to used */ - set_primary_address (n, - n->primary_address.address, - n->primary_address.session, - n->primary_address.bandwidth_in, - n->primary_address.bandwidth_out); + /* Reset backoff for primary address */ + GST_ats_block_reset (n->primary_address.address, + n->primary_address.session); return GNUNET_OK; } -- cgit v1.2.3