diff options
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 43 |
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 | ||