diff options
Diffstat (limited to 'src/nat-auto/nat_auto_api_test.c')
-rw-r--r-- | src/nat-auto/nat_auto_api_test.c | 226 |
1 files changed, 89 insertions, 137 deletions
diff --git a/src/nat-auto/nat_auto_api_test.c b/src/nat-auto/nat_auto_api_test.c index 1511d91ba..56a2b8d72 100644 --- a/src/nat-auto/nat_auto_api_test.c +++ b/src/nat-auto/nat_auto_api_test.c | |||
@@ -28,9 +28,10 @@ | |||
28 | #include "gnunet_nat_auto_service.h" | 28 | #include "gnunet_nat_auto_service.h" |
29 | #include "nat-auto.h" | 29 | #include "nat-auto.h" |
30 | 30 | ||
31 | #define LOG(kind,...) GNUNET_log_from (kind, "nat-auto", __VA_ARGS__) | 31 | #define LOG(kind, ...) GNUNET_log_from (kind, "nat-auto", __VA_ARGS__) |
32 | 32 | ||
33 | #define NAT_SERVER_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) | 33 | #define NAT_SERVER_TIMEOUT \ |
34 | GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) | ||
34 | 35 | ||
35 | /** | 36 | /** |
36 | * Entry we keep for each incoming connection. | 37 | * Entry we keep for each incoming connection. |
@@ -88,7 +89,6 @@ struct ClientActivity | |||
88 | * Handle to overall NAT test. | 89 | * Handle to overall NAT test. |
89 | */ | 90 | */ |
90 | struct GNUNET_NAT_AUTO_Test *h; | 91 | struct GNUNET_NAT_AUTO_Test *h; |
91 | |||
92 | }; | 92 | }; |
93 | 93 | ||
94 | 94 | ||
@@ -184,9 +184,7 @@ struct GNUNET_NAT_AUTO_Test | |||
184 | * @param addrlen actual lenght of the @a addr | 184 | * @param addrlen actual lenght of the @a addr |
185 | */ | 185 | */ |
186 | static void | 186 | static void |
187 | reversal_cb (void *cls, | 187 | reversal_cb (void *cls, const struct sockaddr *addr, socklen_t addrlen) |
188 | const struct sockaddr *addr, | ||
189 | socklen_t addrlen) | ||
190 | { | 188 | { |
191 | struct GNUNET_NAT_AUTO_Test *h = cls; | 189 | struct GNUNET_NAT_AUTO_Test *h = cls; |
192 | const struct sockaddr_in *sa; | 190 | const struct sockaddr_in *sa; |
@@ -198,11 +196,10 @@ reversal_cb (void *cls, | |||
198 | { | 196 | { |
199 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 197 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
200 | "Received connection reversal request for wrong port\n"); | 198 | "Received connection reversal request for wrong port\n"); |
201 | return; /* wrong port */ | 199 | return; /* wrong port */ |
202 | } | 200 | } |
203 | /* report success */ | 201 | /* report success */ |
204 | h->report (h->report_cls, | 202 | h->report (h->report_cls, GNUNET_NAT_ERROR_SUCCESS); |
205 | GNUNET_NAT_ERROR_SUCCESS); | ||
206 | } | 203 | } |
207 | 204 | ||
208 | 205 | ||
@@ -220,22 +217,17 @@ do_udp_read (void *cls) | |||
220 | const struct GNUNET_SCHEDULER_TaskContext *tc; | 217 | const struct GNUNET_SCHEDULER_TaskContext *tc; |
221 | 218 | ||
222 | tc = GNUNET_SCHEDULER_get_task_context (); | 219 | tc = GNUNET_SCHEDULER_get_task_context (); |
223 | tst->ltask = | 220 | tst->ltask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
224 | GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 221 | tst->lsock, |
225 | tst->lsock, | 222 | &do_udp_read, |
226 | &do_udp_read, | 223 | tst); |
227 | tst); | ||
228 | if ((NULL != tc->write_ready) && | 224 | if ((NULL != tc->write_ready) && |
229 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, | 225 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, tst->lsock)) && |
230 | tst->lsock)) && | ||
231 | (sizeof (data) == | 226 | (sizeof (data) == |
232 | GNUNET_NETWORK_socket_recv (tst->lsock, | 227 | GNUNET_NETWORK_socket_recv (tst->lsock, &data, sizeof (data)))) |
233 | &data, | ||
234 | sizeof (data)))) | ||
235 | { | 228 | { |
236 | if (data == tst->data) | 229 | if (data == tst->data) |
237 | tst->report (tst->report_cls, | 230 | tst->report (tst->report_cls, GNUNET_NAT_ERROR_SUCCESS); |
238 | GNUNET_NAT_ERROR_SUCCESS); | ||
239 | else | 231 | else |
240 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 232 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
241 | "Received data mismatches expected value\n"); | 233 | "Received data mismatches expected value\n"); |
@@ -263,20 +255,14 @@ do_read (void *cls) | |||
263 | tc = GNUNET_SCHEDULER_get_task_context (); | 255 | tc = GNUNET_SCHEDULER_get_task_context (); |
264 | na->rtask = NULL; | 256 | na->rtask = NULL; |
265 | tst = na->h; | 257 | tst = na->h; |
266 | GNUNET_CONTAINER_DLL_remove (tst->na_head, | 258 | GNUNET_CONTAINER_DLL_remove (tst->na_head, tst->na_tail, na); |
267 | tst->na_tail, | ||
268 | na); | ||
269 | if ((NULL != tc->write_ready) && | 259 | if ((NULL != tc->write_ready) && |
270 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, | 260 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, na->sock)) && |
271 | na->sock)) && | ||
272 | (sizeof (data) == | 261 | (sizeof (data) == |
273 | GNUNET_NETWORK_socket_recv (na->sock, | 262 | GNUNET_NETWORK_socket_recv (na->sock, &data, sizeof (data)))) |
274 | &data, | ||
275 | sizeof (data)))) | ||
276 | { | 263 | { |
277 | if (data == tst->data) | 264 | if (data == tst->data) |
278 | tst->report (tst->report_cls, | 265 | tst->report (tst->report_cls, GNUNET_NAT_ERROR_SUCCESS); |
279 | GNUNET_NAT_ERROR_SUCCESS); | ||
280 | else | 266 | else |
281 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 267 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
282 | "Received data does not match expected value\n"); | 268 | "Received data does not match expected value\n"); |
@@ -306,28 +292,22 @@ do_accept (void *cls) | |||
306 | tst->lsock, | 292 | tst->lsock, |
307 | &do_accept, | 293 | &do_accept, |
308 | tst); | 294 | tst); |
309 | s = GNUNET_NETWORK_socket_accept (tst->lsock, | 295 | s = GNUNET_NETWORK_socket_accept (tst->lsock, NULL, NULL); |
310 | NULL, | ||
311 | NULL); | ||
312 | if (NULL == s) | 296 | if (NULL == s) |
313 | { | 297 | { |
314 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_INFO, | 298 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_INFO, "accept"); |
315 | "accept"); | 299 | return; /* odd error */ |
316 | return; /* odd error */ | ||
317 | } | 300 | } |
318 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 301 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
319 | "Got an inbound connection, waiting for data\n"); | 302 | "Got an inbound connection, waiting for data\n"); |
320 | wl = GNUNET_new (struct NatActivity); | 303 | wl = GNUNET_new (struct NatActivity); |
321 | wl->sock = s; | 304 | wl->sock = s; |
322 | wl->h = tst; | 305 | wl->h = tst; |
323 | wl->rtask = | 306 | wl->rtask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
324 | GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 307 | wl->sock, |
325 | wl->sock, | 308 | &do_read, |
326 | &do_read, | 309 | wl); |
327 | wl); | 310 | GNUNET_CONTAINER_DLL_insert (tst->na_head, tst->na_tail, wl); |
328 | GNUNET_CONTAINER_DLL_insert (tst->na_head, | ||
329 | tst->na_tail, | ||
330 | wl); | ||
331 | } | 311 | } |
332 | 312 | ||
333 | 313 | ||
@@ -339,15 +319,12 @@ do_accept (void *cls) | |||
339 | * @param error error code | 319 | * @param error error code |
340 | */ | 320 | */ |
341 | static void | 321 | static void |
342 | mq_error_handler (void *cls, | 322 | mq_error_handler (void *cls, enum GNUNET_MQ_Error error) |
343 | enum GNUNET_MQ_Error error) | ||
344 | { | 323 | { |
345 | struct ClientActivity *ca = cls; | 324 | struct ClientActivity *ca = cls; |
346 | struct GNUNET_NAT_AUTO_Test *tst = ca->h; | 325 | struct GNUNET_NAT_AUTO_Test *tst = ca->h; |
347 | 326 | ||
348 | GNUNET_CONTAINER_DLL_remove (tst->ca_head, | 327 | GNUNET_CONTAINER_DLL_remove (tst->ca_head, tst->ca_tail, ca); |
349 | tst->ca_tail, | ||
350 | ca); | ||
351 | GNUNET_MQ_destroy (ca->mq); | 328 | GNUNET_MQ_destroy (ca->mq); |
352 | GNUNET_free (ca); | 329 | GNUNET_free (ca); |
353 | } | 330 | } |
@@ -367,7 +344,7 @@ mq_error_handler (void *cls, | |||
367 | */ | 344 | */ |
368 | static void | 345 | static void |
369 | addr_cb (void *cls, | 346 | addr_cb (void *cls, |
370 | void **app_ctx, | 347 | void **app_ctx, |
371 | int add_remove, | 348 | int add_remove, |
372 | enum GNUNET_NAT_AddressClass ac, | 349 | enum GNUNET_NAT_AddressClass ac, |
373 | const struct sockaddr *addr, | 350 | const struct sockaddr *addr, |
@@ -385,15 +362,13 @@ addr_cb (void *cls, | |||
385 | if (addrlen != sizeof (struct sockaddr_in)) | 362 | if (addrlen != sizeof (struct sockaddr_in)) |
386 | { | 363 | { |
387 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 364 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
388 | "NAT test ignores IPv6 address `%s' returned from NAT library\n", | 365 | "NAT test ignores IPv6 address `%s' returned from NAT library\n", |
389 | GNUNET_a2s (addr, | 366 | GNUNET_a2s (addr, addrlen)); |
390 | addrlen)); | 367 | return; /* ignore IPv6 here */ |
391 | return; /* ignore IPv6 here */ | ||
392 | } | 368 | } |
393 | LOG (GNUNET_ERROR_TYPE_INFO, | 369 | LOG (GNUNET_ERROR_TYPE_INFO, |
394 | "Asking gnunet-nat-server to connect to `%s'\n", | 370 | "Asking gnunet-nat-server to connect to `%s'\n", |
395 | GNUNET_a2s (addr, | 371 | GNUNET_a2s (addr, addrlen)); |
396 | addrlen)); | ||
397 | 372 | ||
398 | ca = GNUNET_new (struct ClientActivity); | 373 | ca = GNUNET_new (struct ClientActivity); |
399 | ca->h = h; | 374 | ca->h = h; |
@@ -406,21 +381,17 @@ addr_cb (void *cls, | |||
406 | { | 381 | { |
407 | GNUNET_free (ca); | 382 | GNUNET_free (ca); |
408 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 383 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
409 | _("Failed to connect to `gnunet-nat-server'\n")); | 384 | _ ("Failed to connect to `gnunet-nat-server'\n")); |
410 | return; | 385 | return; |
411 | } | 386 | } |
412 | GNUNET_CONTAINER_DLL_insert (h->ca_head, | 387 | GNUNET_CONTAINER_DLL_insert (h->ca_head, h->ca_tail, ca); |
413 | h->ca_tail, | ||
414 | ca); | ||
415 | sa = (const struct sockaddr_in *) addr; | 388 | sa = (const struct sockaddr_in *) addr; |
416 | env = GNUNET_MQ_msg (msg, | 389 | env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_NAT_TEST); |
417 | GNUNET_MESSAGE_TYPE_NAT_TEST); | ||
418 | msg->dst_ipv4 = sa->sin_addr.s_addr; | 390 | msg->dst_ipv4 = sa->sin_addr.s_addr; |
419 | msg->dport = sa->sin_port; | 391 | msg->dport = sa->sin_port; |
420 | msg->data = h->data; | 392 | msg->data = h->data; |
421 | msg->is_tcp = htonl ((uint32_t) (h->proto == IPPROTO_TCP)); | 393 | msg->is_tcp = htonl ((uint32_t) (h->proto == IPPROTO_TCP)); |
422 | GNUNET_MQ_send (ca->mq, | 394 | GNUNET_MQ_send (ca->mq, env); |
423 | env); | ||
424 | } | 395 | } |
425 | 396 | ||
426 | 397 | ||
@@ -437,8 +408,7 @@ do_fail (void *cls) | |||
437 | struct GNUNET_NAT_AUTO_Test *nh = cls; | 408 | struct GNUNET_NAT_AUTO_Test *nh = cls; |
438 | 409 | ||
439 | nh->ttask = NULL; | 410 | nh->ttask = NULL; |
440 | nh->report (nh->report_cls, | 411 | nh->report (nh->report_cls, nh->status); |
441 | nh->status); | ||
442 | } | 412 | } |
443 | 413 | ||
444 | 414 | ||
@@ -455,30 +425,25 @@ do_fail (void *cls) | |||
455 | */ | 425 | */ |
456 | struct GNUNET_NAT_AUTO_Test * | 426 | struct GNUNET_NAT_AUTO_Test * |
457 | GNUNET_NAT_AUTO_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | 427 | GNUNET_NAT_AUTO_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, |
458 | uint8_t proto, | 428 | uint8_t proto, |
459 | const char *section_name, | 429 | const char *section_name, |
460 | GNUNET_NAT_TestCallback report, | 430 | GNUNET_NAT_TestCallback report, |
461 | void *report_cls) | 431 | void *report_cls) |
462 | { | 432 | { |
463 | struct GNUNET_NAT_AUTO_Test *nh; | 433 | struct GNUNET_NAT_AUTO_Test *nh; |
464 | unsigned long long bnd_port; | 434 | unsigned long long bnd_port; |
465 | struct sockaddr_in sa; | 435 | struct sockaddr_in sa; |
466 | const struct sockaddr *addrs[] = { | 436 | const struct sockaddr *addrs[] = {(const struct sockaddr *) &sa}; |
467 | (const struct sockaddr *) &sa | 437 | const socklen_t addrlens[] = {sizeof (sa)}; |
468 | }; | 438 | |
469 | const socklen_t addrlens[] = { | 439 | if ((GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, |
470 | sizeof (sa) | 440 | section_name, |
471 | }; | 441 | "PORT", |
472 | 442 | &bnd_port)) || | |
473 | if ( (GNUNET_OK != | 443 | (bnd_port > 65535)) |
474 | GNUNET_CONFIGURATION_get_value_number (cfg, | ||
475 | section_name, | ||
476 | "PORT", | ||
477 | &bnd_port)) || | ||
478 | (bnd_port > 65535) ) | ||
479 | { | 444 | { |
480 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 445 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
481 | _("Failed to find valid PORT in section `%s'\n"), | 446 | _ ("Failed to find valid PORT in section `%s'\n"), |
482 | section_name); | 447 | section_name); |
483 | return NULL; | 448 | return NULL; |
484 | } | 449 | } |
@@ -499,67 +464,60 @@ GNUNET_NAT_AUTO_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
499 | nh->status = GNUNET_NAT_ERROR_SUCCESS; | 464 | nh->status = GNUNET_NAT_ERROR_SUCCESS; |
500 | if (0 == bnd_port) | 465 | if (0 == bnd_port) |
501 | { | 466 | { |
502 | nh->nat | 467 | nh->nat = GNUNET_NAT_register (cfg, |
503 | = GNUNET_NAT_register (cfg, | 468 | section_name, |
504 | section_name, | 469 | proto, |
505 | proto, | 470 | 0, |
506 | 0, NULL, NULL, | 471 | NULL, |
507 | &addr_cb, | 472 | NULL, |
508 | &reversal_cb, | 473 | &addr_cb, |
509 | nh); | 474 | &reversal_cb, |
475 | nh); | ||
510 | } | 476 | } |
511 | else | 477 | else |
512 | { | 478 | { |
513 | nh->lsock | 479 | nh->lsock = |
514 | = GNUNET_NETWORK_socket_create (AF_INET, | 480 | GNUNET_NETWORK_socket_create (AF_INET, |
515 | (IPPROTO_UDP == proto) | 481 | (IPPROTO_UDP == proto) ? SOCK_DGRAM |
516 | ? SOCK_DGRAM | 482 | : SOCK_STREAM, |
517 | : SOCK_STREAM, | 483 | proto); |
518 | proto); | 484 | if ((NULL == nh->lsock) || |
519 | if ( (NULL == nh->lsock) || | 485 | (GNUNET_OK != GNUNET_NETWORK_socket_bind (nh->lsock, |
520 | (GNUNET_OK != | 486 | (const struct sockaddr *) &sa, |
521 | GNUNET_NETWORK_socket_bind (nh->lsock, | 487 | sizeof (sa)))) |
522 | (const struct sockaddr *) &sa, | ||
523 | sizeof (sa)))) | ||
524 | { | 488 | { |
525 | LOG (GNUNET_ERROR_TYPE_ERROR, | 489 | LOG (GNUNET_ERROR_TYPE_ERROR, |
526 | _("Failed to create socket bound to `%s' for NAT test: %s\n"), | 490 | _ ("Failed to create socket bound to `%s' for NAT test: %s\n"), |
527 | GNUNET_a2s ((const struct sockaddr *) &sa, | 491 | GNUNET_a2s ((const struct sockaddr *) &sa, sizeof (sa)), |
528 | sizeof (sa)), | 492 | strerror (errno)); |
529 | STRERROR (errno)); | ||
530 | if (NULL != nh->lsock) | 493 | if (NULL != nh->lsock) |
531 | { | 494 | { |
532 | GNUNET_NETWORK_socket_close (nh->lsock); | 495 | GNUNET_NETWORK_socket_close (nh->lsock); |
533 | nh->lsock = NULL; | 496 | nh->lsock = NULL; |
534 | } | 497 | } |
535 | nh->status = GNUNET_NAT_ERROR_INTERNAL_NETWORK_ERROR; | 498 | nh->status = GNUNET_NAT_ERROR_INTERNAL_NETWORK_ERROR; |
536 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_fail, | 499 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_fail, nh); |
537 | nh); | ||
538 | return nh; | 500 | return nh; |
539 | } | 501 | } |
540 | if (IPPROTO_TCP == proto) | 502 | if (IPPROTO_TCP == proto) |
541 | { | 503 | { |
542 | GNUNET_break (GNUNET_OK == | 504 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_listen (nh->lsock, 5)); |
543 | GNUNET_NETWORK_socket_listen (nh->lsock, | 505 | nh->ltask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
544 | 5)); | 506 | nh->lsock, |
545 | nh->ltask = | 507 | &do_accept, |
546 | GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 508 | nh); |
547 | nh->lsock, | ||
548 | &do_accept, | ||
549 | nh); | ||
550 | } | 509 | } |
551 | else | 510 | else |
552 | { | 511 | { |
553 | nh->ltask = | 512 | nh->ltask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
554 | GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 513 | nh->lsock, |
555 | nh->lsock, | 514 | &do_udp_read, |
556 | &do_udp_read, | 515 | nh); |
557 | nh); | ||
558 | } | 516 | } |
559 | LOG (GNUNET_ERROR_TYPE_INFO, | 517 | LOG (GNUNET_ERROR_TYPE_INFO, |
560 | "NAT test listens on port %llu (%s)\n", | 518 | "NAT test listens on port %llu (%s)\n", |
561 | bnd_port, | 519 | bnd_port, |
562 | (IPPROTO_TCP == proto) ? "tcp" : "udp"); | 520 | (IPPROTO_TCP == proto) ? "tcp" : "udp"); |
563 | nh->nat = GNUNET_NAT_register (cfg, | 521 | nh->nat = GNUNET_NAT_register (cfg, |
564 | section_name, | 522 | section_name, |
565 | proto, | 523 | proto, |
@@ -572,7 +530,7 @@ GNUNET_NAT_AUTO_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
572 | if (NULL == nh->nat) | 530 | if (NULL == nh->nat) |
573 | { | 531 | { |
574 | LOG (GNUNET_ERROR_TYPE_INFO, | 532 | LOG (GNUNET_ERROR_TYPE_INFO, |
575 | _("NAT test failed to start NAT library\n")); | 533 | _ ("NAT test failed to start NAT library\n")); |
576 | if (NULL != nh->ltask) | 534 | if (NULL != nh->ltask) |
577 | { | 535 | { |
578 | GNUNET_SCHEDULER_cancel (nh->ltask); | 536 | GNUNET_SCHEDULER_cancel (nh->ltask); |
@@ -584,8 +542,7 @@ GNUNET_NAT_AUTO_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
584 | nh->lsock = NULL; | 542 | nh->lsock = NULL; |
585 | } | 543 | } |
586 | nh->status = GNUNET_NAT_ERROR_NAT_REGISTER_FAILED; | 544 | nh->status = GNUNET_NAT_ERROR_NAT_REGISTER_FAILED; |
587 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_fail, | 545 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_fail, nh); |
588 | nh); | ||
589 | return nh; | 546 | return nh; |
590 | } | 547 | } |
591 | } | 548 | } |
@@ -604,21 +561,16 @@ GNUNET_NAT_AUTO_test_stop (struct GNUNET_NAT_AUTO_Test *tst) | |||
604 | struct NatActivity *pos; | 561 | struct NatActivity *pos; |
605 | struct ClientActivity *cpos; | 562 | struct ClientActivity *cpos; |
606 | 563 | ||
607 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 564 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Stopping NAT test\n"); |
608 | "Stopping NAT test\n"); | ||
609 | while (NULL != (cpos = tst->ca_head)) | 565 | while (NULL != (cpos = tst->ca_head)) |
610 | { | 566 | { |
611 | GNUNET_CONTAINER_DLL_remove (tst->ca_head, | 567 | GNUNET_CONTAINER_DLL_remove (tst->ca_head, tst->ca_tail, cpos); |
612 | tst->ca_tail, | ||
613 | cpos); | ||
614 | GNUNET_MQ_destroy (cpos->mq); | 568 | GNUNET_MQ_destroy (cpos->mq); |
615 | GNUNET_free (cpos); | 569 | GNUNET_free (cpos); |
616 | } | 570 | } |
617 | while (NULL != (pos = tst->na_head)) | 571 | while (NULL != (pos = tst->na_head)) |
618 | { | 572 | { |
619 | GNUNET_CONTAINER_DLL_remove (tst->na_head, | 573 | GNUNET_CONTAINER_DLL_remove (tst->na_head, tst->na_tail, pos); |
620 | tst->na_tail, | ||
621 | pos); | ||
622 | GNUNET_SCHEDULER_cancel (pos->rtask); | 574 | GNUNET_SCHEDULER_cancel (pos->rtask); |
623 | GNUNET_NETWORK_socket_close (pos->sock); | 575 | GNUNET_NETWORK_socket_close (pos->sock); |
624 | GNUNET_free (pos); | 576 | GNUNET_free (pos); |