diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-10-17 08:13:49 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-10-17 08:13:49 +0000 |
commit | c0d32e08cddf59b933cecd744c6cd582ec566694 (patch) | |
tree | 3f1c239c318c4eb06b40c6cd0889d1803c0d9616 /src/ats/gnunet-service-ats_addresses.c | |
parent | a2d9b4434076254811584a4a0ffa8881d0903db8 (diff) | |
download | gnunet-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.c | 77 |
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 | ||
141 | void | 156 | void |
142 | GAS_address_update (const struct GNUNET_PeerIdentity *peer, | 157 | GAS_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 | ||
190 | static int | ||
191 | remove_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 | |||
204 | void | ||
205 | GAS_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 | |||
213 | void | 203 | void |
214 | GAS_address_destroyed (const struct GNUNET_PeerIdentity *peer, | 204 | GAS_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 | ||
323 | void | ||
324 | GAS_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 | */ |
338 | void | 335 | void |
339 | GAS_addresses_done () | 336 | GAS_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 | } |