aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-01-13 12:52:50 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-01-13 12:52:50 +0000
commite65b16ddcef0f93590f9789cc4f470773ccbbc97 (patch)
tree0c46718a22514f0b8c1c0c7dd9ec37ad5f6c1083
parent592bcf569f3915d95ba806bbf004fe6c83dfcdfc (diff)
downloadgnunet-e65b16ddcef0f93590f9789cc4f470773ccbbc97.tar.gz
gnunet-e65b16ddcef0f93590f9789cc4f470773ccbbc97.zip
- adding mlp functions to addresses
-rw-r--r--src/ats/gnunet-service-ats_addresses.c94
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 */
109static void
110free_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 */
126static struct ATS_Address *
127create_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
396void 454void