From 2128c61720c9019302a1add71796c69d2ee36fc4 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 18 Oct 2015 12:49:23 +0000 Subject: [PATCH] add 'strength' argument to address suggestion request for ATS --- src/ats/ats.h | 8 ++++---- src/ats/ats_api_connectivity.c | 17 +++++++++++++---- src/ats/ats_api_scheduling.c | 1 - src/ats/gnunet-service-ats_connectivity.c | 13 +++++++------ src/include/gnunet_ats_service.h | 5 +++-- .../gnunet-service-transport_neighbours.c | 3 ++- 6 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/ats/ats.h b/src/ats/ats.h index 3a7f28a64..5c1e806b6 100644 --- a/src/ats/ats.h +++ b/src/ats/ats.h @@ -82,7 +82,7 @@ struct ClientStartMessage /** - * Scheduling client to ATS service: we would like to have + * Connectivity client to ATS service: we would like to have * address suggestions for this peer. */ struct RequestAddressMessage @@ -95,9 +95,9 @@ struct RequestAddressMessage struct GNUNET_MessageHeader header; /** - * Always zero. + * How "strong" is our need for an address for this peer? */ - uint32_t reserved GNUNET_PACKED; + uint32_t strength GNUNET_PACKED; /** * Peer to get address suggestions for. @@ -107,7 +107,7 @@ struct RequestAddressMessage /** - * ATS client to ATS service: here is another address you can use. + * Scheduling client to ATS service: here is another address you can use. */ struct AddressAddMessage { diff --git a/src/ats/ats_api_connectivity.c b/src/ats/ats_api_connectivity.c index 4099cadbd..1012e9cee 100644 --- a/src/ats/ats_api_connectivity.c +++ b/src/ats/ats_api_connectivity.c @@ -45,6 +45,11 @@ struct GNUNET_ATS_ConnectivitySuggestHandle * Connecitivity handle this suggestion handle belongs to. */ struct GNUNET_ATS_ConnectivityHandle *ch; + + /** + * How urgent is the request. + */ + uint32_t strength; }; @@ -174,13 +179,14 @@ transmit_suggestion (void *cls, void *value) { struct GNUNET_ATS_ConnectivityHandle *ch = cls; + struct GNUNET_ATS_ConnectivitySuggestHandle *sh = value; struct GNUNET_MQ_Envelope *ev; struct RequestAddressMessage *m; if (NULL == ch->mq) return GNUNET_SYSERR; ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS); - m->reserved = htonl (0); + m->strength = htonl (sh->strength); m->peer = *peer; GNUNET_MQ_send (ch->mq, ev); return GNUNET_OK; @@ -244,7 +250,7 @@ GNUNET_ATS_connectivity_init (const struct GNUNET_CONFIGURATION_Handle *cfg) /** - * Function called to free all `struct GNUNET_ATS_SuggestHandles` + * Function called to free all `struct GNUNET_ATS_ConnectivitySuggestHandle`s * in the map. * * @param cls NULL @@ -303,11 +309,13 @@ GNUNET_ATS_connectivity_done (struct GNUNET_ATS_ConnectivityHandle *ch) * * @param ch handle * @param peer identity of the peer we need an address for + * @param strength how urgent is the need for such a suggestion * @return suggest handle, NULL if a request is already pending */ struct GNUNET_ATS_ConnectivitySuggestHandle * GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch, - const struct GNUNET_PeerIdentity *peer) + const struct GNUNET_PeerIdentity *peer, + uint32_t strength) { struct GNUNET_ATS_ConnectivitySuggestHandle *s; @@ -317,6 +325,7 @@ GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch, s = GNUNET_new (struct GNUNET_ATS_ConnectivitySuggestHandle); s->ch = ch; s->id = *peer; + s->strength = strength; if (GNUNET_OK != GNUNET_CONTAINER_multipeermap_put (ch->sug_requests, &s->id, @@ -360,7 +369,7 @@ GNUNET_ATS_connectivity_suggest_cancel (struct GNUNET_ATS_ConnectivitySuggestHan return; } ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL); - m->reserved = htonl (0); + m->strength = htonl (0); m->peer = sh->id; GNUNET_MQ_send (ch->mq, ev); GNUNET_free (sh); diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c index d7a5a83a1..ab8a8711d 100644 --- a/src/ats/ats_api_scheduling.c +++ b/src/ats/ats_api_scheduling.c @@ -247,7 +247,6 @@ find_session (struct GNUNET_ATS_SchedulingHandle *sh, sizeof (struct GNUNET_PeerIdentity))) { GNUNET_break (0); - force_reconnect (sh); return NULL; } return ar; diff --git a/src/ats/gnunet-service-ats_connectivity.c b/src/ats/gnunet-service-ats_connectivity.c index 8c103a33c..7bde6e354 100644 --- a/src/ats/gnunet-service-ats_connectivity.c +++ b/src/ats/gnunet-service-ats_connectivity.c @@ -73,7 +73,7 @@ GAS_connectivity_has_peer (void *cls, /** - * Handle 'request address' messages from clients. + * Handle #GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS messages from clients. * * @param cls unused, NULL * @param client client that sent the request @@ -90,8 +90,8 @@ GAS_handle_request_address (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n", - "REQUEST_ADDRESS"); - GNUNET_break (0 == ntohl (msg->reserved)); + "GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS"); + /* FIXME: should not ignore "msg->strength" */ cr = GNUNET_new (struct ConnectionRequest); cr->client = client; (void) GNUNET_CONTAINER_multipeermap_put (connection_requests, @@ -137,7 +137,8 @@ free_matching_requests (void *cls, /** - * Handle 'request address cancel' messages from clients. + * Handle #GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL messages + * from clients. * * @param cls unused, NULL * @param client client that sent the request @@ -152,9 +153,9 @@ GAS_handle_request_address_cancel (void *cls, (const struct RequestAddressMessage *) message; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Received REQUEST_ADDRESS_CANCEL message for peer %s\n", + "Received GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL message for peer %s\n", GNUNET_i2s (&msg->peer)); - GNUNET_break (0 == ntohl (msg->reserved)); + GNUNET_break (0 == ntohl (msg->strength)); GNUNET_CONTAINER_multipeermap_get_multiple (connection_requests, &msg->peer, &free_matching_requests, diff --git a/src/include/gnunet_ats_service.h b/src/include/gnunet_ats_service.h index 4264f22a4..32e98abd6 100644 --- a/src/include/gnunet_ats_service.h +++ b/src/include/gnunet_ats_service.h @@ -302,12 +302,13 @@ GNUNET_ATS_connectivity_done (struct GNUNET_ATS_ConnectivityHandle *ch); * * @param ch handle * @param peer identity of the peer we need an address for - * TODO: add argument to allow client to express 'strength's of request + * @param strength how urgent is the need for such a suggestion * @return suggestion handle, NULL if request is already pending */ struct GNUNET_ATS_ConnectivitySuggestHandle * GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch, - const struct GNUNET_PeerIdentity *peer); + const struct GNUNET_PeerIdentity *peer, + uint32_t strength); /** diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index d41fa6582..07af225c1 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -2213,7 +2213,8 @@ setup_neighbour (const struct GNUNET_PeerIdentity *peer) n, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); n->suggest_handle = GNUNET_ATS_connectivity_suggest (GST_ats_connect, - peer); + peer, + 0); return n; } -- 2.25.1