diff options
Diffstat (limited to 'src/util/dnsstub.c')
-rw-r--r-- | src/util/dnsstub.c | 168 |
1 files changed, 63 insertions, 105 deletions
diff --git a/src/util/dnsstub.c b/src/util/dnsstub.c index a16a9a7dd..aa0c2191a 100644 --- a/src/util/dnsstub.c +++ b/src/util/dnsstub.c | |||
@@ -28,7 +28,8 @@ | |||
28 | /** | 28 | /** |
29 | * Timeout for retrying DNS queries. | 29 | * Timeout for retrying DNS queries. |
30 | */ | 30 | */ |
31 | #define DNS_RETRANSMIT_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 250) | 31 | #define DNS_RETRANSMIT_DELAY \ |
32 | GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 250) | ||
32 | 33 | ||
33 | 34 | ||
34 | /** | 35 | /** |
@@ -92,7 +93,6 @@ struct GNUNET_DNSSTUB_RequestSocket | |||
92 | * Number of bytes in @a request. | 93 | * Number of bytes in @a request. |
93 | */ | 94 | */ |
94 | size_t request_len; | 95 | size_t request_len; |
95 | |||
96 | }; | 96 | }; |
97 | 97 | ||
98 | 98 | ||
@@ -149,7 +149,6 @@ struct GNUNET_DNSSTUB_Context | |||
149 | * Length of @e sockets array. | 149 | * Length of @e sockets array. |
150 | */ | 150 | */ |
151 | unsigned int num_sockets; | 151 | unsigned int num_sockets; |
152 | |||
153 | }; | 152 | }; |
154 | 153 | ||
155 | 154 | ||
@@ -223,13 +222,11 @@ open_socket (int af) | |||
223 | return NULL; | 222 | return NULL; |
224 | } | 223 | } |
225 | sa->sa_family = af; | 224 | sa->sa_family = af; |
226 | if (GNUNET_OK != GNUNET_NETWORK_socket_bind (ret, | 225 | if (GNUNET_OK != GNUNET_NETWORK_socket_bind (ret, sa, alen)) |
227 | sa, | ||
228 | alen)) | ||
229 | { | 226 | { |
230 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 227 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
231 | _("Could not bind to any port: %s\n"), | 228 | _ ("Could not bind to any port: %s\n"), |
232 | STRERROR (errno)); | 229 | strerror (errno)); |
233 | GNUNET_NETWORK_socket_close (ret); | 230 | GNUNET_NETWORK_socket_close (ret); |
234 | return NULL; | 231 | return NULL; |
235 | } | 232 | } |
@@ -249,7 +246,7 @@ get_request_socket (struct GNUNET_DNSSTUB_Context *ctx) | |||
249 | { | 246 | { |
250 | struct GNUNET_DNSSTUB_RequestSocket *rs; | 247 | struct GNUNET_DNSSTUB_RequestSocket *rs; |
251 | 248 | ||
252 | for (unsigned int i=0;i<256;i++) | 249 | for (unsigned int i = 0; i < 256; i++) |
253 | { | 250 | { |
254 | rs = &ctx->sockets[GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, | 251 | rs = &ctx->sockets[GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, |
255 | ctx->num_sockets)]; | 252 | ctx->num_sockets)]; |
@@ -259,9 +256,7 @@ get_request_socket (struct GNUNET_DNSSTUB_Context *ctx) | |||
259 | if (NULL != rs->rc) | 256 | if (NULL != rs->rc) |
260 | { | 257 | { |
261 | /* signal "failure" */ | 258 | /* signal "failure" */ |
262 | rs->rc (rs->rc_cls, | 259 | rs->rc (rs->rc_cls, NULL, 0); |
263 | NULL, | ||
264 | 0); | ||
265 | rs->rc = NULL; | 260 | rs->rc = NULL; |
266 | } | 261 | } |
267 | if (NULL != rs->read_task) | 262 | if (NULL != rs->read_task) |
@@ -294,16 +289,14 @@ get_request_socket (struct GNUNET_DNSSTUB_Context *ctx) | |||
294 | */ | 289 | */ |
295 | static int | 290 | static int |
296 | do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs, | 291 | do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs, |
297 | struct GNUNET_NETWORK_Handle *dnsout) | 292 | struct GNUNET_NETWORK_Handle *dnsout) |
298 | { | 293 | { |
299 | struct GNUNET_DNSSTUB_Context *ctx = rs->ctx; | 294 | struct GNUNET_DNSSTUB_Context *ctx = rs->ctx; |
300 | ssize_t r; | 295 | ssize_t r; |
301 | int len; | 296 | int len; |
302 | 297 | ||
303 | #ifndef MINGW | 298 | #ifndef MINGW |
304 | if (0 != ioctl (GNUNET_NETWORK_get_fd (dnsout), | 299 | if (0 != ioctl (GNUNET_NETWORK_get_fd (dnsout), FIONREAD, &len)) |
305 | FIONREAD, | ||
306 | &len)) | ||
307 | { | 300 | { |
308 | /* conservative choice: */ | 301 | /* conservative choice: */ |
309 | len = UINT16_MAX; | 302 | len = UINT16_MAX; |
@@ -312,9 +305,7 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs, | |||
312 | /* port the code above? */ | 305 | /* port the code above? */ |
313 | len = UINT16_MAX; | 306 | len = UINT16_MAX; |
314 | #endif | 307 | #endif |
315 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 308 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving %d byte DNS reply\n", len); |
316 | "Receiving %d byte DNS reply\n", | ||
317 | len); | ||
318 | { | 309 | { |
319 | unsigned char buf[len] GNUNET_ALIGN; | 310 | unsigned char buf[len] GNUNET_ALIGN; |
320 | int found; | 311 | int found; |
@@ -323,18 +314,15 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs, | |||
323 | struct GNUNET_TUN_DnsHeader *dns; | 314 | struct GNUNET_TUN_DnsHeader *dns; |
324 | 315 | ||
325 | addrlen = sizeof (addr); | 316 | addrlen = sizeof (addr); |
326 | memset (&addr, | 317 | memset (&addr, 0, sizeof (addr)); |
327 | 0, | ||
328 | sizeof (addr)); | ||
329 | r = GNUNET_NETWORK_socket_recvfrom (dnsout, | 318 | r = GNUNET_NETWORK_socket_recvfrom (dnsout, |
330 | buf, | 319 | buf, |
331 | sizeof (buf), | 320 | sizeof (buf), |
332 | (struct sockaddr*) &addr, | 321 | (struct sockaddr *) &addr, |
333 | &addrlen); | 322 | &addrlen); |
334 | if (-1 == r) | 323 | if (-1 == r) |
335 | { | 324 | { |
336 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, | 325 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "recvfrom"); |
337 | "recvfrom"); | ||
338 | GNUNET_NETWORK_socket_close (dnsout); | 326 | GNUNET_NETWORK_socket_close (dnsout); |
339 | return GNUNET_SYSERR; | 327 | return GNUNET_SYSERR; |
340 | } | 328 | } |
@@ -343,8 +331,7 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs, | |||
343 | { | 331 | { |
344 | if (0 == memcmp (&addr, | 332 | if (0 == memcmp (&addr, |
345 | &ds->ss, | 333 | &ds->ss, |
346 | GNUNET_MIN (sizeof (struct sockaddr_storage), | 334 | GNUNET_MIN (sizeof (struct sockaddr_storage), addrlen))) |
347 | addrlen))) | ||
348 | { | 335 | { |
349 | found = GNUNET_YES; | 336 | found = GNUNET_YES; |
350 | break; | 337 | break; |
@@ -353,26 +340,24 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs, | |||
353 | if (GNUNET_NO == found) | 340 | if (GNUNET_NO == found) |
354 | { | 341 | { |
355 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 342 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
356 | "Received DNS response from server we never asked (ignored)"); | 343 | "Received DNS response from server we never asked (ignored)"); |
357 | return GNUNET_NO; | 344 | return GNUNET_NO; |
358 | } | 345 | } |
359 | if (sizeof (struct GNUNET_TUN_DnsHeader) > (size_t) r) | 346 | if (sizeof (struct GNUNET_TUN_DnsHeader) > (size_t) r) |
360 | { | 347 | { |
361 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 348 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
362 | _("Received DNS response that is too small (%u bytes)"), | 349 | _ ("Received DNS response that is too small (%u bytes)"), |
363 | (unsigned int) r); | 350 | (unsigned int) r); |
364 | return GNUNET_NO; | 351 | return GNUNET_NO; |
365 | } | 352 | } |
366 | dns = (struct GNUNET_TUN_DnsHeader *) buf; | 353 | dns = (struct GNUNET_TUN_DnsHeader *) buf; |
367 | if (NULL == rs->rc) | 354 | if (NULL == rs->rc) |
368 | { | 355 | { |
369 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 356 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
370 | "Request timeout or cancelled; ignoring reply\n"); | 357 | "Request timeout or cancelled; ignoring reply\n"); |
371 | return GNUNET_NO; | 358 | return GNUNET_NO; |
372 | } | 359 | } |
373 | rs->rc (rs->rc_cls, | 360 | rs->rc (rs->rc_cls, dns, r); |
374 | dns, | ||
375 | r); | ||
376 | } | 361 | } |
377 | return GNUNET_OK; | 362 | return GNUNET_OK; |
378 | } | 363 | } |
@@ -401,17 +386,16 @@ schedule_read (struct GNUNET_DNSSTUB_RequestSocket *rs) | |||
401 | GNUNET_SCHEDULER_cancel (rs->read_task); | 386 | GNUNET_SCHEDULER_cancel (rs->read_task); |
402 | rset = GNUNET_NETWORK_fdset_create (); | 387 | rset = GNUNET_NETWORK_fdset_create (); |
403 | if (NULL != rs->dnsout4) | 388 | if (NULL != rs->dnsout4) |
404 | GNUNET_NETWORK_fdset_set (rset, | 389 | GNUNET_NETWORK_fdset_set (rset, rs->dnsout4); |
405 | rs->dnsout4); | ||
406 | if (NULL != rs->dnsout6) | 390 | if (NULL != rs->dnsout6) |
407 | GNUNET_NETWORK_fdset_set (rset, | 391 | GNUNET_NETWORK_fdset_set (rset, rs->dnsout6); |
408 | rs->dnsout6); | 392 | rs->read_task = |
409 | rs->read_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, | 393 | GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, |
410 | GNUNET_TIME_UNIT_FOREVER_REL, | 394 | GNUNET_TIME_UNIT_FOREVER_REL, |
411 | rset, | 395 | rset, |
412 | NULL, | 396 | NULL, |
413 | &read_response, | 397 | &read_response, |
414 | rs); | 398 | rs); |
415 | GNUNET_NETWORK_fdset_destroy (rset); | 399 | GNUNET_NETWORK_fdset_destroy (rset); |
416 | } | 400 | } |
417 | 401 | ||
@@ -430,19 +414,13 @@ read_response (void *cls) | |||
430 | rs->read_task = NULL; | 414 | rs->read_task = NULL; |
431 | tc = GNUNET_SCHEDULER_get_task_context (); | 415 | tc = GNUNET_SCHEDULER_get_task_context (); |
432 | /* read and process ready sockets */ | 416 | /* read and process ready sockets */ |
433 | if ( (NULL != rs->dnsout4) && | 417 | if ((NULL != rs->dnsout4) && |
434 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, | 418 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, rs->dnsout4)) && |
435 | rs->dnsout4)) && | 419 | (GNUNET_SYSERR == do_dns_read (rs, rs->dnsout4))) |
436 | (GNUNET_SYSERR == | ||
437 | do_dns_read (rs, | ||
438 | rs->dnsout4)) ) | ||
439 | rs->dnsout4 = NULL; | 420 | rs->dnsout4 = NULL; |
440 | if ( (NULL != rs->dnsout6) && | 421 | if ((NULL != rs->dnsout6) && |
441 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, | 422 | (GNUNET_NETWORK_fdset_isset (tc->read_ready, rs->dnsout6)) && |
442 | rs->dnsout6)) && | 423 | (GNUNET_SYSERR == do_dns_read (rs, rs->dnsout6))) |
443 | (GNUNET_SYSERR == | ||
444 | do_dns_read (rs, | ||
445 | rs->dnsout6)) ) | ||
446 | rs->dnsout6 = NULL; | 424 | rs->dnsout6 = NULL; |
447 | /* re-schedule read task */ | 425 | /* re-schedule read task */ |
448 | schedule_read (rs); | 426 | schedule_read (rs); |
@@ -465,9 +443,8 @@ transmit_query (void *cls) | |||
465 | struct DnsServer *ds; | 443 | struct DnsServer *ds; |
466 | struct GNUNET_NETWORK_Handle *dnsout; | 444 | struct GNUNET_NETWORK_Handle *dnsout; |
467 | 445 | ||
468 | rs->retry_task = GNUNET_SCHEDULER_add_delayed (ctx->retry_freq, | 446 | rs->retry_task = |
469 | &transmit_query, | 447 | GNUNET_SCHEDULER_add_delayed (ctx->retry_freq, &transmit_query, rs); |
470 | rs); | ||
471 | ds = rs->ds_pos; | 448 | ds = rs->ds_pos; |
472 | rs->ds_pos = ds->next; | 449 | rs->ds_pos = ds->next; |
473 | if (NULL == rs->ds_pos) | 450 | if (NULL == rs->ds_pos) |
@@ -499,22 +476,19 @@ transmit_query (void *cls) | |||
499 | "Unable to use configure DNS server, skipping\n"); | 476 | "Unable to use configure DNS server, skipping\n"); |
500 | return; | 477 | return; |
501 | } | 478 | } |
502 | if (GNUNET_SYSERR == | 479 | if (GNUNET_SYSERR == GNUNET_NETWORK_socket_sendto (dnsout, |
503 | GNUNET_NETWORK_socket_sendto (dnsout, | 480 | rs->request, |
504 | rs->request, | 481 | rs->request_len, |
505 | rs->request_len, | 482 | sa, |
506 | sa, | 483 | salen)) |
507 | salen)) | ||
508 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 484 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
509 | _("Failed to send DNS request to %s: %s\n"), | 485 | _ ("Failed to send DNS request to %s: %s\n"), |
510 | GNUNET_a2s (sa, | 486 | GNUNET_a2s (sa, salen), |
511 | salen), | 487 | strerror (errno)); |
512 | STRERROR (errno)); | ||
513 | else | 488 | else |
514 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 489 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
515 | _("Sent DNS request to %s\n"), | 490 | _ ("Sent DNS request to %s\n"), |
516 | GNUNET_a2s (sa, | 491 | GNUNET_a2s (sa, salen)); |
517 | salen)); | ||
518 | schedule_read (rs); | 492 | schedule_read (rs); |
519 | } | 493 | } |
520 | 494 | ||
@@ -531,10 +505,10 @@ transmit_query (void *cls) | |||
531 | */ | 505 | */ |
532 | struct GNUNET_DNSSTUB_RequestSocket * | 506 | struct GNUNET_DNSSTUB_RequestSocket * |
533 | GNUNET_DNSSTUB_resolve (struct GNUNET_DNSSTUB_Context *ctx, | 507 | GNUNET_DNSSTUB_resolve (struct GNUNET_DNSSTUB_Context *ctx, |
534 | const void *request, | 508 | const void *request, |
535 | size_t request_len, | 509 | size_t request_len, |
536 | GNUNET_DNSSTUB_ResultCallback rc, | 510 | GNUNET_DNSSTUB_ResultCallback rc, |
537 | void *rc_cls) | 511 | void *rc_cls) |
538 | { | 512 | { |
539 | struct GNUNET_DNSSTUB_RequestSocket *rs; | 513 | struct GNUNET_DNSSTUB_RequestSocket *rs; |
540 | 514 | ||
@@ -553,11 +527,9 @@ GNUNET_DNSSTUB_resolve (struct GNUNET_DNSSTUB_Context *ctx, | |||
553 | rs->ds_pos = ctx->dns_head; | 527 | rs->ds_pos = ctx->dns_head; |
554 | rs->rc = rc; | 528 | rs->rc = rc; |
555 | rs->rc_cls = rc_cls; | 529 | rs->rc_cls = rc_cls; |
556 | rs->request = GNUNET_memdup (request, | 530 | rs->request = GNUNET_memdup (request, request_len); |
557 | request_len); | ||
558 | rs->request_len = request_len; | 531 | rs->request_len = request_len; |
559 | rs->retry_task = GNUNET_SCHEDULER_add_now (&transmit_query, | 532 | rs->retry_task = GNUNET_SCHEDULER_add_now (&transmit_query, rs); |
560 | rs); | ||
561 | return rs; | 533 | return rs; |
562 | } | 534 | } |
563 | 535 | ||
@@ -603,8 +575,8 @@ GNUNET_DNSSTUB_start (unsigned int num_sockets) | |||
603 | } | 575 | } |
604 | ctx = GNUNET_new (struct GNUNET_DNSSTUB_Context); | 576 | ctx = GNUNET_new (struct GNUNET_DNSSTUB_Context); |
605 | ctx->num_sockets = num_sockets; | 577 | ctx->num_sockets = num_sockets; |
606 | ctx->sockets = GNUNET_new_array (num_sockets, | 578 | ctx->sockets = |
607 | struct GNUNET_DNSSTUB_RequestSocket); | 579 | GNUNET_new_array (num_sockets, struct GNUNET_DNSSTUB_RequestSocket); |
608 | ctx->retry_freq = DNS_RETRANSMIT_DELAY; | 580 | ctx->retry_freq = DNS_RETRANSMIT_DELAY; |
609 | return ctx; | 581 | return ctx; |
610 | } | 582 | } |
@@ -627,9 +599,7 @@ GNUNET_DNSSTUB_add_dns_ip (struct GNUNET_DNSSTUB_Context *ctx, | |||
627 | struct in6_addr i6; | 599 | struct in6_addr i6; |
628 | 600 | ||
629 | ds = GNUNET_new (struct DnsServer); | 601 | ds = GNUNET_new (struct DnsServer); |
630 | if (1 == inet_pton (AF_INET, | 602 | if (1 == inet_pton (AF_INET, dns_ip, &i4)) |
631 | dns_ip, | ||
632 | &i4)) | ||
633 | { | 603 | { |
634 | struct sockaddr_in *s4 = (struct sockaddr_in *) &ds->ss; | 604 | struct sockaddr_in *s4 = (struct sockaddr_in *) &ds->ss; |
635 | 605 | ||
@@ -640,9 +610,7 @@ GNUNET_DNSSTUB_add_dns_ip (struct GNUNET_DNSSTUB_Context *ctx, | |||
640 | s4->sin_len = (u_char) sizeof (struct sockaddr_in); | 610 | s4->sin_len = (u_char) sizeof (struct sockaddr_in); |
641 | #endif | 611 | #endif |
642 | } | 612 | } |
643 | else if (1 == inet_pton (AF_INET6, | 613 | else if (1 == inet_pton (AF_INET6, dns_ip, &i6)) |
644 | dns_ip, | ||
645 | &i6)) | ||
646 | { | 614 | { |
647 | struct sockaddr_in6 *s6 = (struct sockaddr_in6 *) &ds->ss; | 615 | struct sockaddr_in6 *s6 = (struct sockaddr_in6 *) &ds->ss; |
648 | 616 | ||
@@ -661,9 +629,7 @@ GNUNET_DNSSTUB_add_dns_ip (struct GNUNET_DNSSTUB_Context *ctx, | |||
661 | GNUNET_free (ds); | 629 | GNUNET_free (ds); |
662 | return GNUNET_SYSERR; | 630 | return GNUNET_SYSERR; |
663 | } | 631 | } |
664 | GNUNET_CONTAINER_DLL_insert (ctx->dns_head, | 632 | GNUNET_CONTAINER_DLL_insert (ctx->dns_head, ctx->dns_tail, ds); |
665 | ctx->dns_tail, | ||
666 | ds); | ||
667 | return GNUNET_OK; | 633 | return GNUNET_OK; |
668 | } | 634 | } |
669 | 635 | ||
@@ -686,23 +652,17 @@ GNUNET_DNSSTUB_add_dns_sa (struct GNUNET_DNSSTUB_Context *ctx, | |||
686 | switch (sa->sa_family) | 652 | switch (sa->sa_family) |
687 | { | 653 | { |
688 | case AF_INET: | 654 | case AF_INET: |
689 | GNUNET_memcpy (&ds->ss, | 655 | GNUNET_memcpy (&ds->ss, sa, sizeof (struct sockaddr_in)); |
690 | sa, | ||
691 | sizeof (struct sockaddr_in)); | ||
692 | break; | 656 | break; |
693 | case AF_INET6: | 657 | case AF_INET6: |
694 | GNUNET_memcpy (&ds->ss, | 658 | GNUNET_memcpy (&ds->ss, sa, sizeof (struct sockaddr_in6)); |
695 | sa, | ||
696 | sizeof (struct sockaddr_in6)); | ||
697 | break; | 659 | break; |
698 | default: | 660 | default: |
699 | GNUNET_break (0); | 661 | GNUNET_break (0); |
700 | GNUNET_free (ds); | 662 | GNUNET_free (ds); |
701 | return GNUNET_SYSERR; | 663 | return GNUNET_SYSERR; |
702 | } | 664 | } |
703 | GNUNET_CONTAINER_DLL_insert (ctx->dns_head, | 665 | GNUNET_CONTAINER_DLL_insert (ctx->dns_head, ctx->dns_tail, ds); |
704 | ctx->dns_tail, | ||
705 | ds); | ||
706 | return GNUNET_OK; | 666 | return GNUNET_OK; |
707 | } | 667 | } |
708 | 668 | ||
@@ -734,12 +694,10 @@ GNUNET_DNSSTUB_stop (struct GNUNET_DNSSTUB_Context *ctx) | |||
734 | 694 | ||
735 | while (NULL != (ds = ctx->dns_head)) | 695 | while (NULL != (ds = ctx->dns_head)) |
736 | { | 696 | { |
737 | GNUNET_CONTAINER_DLL_remove (ctx->dns_head, | 697 | GNUNET_CONTAINER_DLL_remove (ctx->dns_head, ctx->dns_tail, ds); |
738 | ctx->dns_tail, | ||
739 | ds); | ||
740 | GNUNET_free (ds); | 698 | GNUNET_free (ds); |
741 | } | 699 | } |
742 | for (unsigned int i=0;i<ctx->num_sockets;i++) | 700 | for (unsigned int i = 0; i < ctx->num_sockets; i++) |
743 | cleanup_rs (&ctx->sockets[i]); | 701 | cleanup_rs (&ctx->sockets[i]); |
744 | GNUNET_free (ctx->sockets); | 702 | GNUNET_free (ctx->sockets); |
745 | GNUNET_free (ctx); | 703 | GNUNET_free (ctx); |