diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-01-13 12:52:50 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-01-13 12:52:50 +0000 |
commit | e65b16ddcef0f93590f9789cc4f470773ccbbc97 (patch) | |
tree | 0c46718a22514f0b8c1c0c7dd9ec37ad5f6c1083 | |
parent | 592bcf569f3915d95ba806bbf004fe6c83dfcdfc (diff) | |
download | gnunet-e65b16ddcef0f93590f9789cc4f470773ccbbc97.tar.gz gnunet-e65b16ddcef0f93590f9789cc4f470773ccbbc97.zip |
- adding mlp functions to addresses
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 94 |
1 files changed, 76 insertions, 18 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 0b2d464b6..a5480e50e 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -102,6 +102,46 @@ recalculate_assigned_bw () | |||
102 | GNUNET_CONTAINER_multihashmap_iterate (addresses, &update_bw_it, NULL); | 102 | GNUNET_CONTAINER_multihashmap_iterate (addresses, &update_bw_it, NULL); |
103 | } | 103 | } |
104 | 104 | ||
105 | /** | ||
106 | * Free the given address | ||
107 | * @param addr address to destroy | ||
108 | */ | ||
109 | static void | ||
110 | free_address (struct ATS_Address *addr) | ||
111 | { | ||
112 | GNUNET_free_non_null (addr->ats); | ||
113 | GNUNET_free (addr->plugin); | ||
114 | GNUNET_free (addr); | ||
115 | } | ||
116 | |||
117 | /** | ||
118 | * Create a ATS_address with the given information | ||
119 | * @param peer peer | ||
120 | * @param plugin_name plugin | ||
121 | * @param plugin_addr address | ||
122 | * @param plugin_addr_len address length | ||
123 | * @param session_id session | ||
124 | * @return the ATS_Address | ||
125 | */ | ||
126 | static struct ATS_Address * | ||
127 | create_address (const struct GNUNET_PeerIdentity *peer, | ||
128 | const char *plugin_name, | ||
129 | const void *plugin_addr, size_t plugin_addr_len, | ||
130 | uint32_t session_id) | ||
131 | { | ||
132 | struct ATS_Address *aa = NULL; | ||
133 | |||
134 | aa = GNUNET_malloc (sizeof (struct ATS_Address) + plugin_addr_len); | ||
135 | aa->peer = *peer; | ||
136 | aa->addr_len = plugin_addr_len; | ||
137 | aa->addr = &aa[1]; | ||
138 | memcpy (&aa[1], plugin_addr, plugin_addr_len); | ||
139 | aa->plugin = GNUNET_strdup (plugin_name); | ||
140 | aa->session_id = session_id; | ||
141 | |||
142 | return aa; | ||
143 | } | ||
144 | |||
105 | 145 | ||
106 | /** | 146 | /** |
107 | * Destroy the given address. | 147 | * Destroy the given address. |
@@ -125,9 +165,7 @@ destroy_address (struct ATS_Address *addr) | |||
125 | addr->active = GNUNET_NO; | 165 | addr->active = GNUNET_NO; |
126 | ret = GNUNET_YES; | 166 | ret = GNUNET_YES; |
127 | } | 167 | } |
128 | GNUNET_free_non_null (addr->ats); | 168 | free_address (addr); |
129 | GNUNET_free (addr->plugin); | ||
130 | GNUNET_free (addr); | ||
131 | return ret; | 169 | return ret; |
132 | } | 170 | } |
133 | 171 | ||
@@ -190,16 +228,16 @@ GAS_addresses_update (const struct GNUNET_PeerIdentity *peer, | |||
190 | struct ATS_Address *old; | 228 | struct ATS_Address *old; |
191 | uint32_t i; | 229 | uint32_t i; |
192 | 230 | ||
193 | aa = GNUNET_malloc (sizeof (struct ATS_Address) + plugin_addr_len); | 231 | aa = create_address (peer, |
232 | plugin_name, | ||
233 | plugin_addr, plugin_addr_len, | ||
234 | session_id); | ||
235 | |||
236 | aa->mlp_information = NULL; | ||
194 | aa->ats = GNUNET_malloc (atsi_count * sizeof (struct GNUNET_ATS_Information)); | 237 | aa->ats = GNUNET_malloc (atsi_count * sizeof (struct GNUNET_ATS_Information)); |
195 | aa->peer = *peer; | ||
196 | aa->addr_len = plugin_addr_len; | ||
197 | aa->ats_count = atsi_count; | 238 | aa->ats_count = atsi_count; |
198 | memcpy (aa->ats, atsi, atsi_count * sizeof (struct GNUNET_ATS_Information)); | 239 | memcpy (aa->ats, atsi, atsi_count * sizeof (struct GNUNET_ATS_Information)); |
199 | aa->addr = &aa[1]; | 240 | |
200 | memcpy (&aa[1], plugin_addr, plugin_addr_len); | ||
201 | aa->plugin = GNUNET_strdup (plugin_name); | ||
202 | aa->session_id = session_id; | ||
203 | old = find_address (peer, aa); | 241 | old = find_address (peer, aa); |
204 | if (old == NULL) | 242 | if (old == NULL) |
205 | { | 243 | { |
@@ -259,6 +297,10 @@ GAS_addresses_update (const struct GNUNET_PeerIdentity *peer, | |||
259 | GNUNET_break (0); | 297 | GNUNET_break (0); |
260 | break; | 298 | break; |
261 | } | 299 | } |
300 | #if HAVE_LIBGLPK | ||
301 | if (ats_mode == MLP) | ||
302 | GAS_mlp_address_update (addresses, old); | ||
303 | #endif | ||
262 | } | 304 | } |
263 | 305 | ||
264 | 306 | ||
@@ -323,16 +365,15 @@ GAS_addresses_destroy (const struct GNUNET_PeerIdentity *peer, | |||
323 | const char *plugin_name, const void *plugin_addr, | 365 | const char *plugin_name, const void *plugin_addr, |
324 | size_t plugin_addr_len, uint32_t session_id) | 366 | size_t plugin_addr_len, uint32_t session_id) |
325 | { | 367 | { |
326 | struct ATS_Address aa; | 368 | struct ATS_Address *aa; |
327 | 369 | ||
328 | GNUNET_break (0 < strlen (plugin_name)); | 370 | GNUNET_break (0 < strlen (plugin_name)); |
329 | aa.peer = *peer; | 371 | aa = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, session_id); |
330 | aa.addr_len = plugin_addr_len; | 372 | |
331 | aa.addr = plugin_addr; | ||
332 | aa.plugin = (char *) plugin_name; | ||
333 | aa.session_id = session_id; | ||
334 | GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey, | 373 | GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey, |
335 | &destroy_by_session_id, &aa); | 374 | &destroy_by_session_id, aa); |
375 | |||
376 | free_address (aa); | ||
336 | } | 377 | } |
337 | 378 | ||
338 | 379 | ||
@@ -387,10 +428,27 @@ GAS_addresses_in_use (const struct GNUNET_PeerIdentity *peer, | |||
387 | const char *plugin_name, const void *plugin_addr, | 428 | const char *plugin_name, const void *plugin_addr, |
388 | size_t plugin_addr_len, uint32_t session_id, int in_use) | 429 | size_t plugin_addr_len, uint32_t session_id, int in_use) |
389 | { | 430 | { |
390 | 431 | #if DEBUG_ATS | |
391 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 432 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
392 | "Received `%s' message for peer `%s': %i\n", "ADDRESS_IN_USE", | 433 | "Received `%s' message for peer `%s': %i\n", "ADDRESS_IN_USE", |
393 | GNUNET_i2s (peer), in_use); | 434 | GNUNET_i2s (peer), in_use); |
435 | #endif | ||
436 | |||
437 | struct ATS_Address *aa; | ||
438 | struct ATS_Address *old; | ||
439 | |||
440 | aa = create_address(peer, plugin_name, plugin_addr, plugin_addr_len, session_id); | ||
441 | old = find_address (peer, aa); | ||
442 | free_address (aa); | ||
443 | |||
444 | GNUNET_assert (old != NULL); | ||
445 | GNUNET_assert (in_use != old->used); | ||
446 | old->used = in_use; | ||
447 | |||
448 | #if HAVE_LIBGLPK | ||
449 | if (ats_mode == MLP) | ||
450 | GAS_mlp_address_update (addresses, old); | ||
451 | #endif | ||
394 | } | 452 | } |
395 | 453 | ||
396 | void | 454 | void |