aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_addresses.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-10-17 08:13:49 +0000
committerChristian Grothoff <christian@grothoff.org>2011-10-17 08:13:49 +0000
commitc0d32e08cddf59b933cecd744c6cd582ec566694 (patch)
tree3f1c239c318c4eb06b40c6cd0889d1803c0d9616 /src/ats/gnunet-service-ats_addresses.c
parenta2d9b4434076254811584a4a0ffa8881d0903db8 (diff)
downloadgnunet-c0d32e08cddf59b933cecd744c6cd582ec566694.tar.gz
gnunet-c0d32e08cddf59b933cecd744c6cd582ec566694.zip
restrict to 1 scheduling client
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c77
1 files changed, 37 insertions, 40 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c
index 2bcb9913a..68d4b03de 100644
--- a/src/ats/gnunet-service-ats_addresses.c
+++ b/src/ats/gnunet-service-ats_addresses.c
@@ -36,8 +36,6 @@ struct ATS_Address
36 36
37 size_t addr_len; 37 size_t addr_len;
38 38
39 struct GNUNET_SERVER_Client *session_client;
40
41 uint32_t session_id; 39 uint32_t session_id;
42 40
43 uint32_t ats_count; 41 uint32_t ats_count;
@@ -48,6 +46,24 @@ struct ATS_Address
48 46
49 struct GNUNET_ATS_Information * ats; 47 struct GNUNET_ATS_Information * ats;
50 48
49 struct GNUNET_BANDWIDTH_Value32NBO atsp_utilization_in;
50
51 struct GNUNET_BANDWIDTH_Value32NBO atsp_utilization_out;
52
53 struct GNUNET_TIME_Relative atsp_latency;
54
55 uint32_t atsp_distance;
56
57 uint32_t atsp_cost_wan;
58
59 uint32_t atsp_cost_lan;
60
61 uint32_t atsp_cost_wlan;
62
63 struct GNUNET_BANDWIDTH_Value32NBO assigned_bw_in;
64
65 struct GNUNET_BANDWIDTH_Value32NBO assigned_bw_out;
66
51 struct GNUNET_BANDWIDTH_Value32NBO bw_in; 67 struct GNUNET_BANDWIDTH_Value32NBO bw_in;
52 68
53 struct GNUNET_BANDWIDTH_Value32NBO bw_out; 69 struct GNUNET_BANDWIDTH_Value32NBO bw_out;
@@ -98,8 +114,7 @@ compare_address_it (void *cls,
98 struct ATS_Address * aa = (struct ATS_Address *) value; 114 struct ATS_Address * aa = (struct ATS_Address *) value;
99 115
100 /* compare sessions */ 116 /* compare sessions */
101 if ((aa->session_client != cac->search->session_client) || 117 if (aa->session_id != cac->search->session_id)
102 (aa->session_id != cac->search->session_id))
103 return GNUNET_YES; 118 return GNUNET_YES;
104 119
105 if (aa->addr_len != cac->search->addr_len) 120 if (aa->addr_len != cac->search->addr_len)
@@ -139,13 +154,12 @@ find_address (const struct GNUNET_PeerIdentity *peer,
139 154
140 155
141void 156void
142GAS_address_update (const struct GNUNET_PeerIdentity *peer, 157GAS_addresses_update (const struct GNUNET_PeerIdentity *peer,
143 const char *plugin_name, 158 const char *plugin_name,
144 const void *plugin_addr, size_t plugin_addr_len, 159 const void *plugin_addr, size_t plugin_addr_len,
145 struct GNUNET_SERVER_Client *session_client, 160 uint32_t session_id,
146 uint32_t session_id, 161 const struct GNUNET_ATS_Information *atsi,
147 const struct GNUNET_ATS_Information *atsi, 162 uint32_t atsi_count)
148 uint32_t atsi_count)
149{ 163{
150 struct ATS_Address * aa; 164 struct ATS_Address * aa;
151 struct ATS_Address * old; 165 struct ATS_Address * old;
@@ -159,7 +173,6 @@ GAS_address_update (const struct GNUNET_PeerIdentity *peer,
159 aa->addr = &aa[1]; 173 aa->addr = &aa[1];
160 memcpy (&aa[1], plugin_addr, plugin_addr_len); 174 memcpy (&aa[1], plugin_addr, plugin_addr_len);
161 aa->plugin = GNUNET_strdup (plugin_name); 175 aa->plugin = GNUNET_strdup (plugin_name);
162 aa->session_client = session_client;
163 aa->session_id = session_id; 176 aa->session_id = session_id;
164 old = find_address (peer, aa); 177 old = find_address (peer, aa);
165 if (old == NULL) 178 if (old == NULL)
@@ -187,34 +200,10 @@ GAS_address_update (const struct GNUNET_PeerIdentity *peer,
187} 200}
188 201
189 202
190static int
191remove_address_by_client (void *cls,
192 const GNUNET_HashCode * key,
193 void *value)
194{
195 struct GNUNET_SERVER_Client *client = cls;
196 struct ATS_Address * aa = value;
197
198 if (aa->session_client == client)
199 destroy_address (aa);
200 return GNUNET_OK;
201}
202
203
204void
205GAS_address_client_disconnected (struct GNUNET_SERVER_Client *client)
206{
207 if (addresses != NULL)
208 GNUNET_CONTAINER_multihashmap_iterate(addresses,
209 &remove_address_by_client, client);
210}
211
212
213void 203void
214GAS_address_destroyed (const struct GNUNET_PeerIdentity *peer, 204GAS_addresses_destroy (const struct GNUNET_PeerIdentity *peer,
215 const char *plugin_name, 205 const char *plugin_name,
216 const void *plugin_addr, size_t plugin_addr_len, 206 const void *plugin_addr, size_t plugin_addr_len,
217 struct GNUNET_SERVER_Client *session_client,
218 uint32_t session_id) 207 uint32_t session_id)
219{ 208{
220 209
@@ -225,7 +214,6 @@ GAS_address_destroyed (const struct GNUNET_PeerIdentity *peer,
225 aa.addr_len = plugin_addr_len; 214 aa.addr_len = plugin_addr_len;
226 aa.addr = plugin_addr; 215 aa.addr = plugin_addr;
227 aa.plugin = (char*) plugin_name; 216 aa.plugin = (char*) plugin_name;
228 aa.session_client = session_client;
229 aa.session_id = session_id; 217 aa.session_id = session_id;
230 218
231 res = find_address (peer, &aa); 219 res = find_address (peer, &aa);
@@ -269,7 +257,7 @@ GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer)
269 aa->bw_in); 257 aa->bw_in);
270 GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, 258 GAS_scheduling_transmit_address_suggestion (peer, aa->plugin,
271 aa->addr, aa->addr_len, 259 aa->addr, aa->addr_len,
272 aa->session_client, aa->session_id, 260 aa->session_id,
273 aa->ats, aa->ats_count, 261 aa->ats, aa->ats_count,
274 aa->bw_out, aa->bw_in); 262 aa->bw_out, aa->bw_in);
275 GAS_performance_notify_clients (peer, aa->plugin, 263 GAS_performance_notify_clients (peer, aa->plugin,
@@ -332,13 +320,22 @@ free_address_it (void *cls,
332} 320}
333 321
334 322
323void
324GAS_addresses_destroy_all ()
325{
326 if (addresses != NULL)
327 GNUNET_CONTAINER_multihashmap_iterate(addresses,
328 &free_address_it, NULL);
329}
330
331
335/** 332/**
336 * Shutdown address subsystem. 333 * Shutdown address subsystem.
337 */ 334 */
338void 335void
339GAS_addresses_done () 336GAS_addresses_done ()
340{ 337{
341 GNUNET_CONTAINER_multihashmap_iterate (addresses, &free_address_it, NULL); 338 GAS_addresses_destroy_all ();
342 GNUNET_CONTAINER_multihashmap_destroy (addresses); 339 GNUNET_CONTAINER_multihashmap_destroy (addresses);
343 addresses = NULL; 340 addresses = NULL;
344} 341}