diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-12-04 16:04:24 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-12-04 16:04:24 +0000 |
commit | b4c469f90f32a1d598285d5b600f0ccd253284e3 (patch) | |
tree | d10d53386ed6918d8bc1027c14ea61a361aed3a4 /src | |
parent | 3a80e42b78bc3210ab3e39b4ea2eebb3bff0d98f (diff) | |
download | gnunet-b4c469f90f32a1d598285d5b600f0ccd253284e3.tar.gz gnunet-b4c469f90f32a1d598285d5b600f0ccd253284e3.zip |
changes
Diffstat (limited to 'src')
-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 49d6d0b59..d0225635b 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -65,6 +65,17 @@ enum ATS_Mode | |||
65 | /** | 65 | /** |
66 | * Handle for ATS address component | 66 | * Handle for ATS address component |
67 | */ | 67 | */ |
68 | struct GAS_Addresses_Suggestion_Requests | ||
69 | { | ||
70 | struct GAS_Addresses_Suggestion_Requests *next; | ||
71 | struct GAS_Addresses_Suggestion_Requests *prev; | ||
72 | |||
73 | struct GNUNET_PeerIdentity id; | ||
74 | }; | ||
75 | |||
76 | /** | ||
77 | * Handle for ATS address component | ||
78 | */ | ||
68 | struct GAS_Addresses_Handle | 79 | struct GAS_Addresses_Handle |
69 | { | 80 | { |
70 | /** | 81 | /** |
@@ -102,6 +113,16 @@ struct GAS_Addresses_Handle | |||
102 | */ | 113 | */ |
103 | void *solver; | 114 | void *solver; |
104 | 115 | ||
116 | /** | ||
117 | * Address suggestion requests DLL head | ||
118 | */ | ||
119 | struct GAS_Addresses_Suggestion_Requests *r_head; | ||
120 | |||
121 | /** | ||
122 | * Address suggestion requests DLL tail | ||
123 | */ | ||
124 | struct GAS_Addresses_Suggestion_Requests *r_tail; | ||
125 | |||
105 | /* Solver functions */ | 126 | /* Solver functions */ |
106 | 127 | ||
107 | /** | 128 | /** |
@@ -957,11 +978,54 @@ request_address_simple (const struct GNUNET_PeerIdentity *peer) | |||
957 | } | 978 | } |
958 | 979 | ||
959 | 980 | ||
981 | /** | ||
982 | * Cancel address suggestions for a peer | ||
983 | * | ||
984 | * @param peer the respective peer | ||
985 | */ | ||
986 | void | ||
987 | GAS_addresses_request_address_cancel (const struct GNUNET_PeerIdentity *peer) | ||
988 | { | ||
989 | struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head; | ||
990 | while (NULL != cur) | ||
991 | { | ||
992 | if (0 == memcmp (peer, &cur->id, sizeof (cur->id))) | ||
993 | break; /* found */ | ||
994 | cur = cur->next; | ||
995 | } | ||
996 | |||
997 | if (NULL == cur) | ||
998 | { | ||
999 | GNUNET_break (0); | ||
1000 | return; | ||
1001 | } | ||
1002 | GNUNET_CONTAINER_DLL_remove (handle->r_head, handle->r_tail, cur); | ||
1003 | GNUNET_free (cur); | ||
1004 | } | ||
1005 | |||
1006 | |||
1007 | /** | ||
1008 | * Add an address suggestions for a peer | ||
1009 | * | ||
1010 | * @param peer the respective peer | ||
1011 | */ | ||
960 | void | 1012 | void |
961 | GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer) | 1013 | GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer) |
962 | { | 1014 | { |
1015 | struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head; | ||
1016 | |||
963 | if (GNUNET_NO == handle->running) | 1017 | if (GNUNET_NO == handle->running) |
964 | return; | 1018 | return; |
1019 | while (NULL != cur) | ||
1020 | { | ||
1021 | if (0 == memcmp (peer, &cur->id, sizeof (cur->id))) | ||
1022 | return; /* already suggesting */ | ||
1023 | cur = cur->next; | ||
1024 | } | ||
1025 | |||
1026 | cur = GNUNET_malloc (sizeof (struct GAS_Addresses_Suggestion_Requests)); | ||
1027 | cur->id = (*peer); | ||
1028 | GNUNET_CONTAINER_DLL_insert (handle->r_head, handle->r_tail, cur); | ||
965 | 1029 | ||
966 | if (handle->ats_mode == MODE_SIMPLISTIC) | 1030 | if (handle->ats_mode == MODE_SIMPLISTIC) |
967 | { | 1031 | { |
@@ -1181,12 +1245,19 @@ GAS_addresses_destroy_all () | |||
1181 | void | 1245 | void |
1182 | GAS_addresses_done (struct GAS_Addresses_Handle *handle) | 1246 | GAS_addresses_done (struct GAS_Addresses_Handle *handle) |
1183 | { | 1247 | { |
1184 | GNUNET_assert (NULL != handle); | 1248 | struct GAS_Addresses_Suggestion_Requests *cur; |
1185 | 1249 | ||
1250 | GNUNET_assert (NULL != handle); | ||
1186 | GAS_addresses_destroy_all (); | 1251 | GAS_addresses_destroy_all (); |
1187 | handle->running = GNUNET_NO; | 1252 | handle->running = GNUNET_NO; |
1188 | GNUNET_CONTAINER_multihashmap_destroy (handle->addresses); | 1253 | GNUNET_CONTAINER_multihashmap_destroy (handle->addresses); |
1189 | handle->addresses = NULL; | 1254 | handle->addresses = NULL; |
1255 | while (NULL != (cur = handle->r_head)) | ||
1256 | { | ||
1257 | GNUNET_CONTAINER_DLL_remove (handle->r_head, handle->r_tail, cur); | ||
1258 | GNUNET_free (cur); | ||
1259 | } | ||
1260 | |||
1190 | GNUNET_free (handle); | 1261 | GNUNET_free (handle); |
1191 | /* Stop configured solution method */ | 1262 | /* Stop configured solution method */ |
1192 | 1263 | ||
diff --git a/src/ats/gnunet-service-ats_addresses.h b/src/ats/gnunet-service-ats_addresses.h index 983c74789..67defbecf 100644 --- a/src/ats/gnunet-service-ats_addresses.h +++ b/src/ats/gnunet-service-ats_addresses.h | |||
@@ -172,16 +172,17 @@ void | |||
172 | GAS_addresses_destroy_all (void); | 172 | GAS_addresses_destroy_all (void); |
173 | 173 | ||
174 | 174 | ||
175 | // FIXME: this function should likely end up in the LP-subsystem and | 175 | /** |
176 | // not with 'addresses' in the future... | 176 | * Cancel address suggestions for a peer |
177 | // Note: this call should trigger an address suggestion | 177 | * |
178 | // (GAS_scheduling_transmit_address_suggestion) | 178 | * @param peer the respective peer |
179 | */ | ||
179 | void | 180 | void |
180 | GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer); | 181 | GAS_addresses_request_address_cancel (const struct GNUNET_PeerIdentity *peer); |
181 | 182 | ||
183 | void | ||
184 | GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer); | ||
182 | 185 | ||
183 | // FIXME: this function should likely end up in the LP-subsystem and | ||
184 | // not with 'addresses' in the future... | ||
185 | void | 186 | void |
186 | GAS_addresses_change_preference (const struct GNUNET_PeerIdentity *peer, | 187 | GAS_addresses_change_preference (const struct GNUNET_PeerIdentity *peer, |
187 | enum GNUNET_ATS_PreferenceKind kind, | 188 | 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 51630c509..c4fe21dfb 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, | |||
1125 | 1125 | ||
1126 | mlp->BIG_M = (double) BIG_M_VALUE; | 1126 | mlp->BIG_M = (double) BIG_M_VALUE; |
1127 | 1127 | ||
1128 | /* Get maximum number of iterations */ | ||
1129 | |||
1130 | |||
1131 | /* Get timeout for iterations */ | 1128 | /* Get timeout for iterations */ |
1132 | if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time(cfg, "ats", "MAX_DURATION", &max_duration)) | 1129 | if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time(cfg, "ats", "MAX_DURATION", &max_duration)) |
1133 | { | 1130 | { |
1134 | max_duration = MLP_MAX_EXEC_DURATION; | 1131 | max_duration = MLP_MAX_EXEC_DURATION; |
1135 | } | 1132 | } |
1136 | 1133 | ||
1137 | 1134 | /* Get maximum number of iterations */ | |
1138 | if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_size(cfg, "ats", "MAX_ITERATIONS", &max_iterations)) | 1135 | if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_size(cfg, "ats", "MAX_ITERATIONS", &max_iterations)) |
1139 | { | 1136 | { |
1140 | max_iterations = MLP_MAX_ITERATIONS; | 1137 | max_iterations = MLP_MAX_ITERATIONS; |
diff --git a/src/ats/gnunet-service-ats_scheduling.c b/src/ats/gnunet-service-ats_scheduling.c index a4c04275f..ec7be9164 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, | |||
193 | "REQUEST_ADDRESS_CANCEL"); | 193 | "REQUEST_ADDRESS_CANCEL"); |
194 | GNUNET_break (0 == ntohl (msg->reserved)); | 194 | GNUNET_break (0 == ntohl (msg->reserved)); |
195 | 195 | ||
196 | /* TODO */ | 196 | GAS_addresses_request_address_cancel (&msg->peer); |
197 | 197 | ||
198 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | 198 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
199 | } | 199 | } |