diff options
author | wachs <wachs@140774ce-b5e7-0310-ab8b-a85725594a96> | 2012-12-04 16:04:24 +0000 |
---|---|---|
committer | wachs <wachs@140774ce-b5e7-0310-ab8b-a85725594a96> | 2012-12-04 16:04:24 +0000 |
commit | 36539b13632be43bb7b7b4a14ad98bb65bc4b807 (patch) | |
tree | d10d53386ed6918d8bc1027c14ea61a361aed3a4 | |
parent | 64bab8f30fdc449e172a34882ce93495e4985970 (diff) |
changes
git-svn-id: https://gnunet.org/svn/gnunet@25243 140774ce-b5e7-0310-ab8b-a85725594a96
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 73 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.h | 15 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.c | 5 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_scheduling.c | 2 |
4 files changed, 82 insertions, 13 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 49d6d0b593..d0225635bb 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c @@ -65,6 +65,17 @@ enum ATS_Mode /** * Handle for ATS address component */ +struct GAS_Addresses_Suggestion_Requests +{ + struct GAS_Addresses_Suggestion_Requests *next; + struct GAS_Addresses_Suggestion_Requests *prev; + + struct GNUNET_PeerIdentity id; +}; + +/** + * Handle for ATS address component + */ struct GAS_Addresses_Handle { /** @@ -102,6 +113,16 @@ struct GAS_Addresses_Handle */ void *solver; + /** + * Address suggestion requests DLL head + */ + struct GAS_Addresses_Suggestion_Requests *r_head; + + /** + * Address suggestion requests DLL tail + */ + struct GAS_Addresses_Suggestion_Requests *r_tail; + /* Solver functions */ /** @@ -957,11 +978,54 @@ request_address_simple (const struct GNUNET_PeerIdentity *peer) } +/** + * Cancel address suggestions for a peer + * + * @param peer the respective peer + */ +void +GAS_addresses_request_address_cancel (const struct GNUNET_PeerIdentity *peer) +{ + struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head; + while (NULL != cur) + { + if (0 == memcmp (peer, &cur->id, sizeof (cur->id))) + break; /* found */ + cur = cur->next; + } + + if (NULL == cur) + { + GNUNET_break (0); + return; + } + GNUNET_CONTAINER_DLL_remove (handle->r_head, handle->r_tail, cur); + GNUNET_free (cur); +} + + +/** + * Add an address suggestions for a peer + * + * @param peer the respective peer + */ void GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer) { + struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head; + if (GNUNET_NO == handle->running) return; + while (NULL != cur) + { + if (0 == memcmp (peer, &cur->id, sizeof (cur->id))) + return; /* already suggesting */ + cur = cur->next; + } + + cur = GNUNET_malloc (sizeof (struct GAS_Addresses_Suggestion_Requests)); + cur->id = (*peer); + GNUNET_CONTAINER_DLL_insert (handle->r_head, handle->r_tail, cur); if (handle->ats_mode == MODE_SIMPLISTIC) { @@ -1181,12 +1245,19 @@ GAS_addresses_destroy_all () void GAS_addresses_done (struct GAS_Addresses_Handle *handle) { - GNUNET_assert (NULL != handle); + struct GAS_Addresses_Suggestion_Requests *cur; + GNUNET_assert (NULL != handle); GAS_addresses_destroy_all (); handle->running = GNUNET_NO; GNUNET_CONTAINER_multihashmap_destroy (handle->addresses); handle->addresses = NULL; + while (NULL != (cur = handle->r_head)) + { + GNUNET_CONTAINER_DLL_remove (handle->r_head, handle->r_tail, cur); + GNUNET_free (cur); + } + GNUNET_free (handle); /* Stop configured solution method */ diff --git a/src/ats/gnunet-service-ats_addresses.h b/src/ats/gnunet-service-ats_addresses.h index 983c747896..67defbecf0 100644 --- a/src/ats/gnunet-service-ats_addresses.h +++ b/src/ats/gnunet-service-ats_addresses.h @@ -172,16 +172,17 @@ void GAS_addresses_destroy_all (void); -// FIXME: this function should likely end up in the LP-subsystem and -// not with 'addresses' in the future... -// Note: this call should trigger an address suggestion -// (GAS_scheduling_transmit_address_suggestion) +/** + * Cancel address suggestions for a peer + * + * @param peer the respective peer + */ void -GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer); +GAS_addresses_request_address_cancel (const struct GNUNET_PeerIdentity *peer); +void +GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer); -// FIXME: this function should likely end up in the LP-subsystem and -// not with 'addresses' in the future... void GAS_addresses_change_preference (const struct GNUNET_PeerIdentity *peer, enum GNUNET_ATS_PreferenceKind kind, diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c index 51630c5097..c4fe21dfb4 100644 --- a/src/ats/gnunet-service-ats_addresses_mlp.c +++ b/src/ats/gnunet-service-ats_addresses_mlp.c @@ -1125,16 +1125,13 @@ GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg, mlp->BIG_M = (double) BIG_M_VALUE; - /* Get maximum number of iterations */ - - /* Get timeout for iterations */ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time(cfg, "ats", "MAX_DURATION", &max_duration)) { max_duration = MLP_MAX_EXEC_DURATION; } - + /* Get maximum number of iterations */ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_size(cfg, "ats", "MAX_ITERATIONS", &max_iterations)) { max_iterations = MLP_MAX_ITERATIONS; diff --git a/src/ats/gnunet-service-ats_scheduling.c b/src/ats/gnunet-service-ats_scheduling.c index a4c04275f0..ec7be9164b 100644 --- a/src/ats/gnunet-service-ats_scheduling.c +++ b/src/ats/gnunet-service-ats_scheduling.c @@ -193,7 +193,7 @@ GAS_handle_request_address_cancel (void *cls, "REQUEST_ADDRESS_CANCEL"); GNUNET_break (0 == ntohl (msg->reserved)); - /* TODO */ + GAS_addresses_request_address_cancel (&msg->peer); GNUNET_SERVER_receive_done (client, GNUNET_OK); } |