From 0eb7262331293c2a0edff4fc392d3a1d6cc4923f Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Wed, 9 Nov 2011 16:37:44 +0000 Subject: [PATCH] cancel address suggests --- src/ats/ats_api_scheduling.c | 31 +++++++++++++++++++++++-- src/ats/gnunet-service-ats.c | 3 +++ src/ats/gnunet-service-ats_scheduling.c | 24 +++++++++++++++++++ src/ats/gnunet-service-ats_scheduling.h | 10 ++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c index 13a4ce830..dd06916a1 100644 --- a/src/ats/ats_api_scheduling.c +++ b/src/ats/ats_api_scheduling.c @@ -499,8 +499,9 @@ process_ats_message (void *cls, const struct GNUNET_MessageHeader *msg) s = find_session (sh, session_id, &m->peer); if (s == NULL) { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "ATS tries to use outdated session `%s'\n", GNUNET_i2s(&m->peer)); - GNUNET_break (0); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS tries to use outdated session `%s'\n", GNUNET_i2s(&m->peer)); + //GNUNET_break (0); + return; } } address.peer = m->peer; @@ -633,6 +634,32 @@ GNUNET_ATS_suggest_address (struct GNUNET_ATS_SchedulingHandle *sh, } +/** + * We would like to stop receiving address updates for this peer + * + * @param sh handle + * @param peer identity of the peer + */ +void +GNUNET_ATS_suggest_address_cancel (struct GNUNET_ATS_SchedulingHandle *sh, + const struct GNUNET_PeerIdentity *peer) +{ + struct PendingMessage *p; + struct RequestAddressMessage *m; + + p = GNUNET_malloc (sizeof (struct PendingMessage) + + sizeof (struct RequestAddressMessage)); + p->size = sizeof (struct RequestAddressMessage); + p->is_init = GNUNET_NO; + m = (struct RequestAddressMessage *) &p[1]; + m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL); + m->header.size = htons (sizeof (struct RequestAddressMessage)); + m->reserved = htonl (0); + m->peer = *peer; + GNUNET_CONTAINER_DLL_insert_tail (sh->pending_head, sh->pending_tail, p); + do_transmit (sh); +} + /** * We have updated performance statistics for a given address. Note * that this function can be called for addresses that are currently diff --git a/src/ats/gnunet-service-ats.c b/src/ats/gnunet-service-ats.c index ec374aef8..355a44c43 100644 --- a/src/ats/gnunet-service-ats.c +++ b/src/ats/gnunet-service-ats.c @@ -135,6 +135,9 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, {&GAS_handle_request_address, NULL, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS, sizeof (struct RequestAddressMessage)}, + {&GAS_handle_request_address_cancel, NULL, + GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL, + sizeof (struct RequestAddressMessage)}, {&GAS_handle_address_update, NULL, GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE, 0}, {&GAS_handle_address_in_use, NULL, diff --git a/src/ats/gnunet-service-ats_scheduling.c b/src/ats/gnunet-service-ats_scheduling.c index fb4040417..d289ae594 100644 --- a/src/ats/gnunet-service-ats_scheduling.c +++ b/src/ats/gnunet-service-ats_scheduling.c @@ -170,6 +170,30 @@ GAS_handle_request_address (void *cls, struct GNUNET_SERVER_Client *client, } +/** + * Handle 'request address' messages from clients. + * + * @param cls unused, NULL + * @param client client that sent the request + * @param message the request message + */ +void +GAS_handle_request_address_cancel (void *cls, struct GNUNET_SERVER_Client *client, + const struct GNUNET_MessageHeader *message) +{ + const struct RequestAddressMessage *msg = + (const struct RequestAddressMessage *) message; + + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n", + "REQUEST_ADDRESS_CANCEL"); + GNUNET_break (0 == ntohl (msg->reserved)); + + /* TODO */ + + GNUNET_SERVER_receive_done (client, GNUNET_OK); +} + + /** * Handle 'address update' messages from clients. * diff --git a/src/ats/gnunet-service-ats_scheduling.h b/src/ats/gnunet-service-ats_scheduling.h index b97430b62..cb4e5e08e 100644 --- a/src/ats/gnunet-service-ats_scheduling.h +++ b/src/ats/gnunet-service-ats_scheduling.h @@ -90,6 +90,16 @@ GAS_handle_request_address (void *cls, struct GNUNET_SERVER_Client *client, const struct GNUNET_MessageHeader *message); +/** + * Cancel 'request address' messages from clients. + * + * @param cls unused, NULL + * @param client client that sent the request + * @param message the request message + */ +void +GAS_handle_request_address_cancel (void *cls, struct GNUNET_SERVER_Client *client, + const struct GNUNET_MessageHeader *message); /** * Handle 'address update' messages from clients. -- 2.25.1