diff options
author | ng0 <ng0@n0.is> | 2019-09-06 23:01:06 +0000 |
---|---|---|
committer | ng0 <ng0@n0.is> | 2019-09-06 23:01:06 +0000 |
commit | d0051cb6683c712cce3473d6b667208e4f61b75a (patch) | |
tree | 99f642c0e8f8c888a2bb3daa5280325dd8707d6d /src/nat-auto/gnunet-nat-auto_legacy.c | |
parent | 6e599264ad13e8fc105493d74d7c11d46f8739ed (diff) | |
download | gnunet-d0051cb6683c712cce3473d6b667208e4f61b75a.tar.gz gnunet-d0051cb6683c712cce3473d6b667208e4f61b75a.zip |
plibc, commit 2
Diffstat (limited to 'src/nat-auto/gnunet-nat-auto_legacy.c')
-rw-r--r-- | src/nat-auto/gnunet-nat-auto_legacy.c | 208 |
1 files changed, 80 insertions, 128 deletions
diff --git a/src/nat-auto/gnunet-nat-auto_legacy.c b/src/nat-auto/gnunet-nat-auto_legacy.c index 4a24223fd..93b544343 100644 --- a/src/nat-auto/gnunet-nat-auto_legacy.c +++ b/src/nat-auto/gnunet-nat-auto_legacy.c | |||
@@ -28,9 +28,10 @@ | |||
28 | #include "gnunet_nat_lib.h" | 28 | #include "gnunet_nat_lib.h" |
29 | #include "nat.h" | 29 | #include "nat.h" |
30 | 30 | ||
31 | #define LOG(kind,...) GNUNET_log_from (kind, "nat", __VA_ARGS__) | 31 | #define LOG(kind, ...) GNUNET_log_from (kind, "nat", __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_Test *h; | 91 | struct GNUNET_NAT_Test *h; |
91 | |||
92 | }; | 92 | }; |
93 | 93 | ||
94 | 94 | ||
@@ -184,9 +184,7 @@ struct GNUNET_NAT_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_Test *h = cls; | 189 | struct GNUNET_NAT_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_Test *tst = ca->h; | 325 | struct GNUNET_NAT_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 | } |
@@ -379,15 +356,13 @@ addr_cb (void *cls, | |||
379 | if (addrlen != sizeof (struct sockaddr_in)) | 356 | if (addrlen != sizeof (struct sockaddr_in)) |
380 | { | 357 | { |
381 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 358 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
382 | "NAT test ignores IPv6 address `%s' returned from NAT library\n", | 359 | "NAT test ignores IPv6 address `%s' returned from NAT library\n", |
383 | GNUNET_a2s (addr, | 360 | GNUNET_a2s (addr, addrlen)); |
384 | addrlen)); | 361 | return; /* ignore IPv6 here */ |
385 | return; /* ignore IPv6 here */ | ||
386 | } | 362 | } |
387 | LOG (GNUNET_ERROR_TYPE_INFO, | 363 | LOG (GNUNET_ERROR_TYPE_INFO, |
388 | "Asking gnunet-nat-server to connect to `%s'\n", | 364 | "Asking gnunet-nat-server to connect to `%s'\n", |
389 | GNUNET_a2s (addr, | 365 | GNUNET_a2s (addr, addrlen)); |
390 | addrlen)); | ||
391 | 366 | ||
392 | ca = GNUNET_new (struct ClientActivity); | 367 | ca = GNUNET_new (struct ClientActivity); |
393 | ca->h = h; | 368 | ca->h = h; |
@@ -400,21 +375,17 @@ addr_cb (void *cls, | |||
400 | { | 375 | { |
401 | GNUNET_free (ca); | 376 | GNUNET_free (ca); |
402 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 377 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
403 | _("Failed to connect to `gnunet-nat-server'\n")); | 378 | _ ("Failed to connect to `gnunet-nat-server'\n")); |
404 | return; | 379 | return; |
405 | } | 380 | } |
406 | GNUNET_CONTAINER_DLL_insert (h->ca_head, | 381 | GNUNET_CONTAINER_DLL_insert (h->ca_head, h->ca_tail, ca); |
407 | h->ca_tail, | ||
408 | ca); | ||
409 | sa = (const struct sockaddr_in *) addr; | 382 | sa = (const struct sockaddr_in *) addr; |
410 | env = GNUNET_MQ_msg (msg, | 383 | env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_NAT_TEST); |
411 | GNUNET_MESSAGE_TYPE_NAT_TEST); | ||
412 | msg->dst_ipv4 = sa->sin_addr.s_addr; | 384 | msg->dst_ipv4 = sa->sin_addr.s_addr; |
413 | msg->dport = sa->sin_port; | 385 | msg->dport = sa->sin_port; |
414 | msg->data = h->data; | 386 | msg->data = h->data; |
415 | msg->is_tcp = htonl ((uint32_t) h->is_tcp); | 387 | msg->is_tcp = htonl ((uint32_t) h->is_tcp); |
416 | GNUNET_MQ_send (ca->mq, | 388 | GNUNET_MQ_send (ca->mq, env); |
417 | env); | ||
418 | } | 389 | } |
419 | 390 | ||
420 | 391 | ||
@@ -434,8 +405,8 @@ do_timeout (void *cls) | |||
434 | nh->ttask = NULL; | 405 | nh->ttask = NULL; |
435 | nh->report (nh->report_cls, | 406 | nh->report (nh->report_cls, |
436 | (GNUNET_NAT_ERROR_SUCCESS == nh->status) | 407 | (GNUNET_NAT_ERROR_SUCCESS == nh->status) |
437 | ? GNUNET_NAT_ERROR_TIMEOUT | 408 | ? GNUNET_NAT_ERROR_TIMEOUT |
438 | : nh->status); | 409 | : nh->status); |
439 | } | 410 | } |
440 | 411 | ||
441 | 412 | ||
@@ -465,12 +436,8 @@ GNUNET_NAT_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
465 | { | 436 | { |
466 | struct GNUNET_NAT_Test *nh; | 437 | struct GNUNET_NAT_Test *nh; |
467 | struct sockaddr_in sa; | 438 | struct sockaddr_in sa; |
468 | const struct sockaddr *addrs[] = { | 439 | const struct sockaddr *addrs[] = {(const struct sockaddr *) &sa}; |
469 | (const struct sockaddr *) &sa | 440 | const socklen_t addrlens[] = {sizeof (sa)}; |
470 | }; | ||
471 | const socklen_t addrlens[] = { | ||
472 | sizeof (sa) | ||
473 | }; | ||
474 | 441 | ||
475 | memset (&sa, 0, sizeof (sa)); | 442 | memset (&sa, 0, sizeof (sa)); |
476 | sa.sin_family = AF_INET; | 443 | sa.sin_family = AF_INET; |
@@ -489,69 +456,62 @@ GNUNET_NAT_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
489 | nh->status = GNUNET_NAT_ERROR_SUCCESS; | 456 | nh->status = GNUNET_NAT_ERROR_SUCCESS; |
490 | if (0 == bnd_port) | 457 | if (0 == bnd_port) |
491 | { | 458 | { |
492 | nh->nat | 459 | nh->nat = GNUNET_NAT_register (cfg, |
493 | = GNUNET_NAT_register (cfg, | 460 | is_tcp, |
494 | is_tcp, | 461 | 0, |
495 | 0, | 462 | 0, |
496 | 0, | 463 | NULL, |
497 | NULL, | 464 | NULL, |
498 | NULL, | 465 | &addr_cb, |
499 | &addr_cb, | 466 | &reversal_cb, |
500 | &reversal_cb, | 467 | nh, |
501 | nh, | 468 | NULL); |
502 | NULL); | ||
503 | } | 469 | } |
504 | else | 470 | else |
505 | { | 471 | { |
506 | nh->lsock = | 472 | nh->lsock = |
507 | GNUNET_NETWORK_socket_create (AF_INET, | 473 | GNUNET_NETWORK_socket_create (AF_INET, |
508 | (is_tcp == | 474 | (is_tcp == GNUNET_YES) ? SOCK_STREAM |
509 | GNUNET_YES) ? SOCK_STREAM : SOCK_DGRAM, | 475 | : SOCK_DGRAM, |
510 | 0); | 476 | 0); |
511 | if ((nh->lsock == NULL) || | 477 | if ((nh->lsock == NULL) || |
512 | (GNUNET_OK != | 478 | (GNUNET_OK != GNUNET_NETWORK_socket_bind (nh->lsock, |
513 | GNUNET_NETWORK_socket_bind (nh->lsock, | 479 | (const struct sockaddr *) &sa, |
514 | (const struct sockaddr *) &sa, | 480 | sizeof (sa)))) |
515 | sizeof (sa)))) | ||
516 | { | 481 | { |
517 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 482 | GNUNET_log ( |
518 | _("Failed to create listen socket bound to `%s' for NAT test: %s\n"), | 483 | GNUNET_ERROR_TYPE_ERROR, |
519 | GNUNET_a2s ((const struct sockaddr *) &sa, | 484 | _ ("Failed to create listen socket bound to `%s' for NAT test: %s\n"), |
520 | sizeof (sa)), | 485 | GNUNET_a2s ((const struct sockaddr *) &sa, sizeof (sa)), |
521 | STRERROR (errno)); | 486 | strerror (errno)); |
522 | if (NULL != nh->lsock) | 487 | if (NULL != nh->lsock) |
523 | { | 488 | { |
524 | GNUNET_NETWORK_socket_close (nh->lsock); | 489 | GNUNET_NETWORK_socket_close (nh->lsock); |
525 | nh->lsock = NULL; | 490 | nh->lsock = NULL; |
526 | } | 491 | } |
527 | nh->status = GNUNET_NAT_ERROR_INTERNAL_NETWORK_ERROR; | 492 | nh->status = GNUNET_NAT_ERROR_INTERNAL_NETWORK_ERROR; |
528 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_timeout, | 493 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_timeout, nh); |
529 | nh); | ||
530 | return nh; | 494 | return nh; |
531 | } | 495 | } |
532 | if (GNUNET_YES == is_tcp) | 496 | if (GNUNET_YES == is_tcp) |
533 | { | 497 | { |
534 | GNUNET_break (GNUNET_OK == | 498 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_listen (nh->lsock, 5)); |
535 | GNUNET_NETWORK_socket_listen (nh->lsock, | 499 | nh->ltask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
536 | 5)); | 500 | nh->lsock, |
537 | nh->ltask = | 501 | &do_accept, |
538 | GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 502 | nh); |
539 | nh->lsock, | ||
540 | &do_accept, | ||
541 | nh); | ||
542 | } | 503 | } |
543 | else | 504 | else |
544 | { | 505 | { |
545 | nh->ltask = | 506 | nh->ltask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
546 | GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 507 | nh->lsock, |
547 | nh->lsock, | 508 | &do_udp_read, |
548 | &do_udp_read, | 509 | nh); |
549 | nh); | ||
550 | } | 510 | } |
551 | LOG (GNUNET_ERROR_TYPE_INFO, | 511 | LOG (GNUNET_ERROR_TYPE_INFO, |
552 | "NAT test listens on port %u (%s)\n", | 512 | "NAT test listens on port %u (%s)\n", |
553 | bnd_port, | 513 | bnd_port, |
554 | (GNUNET_YES == is_tcp) ? "tcp" : "udp"); | 514 | (GNUNET_YES == is_tcp) ? "tcp" : "udp"); |
555 | nh->nat = GNUNET_NAT_register (cfg, | 515 | nh->nat = GNUNET_NAT_register (cfg, |
556 | is_tcp, | 516 | is_tcp, |
557 | adv_port, | 517 | adv_port, |
@@ -565,7 +525,7 @@ GNUNET_NAT_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
565 | if (NULL == nh->nat) | 525 | if (NULL == nh->nat) |
566 | { | 526 | { |
567 | LOG (GNUNET_ERROR_TYPE_INFO, | 527 | LOG (GNUNET_ERROR_TYPE_INFO, |
568 | _("NAT test failed to start NAT library\n")); | 528 | _ ("NAT test failed to start NAT library\n")); |
569 | if (NULL != nh->ltask) | 529 | if (NULL != nh->ltask) |
570 | { | 530 | { |
571 | GNUNET_SCHEDULER_cancel (nh->ltask); | 531 | GNUNET_SCHEDULER_cancel (nh->ltask); |
@@ -577,14 +537,11 @@ GNUNET_NAT_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
577 | nh->lsock = NULL; | 537 | nh->lsock = NULL; |
578 | } | 538 | } |
579 | nh->status = GNUNET_NAT_ERROR_NAT_REGISTER_FAILED; | 539 | nh->status = GNUNET_NAT_ERROR_NAT_REGISTER_FAILED; |
580 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_timeout, | 540 | nh->ttask = GNUNET_SCHEDULER_add_now (&do_timeout, nh); |
581 | nh); | ||
582 | return nh; | 541 | return nh; |
583 | } | 542 | } |
584 | } | 543 | } |
585 | nh->ttask = GNUNET_SCHEDULER_add_delayed (timeout, | 544 | nh->ttask = GNUNET_SCHEDULER_add_delayed (timeout, &do_timeout, nh); |
586 | &do_timeout, | ||
587 | nh); | ||
588 | return nh; | 545 | return nh; |
589 | } | 546 | } |
590 | 547 | ||
@@ -600,21 +557,16 @@ GNUNET_NAT_test_stop (struct GNUNET_NAT_Test *tst) | |||
600 | struct NatActivity *pos; | 557 | struct NatActivity *pos; |
601 | struct ClientActivity *cpos; | 558 | struct ClientActivity *cpos; |
602 | 559 | ||
603 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 560 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Stopping NAT test\n"); |
604 | "Stopping NAT test\n"); | ||
605 | while (NULL != (cpos = tst->ca_head)) | 561 | while (NULL != (cpos = tst->ca_head)) |
606 | { | 562 | { |
607 | GNUNET_CONTAINER_DLL_remove (tst->ca_head, | 563 | GNUNET_CONTAINER_DLL_remove (tst->ca_head, tst->ca_tail, cpos); |
608 | tst->ca_tail, | ||
609 | cpos); | ||
610 | GNUNET_MQ_destroy (cpos->mq); | 564 | GNUNET_MQ_destroy (cpos->mq); |
611 | GNUNET_free (cpos); | 565 | GNUNET_free (cpos); |
612 | } | 566 | } |
613 | while (NULL != (pos = tst->na_head)) | 567 | while (NULL != (pos = tst->na_head)) |
614 | { | 568 | { |
615 | GNUNET_CONTAINER_DLL_remove (tst->na_head, | 569 | GNUNET_CONTAINER_DLL_remove (tst->na_head, tst->na_tail, pos); |
616 | tst->na_tail, | ||
617 | pos); | ||
618 | GNUNET_SCHEDULER_cancel (pos->rtask); | 570 | GNUNET_SCHEDULER_cancel (pos->rtask); |
619 | GNUNET_NETWORK_socket_close (pos->sock); | 571 | GNUNET_NETWORK_socket_close (pos->sock); |
620 | GNUNET_free (pos); | 572 | GNUNET_free (pos); |