diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-06-19 09:39:06 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-06-19 09:39:06 +0000 |
commit | 0c496375af3da708e2e68d5019e96f42c96ac8a7 (patch) | |
tree | a239fe7c3a78370435aa728a9bddf54bd22cb0d9 /src/ats | |
parent | 891930bd279a11269d8e7443429b7ef604f8691f (diff) | |
download | gnunet-0c496375af3da708e2e68d5019e96f42c96ac8a7.tar.gz gnunet-0c496375af3da708e2e68d5019e96f42c96ac8a7.zip |
fix a major bug: delete session for unknown address (addr==NULL, length==0)
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 58 |
1 files changed, 44 insertions, 14 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 2a15d922f..8667977e9 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -223,35 +223,65 @@ compare_address_it (void *cls, const struct GNUNET_HashCode * key, void *value) | |||
223 | { | 223 | { |
224 | struct CompareAddressContext *cac = cls; | 224 | struct CompareAddressContext *cac = cls; |
225 | struct ATS_Address *aa = value; | 225 | struct ATS_Address *aa = value; |
226 | /* | ||
227 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
228 | "Comparing to: %s %s %u session %u\n", | ||
229 | GNUNET_i2s (&aa->peer), aa->plugin, aa->addr_len, aa->session_id); | ||
230 | 226 | ||
231 | */ | 227 | /* Find an matching exact address: |
232 | /* find an exact matching address: aa->addr == cac->search->addr && aa->session == cac->search->session */ | 228 | * |
229 | * Compare by: | ||
230 | * aa->addr_len == cac->search->addr_len | ||
231 | * aa->plugin == cac->search->plugin | ||
232 | * aa->addr == cac->search->addr | ||
233 | * aa->session == cac->search->session | ||
234 | * | ||
235 | * return as exact address | ||
236 | */ | ||
233 | if ((aa->addr_len == cac->search->addr_len) && (0 == strcmp (aa->plugin, cac->search->plugin))) | 237 | if ((aa->addr_len == cac->search->addr_len) && (0 == strcmp (aa->plugin, cac->search->plugin))) |
234 | { | 238 | { |
235 | if ((0 == memcmp (aa->addr, cac->search->addr, aa->addr_len)) && (aa->session_id == cac->search->session_id)) | 239 | if ((0 == memcmp (aa->addr, cac->search->addr, aa->addr_len)) && (aa->session_id == cac->search->session_id)) |
236 | { | ||
237 | cac->exact_address = aa; | 240 | cac->exact_address = aa; |
238 | } | ||
239 | } | 241 | } |
240 | 242 | ||
241 | /* find an matching address: aa->addr == cac->search->addr && aa->session == 0 */ | 243 | /* Find an matching base address: |
242 | /* this address can be used to be updated */ | 244 | * |
245 | * Properties: | ||
246 | * | ||
247 | * aa->session_id == 0 | ||
248 | * | ||
249 | * Compare by: | ||
250 | * aa->addr_len == cac->search->addr_len | ||
251 | * aa->plugin == cac->search->plugin | ||
252 | * aa->addr == cac->search->addr | ||
253 | * | ||
254 | * return as base address | ||
255 | */ | ||
243 | if ((aa->addr_len == cac->search->addr_len) && (0 == strcmp (aa->plugin, cac->search->plugin))) | 256 | if ((aa->addr_len == cac->search->addr_len) && (0 == strcmp (aa->plugin, cac->search->plugin))) |
244 | { | 257 | { |
245 | if ((0 == memcmp (aa->addr, cac->search->addr, aa->addr_len)) && (aa->session_id == 0)) | 258 | if ((0 == memcmp (aa->addr, cac->search->addr, aa->addr_len)) && (aa->session_id == 0)) |
246 | { | ||
247 | cac->base_address = aa; | 259 | cac->base_address = aa; |
248 | } | 260 | } |
261 | |||
262 | /* Find an matching exact address based on session: | ||
263 | * | ||
264 | * Properties: | ||
265 | * | ||
266 | * cac->search->addr_len == 0 | ||
267 | * cac->addr == NULL | ||
268 | * | ||
269 | * Compare by: | ||
270 | * aa->plugin == cac->search->plugin | ||
271 | * aa->session_id == cac->search->session_id | ||
272 | * | ||
273 | * return as exact address | ||
274 | */ | ||
275 | if ((0 == cac->search->addr_len) && (NULL == cac->search->addr)) | ||
276 | { | ||
277 | if ((0 == strcmp (aa->plugin, cac->search->plugin)) && (aa->session_id == cac->search->session_id)) | ||
278 | cac->exact_address = aa; | ||
249 | } | 279 | } |
250 | 280 | ||
251 | if (cac->exact_address == NULL) | 281 | if (cac->exact_address == NULL) |
252 | return GNUNET_YES; | 282 | return GNUNET_YES; /* Continue iteration to find exact address */ |
253 | else | 283 | else |
254 | return GNUNET_NO; | 284 | return GNUNET_NO; /* Stop iteration since we have an exact address */ |
255 | } | 285 | } |
256 | 286 | ||
257 | 287 | ||