aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_addresses.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-10-14 15:33:58 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-10-14 15:33:58 +0000
commit0f1d24486a4c4284e1362ff94c647a1127657084 (patch)
tree5ec4de4f00a8ba6b9069cd4524ac371ea143f7bf /src/ats/gnunet-service-ats_addresses.c
parent1b03c4df12ae33861b28af20979e530ecb914fed (diff)
downloadgnunet-0f1d24486a4c4284e1362ff94c647a1127657084.tar.gz
gnunet-0f1d24486a4c4284e1362ff94c647a1127657084.zip
issue: zero-length plugin and addr
fixing: message size parsing address comparison
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c
index 5ed3c471b..70bb8517f 100644
--- a/src/ats/gnunet-service-ats_addresses.c
+++ b/src/ats/gnunet-service-ats_addresses.c
@@ -82,16 +82,22 @@ compare_address_it (void *cls,
82 (aa->session_id != cac->search->session_id)) 82 (aa->session_id != cac->search->session_id))
83 return GNUNET_YES; 83 return GNUNET_YES;
84 84
85 if (aa->addr_len != cac->search->addr_len)
86 {
87 return GNUNET_YES;
88 }
89
85 if (0 == strcmp(aa->plugin, cac->search->plugin)) 90 if (0 == strcmp(aa->plugin, cac->search->plugin))
86 { 91 {
87 if (aa->addr_len != cac->search->addr_len) 92 return GNUNET_YES;
88 return GNUNET_YES; 93 }
89 if (aa->addr_len == 0) 94
90 return GNUNET_YES; 95 if (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len))
91 if (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len)) 96 {
92 cac->result = aa; 97 cac->result = aa;
93 return GNUNET_NO; 98 return GNUNET_NO;
94 } 99 }
100
95 return GNUNET_YES; 101 return GNUNET_YES;
96} 102}
97 103
@@ -212,16 +218,17 @@ GAS_address_destroyed (const struct GNUNET_PeerIdentity *peer,
212 aa->session_client = session_client; 218 aa->session_client = session_client;
213 aa->session_id = session_id; 219 aa->session_id = session_id;
214 220
215 res = find_address (peer, aa);
216 GNUNET_assert (res != 0);
217
218 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 221 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
219 "Deleting address for peer `%s'\n", 222 "Deleting address for peer `%s': `%s'\n",
220 GNUNET_i2s (peer)); 223 GNUNET_i2s (peer), plugin_name);
221 224
222 GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(addresses, &peer->hashPubKey, res)); 225 res = find_address (peer, aa);
223 destroy_address (aa); 226 if (res != NULL)
224 destroy_address (res); 227 {
228 GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(addresses, &peer->hashPubKey, res));
229 destroy_address (aa);
230 destroy_address (res);
231 }
225} 232}
226 233
227 234
@@ -231,7 +238,15 @@ GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer)
231 struct ATS_Address * aa = NULL; 238 struct ATS_Address * aa = NULL;
232 aa = GNUNET_CONTAINER_multihashmap_get (addresses, &peer->hashPubKey); 239 aa = GNUNET_CONTAINER_multihashmap_get (addresses, &peer->hashPubKey);
233 if (aa != NULL) 240 if (aa != NULL)
241 {
242 aa->bw_in.value__ = htonl (100000);
243 aa->bw_out.value__ = htonl (100000);
234 GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr, aa->addr_len, aa->session_client, aa->session_id, aa->ats, aa->ats_count, aa->bw_out, aa->bw_in); 244 GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr, aa->addr_len, aa->session_client, aa->session_id, aa->ats, aa->ats_count, aa->bw_out, aa->bw_in);
245 }
246 else
247 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
248 "Cannot provide address for peer `%s'\n",
249 GNUNET_i2s (peer));
235} 250}
236 251
237 252