X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=inline;f=src%2Fats%2Fgnunet-service-ats_connectivity.c;h=c47ee03e66487c1a7ba78d19c5b6c852143ba6d0;hb=3aa0118c59db65fcbc312cc86ce6a762f611be3e;hp=7f353c71fe208f5f4f7e8f7f536744b1444ba7ce;hpb=c2d9d1e64c9801122caaa6b429fc67706db5c9d7;p=oweals%2Fgnunet.git diff --git a/src/ats/gnunet-service-ats_connectivity.c b/src/ats/gnunet-service-ats_connectivity.c index 7f353c71f..c47ee03e6 100644 --- a/src/ats/gnunet-service-ats_connectivity.c +++ b/src/ats/gnunet-service-ats_connectivity.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - Copyright (C) 2011-2015 Christian Grothoff (and other contributing authors) + Copyright (C) 2011-2015 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -40,7 +40,9 @@ struct ConnectionRequest /** * Client that made the request. */ - struct GNUNET_SERVER_Client *client; + struct GNUNET_SERVICE_Client *client; + + /* TODO: allow client to express a 'strength' for this request */ }; @@ -54,37 +56,38 @@ static struct GNUNET_CONTAINER_MultiPeerMap *connection_requests; * Is the given peer in the list of peers for which we * have an address request? * + * @param cls unused, NULL * @param peer peer to query for * @return #GNUNET_YES if so, #GNUNET_NO if not */ -int -GAS_connectivity_has_peer (const struct GNUNET_PeerIdentity *peer) +unsigned int +GAS_connectivity_has_peer (void *cls, + const struct GNUNET_PeerIdentity *peer) { + if (NULL == connection_requests) + return 0; + /* TODO: return sum of 'strength's of connectivity requests */ return GNUNET_CONTAINER_multipeermap_contains (connection_requests, peer); } /** - * 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 * @param message the request message */ void -GAS_handle_request_address (void *cls, - struct GNUNET_SERVER_Client *client, - const struct GNUNET_MessageHeader *message) +GAS_handle_request_address (struct GNUNET_SERVICE_Client *client, + const struct RequestAddressMessage *msg) { - const struct RequestAddressMessage *msg = - (const struct RequestAddressMessage *) message; struct ConnectionRequest *cr; 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, @@ -92,7 +95,6 @@ GAS_handle_request_address (void *cls, cr, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); GAS_plugin_request_connect_start (&msg->peer); - GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -110,7 +112,7 @@ free_matching_requests (void *cls, const struct GNUNET_PeerIdentity *pid, void *value) { - struct GNUNET_SERVER_Client *client = cls; + struct GNUNET_SERVICE_Client *client = cls; struct ConnectionRequest *cr = value; if (cr->client == client) @@ -130,29 +132,24 @@ 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 - * @param message the request message + * @param client the client that sent the request + * @param msg the request message */ void -GAS_handle_request_address_cancel (void *cls, - struct GNUNET_SERVER_Client *client, - const struct GNUNET_MessageHeader *message) +GAS_handle_request_address_cancel (struct GNUNET_SERVICE_Client *client, + const struct RequestAddressMessage *msg) { - const struct RequestAddressMessage *msg = - (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, client); - GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -163,7 +160,7 @@ GAS_handle_request_address_cancel (void *cls, * @param client handle of the (now dead) client */ void -GAS_connectivity_remove_client (struct GNUNET_SERVER_Client *client) +GAS_connectivity_remove_client (struct GNUNET_SERVICE_Client *client) { GNUNET_CONTAINER_multipeermap_iterate (connection_requests, &free_matching_requests, @@ -177,7 +174,9 @@ GAS_connectivity_remove_client (struct GNUNET_SERVER_Client *client) void GAS_connectivity_init () { - connection_requests = GNUNET_CONTAINER_multipeermap_create (32, GNUNET_NO); + connection_requests + = GNUNET_CONTAINER_multipeermap_create (32, + GNUNET_NO); } @@ -209,10 +208,13 @@ free_request (void *cls, void GAS_connectivity_done () { + GAS_plugin_solver_lock (); GNUNET_CONTAINER_multipeermap_iterate (connection_requests, &free_request, NULL); + GAS_plugin_solver_unlock (); GNUNET_CONTAINER_multipeermap_destroy (connection_requests); + connection_requests = NULL; }