aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-12-04 16:04:24 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-12-04 16:04:24 +0000
commitb4c469f90f32a1d598285d5b600f0ccd253284e3 (patch)
treed10d53386ed6918d8bc1027c14ea61a361aed3a4 /src
parent3a80e42b78bc3210ab3e39b4ea2eebb3bff0d98f (diff)
downloadgnunet-b4c469f90f32a1d598285d5b600f0ccd253284e3.tar.gz
gnunet-b4c469f90f32a1d598285d5b600f0ccd253284e3.zip
changes
Diffstat (limited to 'src')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c73
-rw-r--r--src/ats/gnunet-service-ats_addresses.h15
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.c5
-rw-r--r--src/ats/gnunet-service-ats_scheduling.c2
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 */
68struct 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 */
68struct GAS_Addresses_Handle 79struct 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 */
986void
987GAS_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 */
960void 1012void
961GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer) 1013GAS_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 ()
1181void 1245void
1182GAS_addresses_done (struct GAS_Addresses_Handle *handle) 1246GAS_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
172GAS_addresses_destroy_all (void); 172GAS_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 */
179void 180void
180GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer); 181GAS_addresses_request_address_cancel (const struct GNUNET_PeerIdentity *peer);
181 182
183void
184GAS_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...
185void 186void
186GAS_addresses_change_preference (const struct GNUNET_PeerIdentity *peer, 187GAS_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}