aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2012-09-18 15:37:25 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2012-09-18 15:37:25 +0000
commitdb93dcf5dd2c9ec06a7375ed250f842c62bc8905 (patch)
tree43388bb13e5aeb75c4e69b5e2a7a4aaa313ea8a2 /src
parent5da16be99aee3c7afa8335f71db35f8508ffe6f6 (diff)
downloadgnunet-db93dcf5dd2c9ec06a7375ed250f842c62bc8905.tar.gz
gnunet-db93dcf5dd2c9ec06a7375ed250f842c62bc8905.zip
-fixes
Diffstat (limited to 'src')
-rw-r--r--src/gns/gns_api.c158
-rw-r--r--src/gns/test_gns_cname_lookup.c12
-rw-r--r--src/gns/test_gns_dht_delegated_lookup.c13
-rw-r--r--src/gns/test_gns_max_queries.c17
-rw-r--r--src/gns/test_gns_ns_lookup.c6
-rw-r--r--src/gns/test_gns_pseu_shorten.c17
-rw-r--r--src/gns/test_gns_revocation.c14
-rw-r--r--src/gns/test_gns_simple_delegated_lookup.c13
-rw-r--r--src/gns/test_gns_simple_get_authority.c12
-rw-r--r--src/gns/test_gns_simple_lookup.c15
-rw-r--r--src/gns/test_gns_simple_mx_lookup.c15
-rw-r--r--src/gns/test_gns_simple_shorten.c13
-rw-r--r--src/gns/test_gns_simple_srv_lookup.c13
-rw-r--r--src/gns/test_gns_simple_zkey_lookup.c15
14 files changed, 198 insertions, 135 deletions
diff --git a/src/gns/gns_api.c b/src/gns/gns_api.c
index 670b036a5..427e3e375 100644
--- a/src/gns/gns_api.c
+++ b/src/gns/gns_api.c
@@ -159,6 +159,11 @@ struct PendingMessage
159 */ 159 */
160 size_t size; 160 size_t size;
161 161
162 /**
163 * This message has been transmitted
164 */
165 unsigned int transmitted;
166
162}; 167};
163 168
164 169
@@ -324,14 +329,18 @@ process_message (void *cls, const struct GNUNET_MessageHeader *msg);
324static void 329static void
325process_pending_messages (struct GNUNET_GNS_Handle *handle) 330process_pending_messages (struct GNUNET_GNS_Handle *handle)
326{ 331{
327 struct PendingMessage *p; 332 struct PendingMessage *p = handle->pending_head;
328 333
329 if (NULL == handle->client) 334 if (NULL == handle->client)
330 return; /* wait for reconnect */ 335 return; /* wait for reconnect */
331 if (NULL != handle->th) 336 if (NULL != handle->th)
332 return; /* transmission request already pending */ 337 return; /* transmission request already pending */
333 if (NULL == (p = handle->pending_head)) 338
334 return; /* no messages pending */ 339 while ((NULL != p) && (p->transmitted == GNUNET_YES))
340 p = p->next;
341 if (NULL == p)
342 return; /* no messages pending */
343
335 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 344 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
336 "Trying to transmit %u bytes\n", 345 "Trying to transmit %u bytes\n",
337 (unsigned int) p->size); 346 (unsigned int) p->size);
@@ -375,14 +384,13 @@ transmit_pending (void *cls, size_t size, void *buf)
375 memcpy (&cbuf[tsize], &p[1], p->size); 384 memcpy (&cbuf[tsize], &p[1], p->size);
376 tsize += p->size; 385 tsize += p->size;
377 size -= p->size; 386 size -= p->size;
378 GNUNET_CONTAINER_DLL_remove (handle->pending_head, handle->pending_tail, p); 387 p->transmitted = GNUNET_YES;
379 if (GNUNET_YES != handle->in_receive) 388 if (GNUNET_YES != handle->in_receive)
380 { 389 {
381 GNUNET_CLIENT_receive (handle->client, &process_message, handle, 390 GNUNET_CLIENT_receive (handle->client, &process_message, handle,
382 GNUNET_TIME_UNIT_FOREVER_REL); 391 GNUNET_TIME_UNIT_FOREVER_REL);
383 handle->in_receive = GNUNET_YES; 392 handle->in_receive = GNUNET_YES;
384 } 393 }
385 GNUNET_free (p);
386 } 394 }
387 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 395 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
388 "Sending %u bytes\n", 396 "Sending %u bytes\n",
@@ -404,10 +412,11 @@ process_shorten_reply (struct GNUNET_GNS_ShortenRequest *qe,
404 const struct GNUNET_GNS_ClientShortenResultMessage *msg) 412 const struct GNUNET_GNS_ClientShortenResultMessage *msg)
405{ 413{
406 struct GNUNET_GNS_Handle *h = qe->gns_handle; 414 struct GNUNET_GNS_Handle *h = qe->gns_handle;
415 struct PendingMessage *p = (struct PendingMessage *)&qe[1];
407 const char *short_name; 416 const char *short_name;
408 size_t mlen; 417 size_t mlen;
409 418
410 GNUNET_CONTAINER_DLL_remove (h->shorten_head, h->shorten_tail, qe); 419
411 mlen = ntohs (msg->header.size); 420 mlen = ntohs (msg->header.size);
412 if (ntohs (msg->header.size) == sizeof (struct GNUNET_GNS_ClientShortenResultMessage)) 421 if (ntohs (msg->header.size) == sizeof (struct GNUNET_GNS_ClientShortenResultMessage))
413 { 422 {
@@ -421,12 +430,15 @@ process_shorten_reply (struct GNUNET_GNS_ShortenRequest *qe,
421 { 430 {
422 GNUNET_break (0); 431 GNUNET_break (0);
423 // FIXME: reconnect and queue management logic is broken... 432 // FIXME: reconnect and queue management logic is broken...
424 qe->shorten_proc (qe->proc_cls, NULL); 433 p->transmitted = GNUNET_NO;
425 GNUNET_free (qe);
426 force_reconnect (h); 434 force_reconnect (h);
427 return; 435 return;
428 } 436 }
429 } 437 }
438 GNUNET_CONTAINER_DLL_remove (h->shorten_head, h->shorten_tail, qe);
439 GNUNET_CONTAINER_DLL_remove (h->pending_head,
440 h->pending_tail,
441 p);
430 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 442 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
431 "Received shortened reply `%s' from GNS service\n", 443 "Received shortened reply `%s' from GNS service\n",
432 short_name); 444 short_name);
@@ -447,20 +459,31 @@ process_get_auth_reply (struct GNUNET_GNS_GetAuthRequest *qe,
447 const struct GNUNET_GNS_ClientGetAuthResultMessage *msg) 459 const struct GNUNET_GNS_ClientGetAuthResultMessage *msg)
448{ 460{
449 struct GNUNET_GNS_Handle *h = qe->gns_handle; 461 struct GNUNET_GNS_Handle *h = qe->gns_handle;
462 struct PendingMessage *p = (struct PendingMessage *)&qe[1];
450 const char *auth_name; 463 const char *auth_name;
464 size_t mlen;
451 465
452 GNUNET_CONTAINER_DLL_remove (h->get_auth_head, h->get_auth_tail, qe); 466 mlen = ntohs (msg->header.size);
453 auth_name = (char*)&msg[1]; 467 if (mlen == sizeof (struct GNUNET_GNS_ClientGetAuthResultMessage))
454
455 if (ntohs (((struct GNUNET_MessageHeader*)msg)->size) <
456 sizeof (struct GNUNET_GNS_ClientGetAuthResultMessage))
457 { 468 {
458 GNUNET_free(qe); 469 auth_name = NULL;
459 GNUNET_break (0); 470 }
460 force_reconnect (h); 471 else
461 return; 472 {
473 auth_name = (char*)&msg[1];
474 if ('\0' != auth_name[mlen - sizeof (struct GNUNET_GNS_ClientGetAuthResultMessage) - 1])
475 {
476 GNUNET_break (0);
477 p->transmitted = GNUNET_NO;
478 force_reconnect (h);
479 return;
480 }
462 } 481 }
463 482
483 GNUNET_CONTAINER_DLL_remove (h->get_auth_head, h->get_auth_tail, qe);
484 GNUNET_CONTAINER_DLL_remove (h->pending_head,
485 h->pending_tail,
486 p);
464 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 487 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
465 "Received GET_AUTH reply `%s' from GNS service\n", 488 "Received GET_AUTH reply `%s' from GNS service\n",
466 auth_name); 489 auth_name);
@@ -480,38 +503,34 @@ process_lookup_reply (struct GNUNET_GNS_LookupRequest *qe,
480 const struct GNUNET_GNS_ClientLookupResultMessage *msg) 503 const struct GNUNET_GNS_ClientLookupResultMessage *msg)
481{ 504{
482 struct GNUNET_GNS_Handle *h = qe->gns_handle; 505 struct GNUNET_GNS_Handle *h = qe->gns_handle;
506 struct PendingMessage *p = (struct PendingMessage *)&qe[1];
483 int rd_count = ntohl(msg->rd_count); 507 int rd_count = ntohl(msg->rd_count);
484 size_t len = ntohs (((struct GNUNET_MessageHeader*)msg)->size);
485 struct GNUNET_NAMESTORE_RecordData rd[rd_count]; 508 struct GNUNET_NAMESTORE_RecordData rd[rd_count];
509 size_t mlen;
486 510
487 GNUNET_CONTAINER_DLL_remove (h->lookup_head, h->lookup_tail, qe); 511 mlen = ntohs (msg->header.size);
488 512 mlen -= sizeof (struct GNUNET_GNS_ClientLookupResultMessage);
489 if (len < sizeof (struct GNUNET_GNS_ClientLookupResultMessage)) 513 if (GNUNET_SYSERR == GNUNET_NAMESTORE_records_deserialize (mlen,
490 {
491 GNUNET_free(qe);
492 GNUNET_break (0);
493 force_reconnect (h);
494 return;
495 }
496
497 len -= sizeof (struct GNUNET_GNS_ClientLookupResultMessage);
498 if (GNUNET_SYSERR == GNUNET_NAMESTORE_records_deserialize (len,
499 (char*)&msg[1], 514 (char*)&msg[1],
500 rd_count, 515 rd_count,
501 rd)) 516 rd))
502 { 517 {
503 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 518 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
504 "Failed to serialize lookup reply from GNS service!\n"); 519 _("Failed to serialize lookup reply from GNS service!\n"));
505 qe->lookup_proc (qe->proc_cls, 0, NULL); 520 qe->lookup_proc (qe->proc_cls, 0, NULL);
506 } 521 }
507 else 522 else
508 { 523 {
509 524
510 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 525 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
511 "Received lookup reply from GNS service (count=%d)\n", 526 "Received lookup reply from GNS service (count=%u)\n",
512 ntohl (msg->rd_count)); 527 ntohl (msg->rd_count));
513 qe->lookup_proc (qe->proc_cls, rd_count, rd); 528 qe->lookup_proc (qe->proc_cls, rd_count, rd);
514 } 529 }
530 GNUNET_CONTAINER_DLL_remove (h->lookup_head, h->lookup_tail, qe);
531 GNUNET_CONTAINER_DLL_remove (h->pending_head,
532 h->pending_tail,
533 p);
515 GNUNET_free (qe); 534 GNUNET_free (qe);
516} 535}
517 536
@@ -636,9 +655,10 @@ GNUNET_GNS_disconnect (struct GNUNET_GNS_Handle *handle)
636 GNUNET_SCHEDULER_cancel (handle->reconnect_task); 655 GNUNET_SCHEDULER_cancel (handle->reconnect_task);
637 handle->reconnect_task = GNUNET_SCHEDULER_NO_TASK; 656 handle->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
638 } 657 }
639 GNUNET_assert (NULL == handle->lookup_head); 658 //FIXME sane?
659 /*GNUNET_assert (NULL == handle->lookup_head);
640 GNUNET_assert (NULL == handle->shorten_head); 660 GNUNET_assert (NULL == handle->shorten_head);
641 GNUNET_assert (NULL == handle->get_auth_head); 661 GNUNET_assert (NULL == handle->get_auth_head);*/
642 GNUNET_free(handle); 662 GNUNET_free(handle);
643 /* disco from GNS */ 663 /* disco from GNS */
644} 664}
@@ -652,23 +672,13 @@ GNUNET_GNS_disconnect (struct GNUNET_GNS_Handle *handle)
652void 672void
653GNUNET_GNS_cancel_lookup_request (struct GNUNET_GNS_LookupRequest *lr) 673GNUNET_GNS_cancel_lookup_request (struct GNUNET_GNS_LookupRequest *lr)
654{ 674{
655 struct PendingMessage *tmp; 675 struct PendingMessage *tmp = (struct PendingMessage*)&lr[1];
656 676
657 GNUNET_assert (NULL != lr->gns_handle); 677 GNUNET_assert (NULL != lr->gns_handle);
658 for (tmp = lr->gns_handle->pending_head;
659 NULL != tmp; tmp = tmp->next)
660 {
661 if (tmp->r_id == lr->r_id)
662 break;
663 }
664
665 if (NULL != tmp) 678 if (NULL != tmp)
666 {
667 GNUNET_CONTAINER_DLL_remove (lr->gns_handle->pending_head, 679 GNUNET_CONTAINER_DLL_remove (lr->gns_handle->pending_head,
668 lr->gns_handle->pending_tail, 680 lr->gns_handle->pending_tail,
669 tmp); 681 tmp);
670 GNUNET_free (tmp);
671 }
672 682
673 GNUNET_CONTAINER_DLL_remove (lr->gns_handle->lookup_head, 683 GNUNET_CONTAINER_DLL_remove (lr->gns_handle->lookup_head,
674 lr->gns_handle->lookup_tail, 684 lr->gns_handle->lookup_tail,
@@ -686,23 +696,13 @@ GNUNET_GNS_cancel_lookup_request (struct GNUNET_GNS_LookupRequest *lr)
686void 696void
687GNUNET_GNS_cancel_shorten_request (struct GNUNET_GNS_ShortenRequest *sr) 697GNUNET_GNS_cancel_shorten_request (struct GNUNET_GNS_ShortenRequest *sr)
688{ 698{
689 struct PendingMessage *tmp; 699 struct PendingMessage *tmp = (struct PendingMessage*)&sr[1];
690 700
691 GNUNET_assert (NULL != sr->gns_handle); 701 GNUNET_assert (NULL != sr->gns_handle);
692 for (tmp = sr->gns_handle->pending_head;
693 NULL != tmp; tmp = tmp->next)
694 {
695 if (tmp->r_id == sr->r_id)
696 break;
697 }
698
699 if (NULL != tmp) 702 if (NULL != tmp)
700 {
701 GNUNET_CONTAINER_DLL_remove (sr->gns_handle->pending_head, 703 GNUNET_CONTAINER_DLL_remove (sr->gns_handle->pending_head,
702 sr->gns_handle->pending_tail, 704 sr->gns_handle->pending_tail,
703 tmp); 705 tmp);
704 GNUNET_free (tmp);
705 }
706 706
707 GNUNET_CONTAINER_DLL_remove (sr->gns_handle->shorten_head, 707 GNUNET_CONTAINER_DLL_remove (sr->gns_handle->shorten_head,
708 sr->gns_handle->shorten_tail, 708 sr->gns_handle->shorten_tail,
@@ -720,24 +720,15 @@ GNUNET_GNS_cancel_shorten_request (struct GNUNET_GNS_ShortenRequest *sr)
720void 720void
721GNUNET_GNS_cancel_get_auth_request (struct GNUNET_GNS_GetAuthRequest *gar) 721GNUNET_GNS_cancel_get_auth_request (struct GNUNET_GNS_GetAuthRequest *gar)
722{ 722{
723 struct PendingMessage *tmp; 723 struct PendingMessage *tmp = (struct PendingMessage*)&gar[1];
724 724
725 GNUNET_assert (NULL != gar->gns_handle); 725 GNUNET_assert (NULL != gar->gns_handle);
726 for (tmp = gar->gns_handle->pending_head;
727 NULL != tmp; tmp = tmp->next)
728 {
729 if (tmp->r_id == gar->r_id)
730 break;
731 }
732 726
733 if (NULL != tmp) 727 if (NULL != tmp)
734 {
735 GNUNET_CONTAINER_DLL_remove (gar->gns_handle->pending_head, 728 GNUNET_CONTAINER_DLL_remove (gar->gns_handle->pending_head,
736 gar->gns_handle->pending_tail, 729 gar->gns_handle->pending_tail,
737 tmp); 730 tmp);
738 GNUNET_free (tmp); 731
739 }
740
741 GNUNET_CONTAINER_DLL_remove (gar->gns_handle->get_auth_head, 732 GNUNET_CONTAINER_DLL_remove (gar->gns_handle->get_auth_head,
742 gar->gns_handle->get_auth_tail, 733 gar->gns_handle->get_auth_tail,
743 gar); 734 gar);
@@ -777,6 +768,7 @@ GNUNET_GNS_lookup_zone (struct GNUNET_GNS_Handle *handle,
777 struct GNUNET_CRYPTO_RsaPrivateKeyBinaryEncoded *pkey_enc; 768 struct GNUNET_CRYPTO_RsaPrivateKeyBinaryEncoded *pkey_enc;
778 size_t key_len; 769 size_t key_len;
779 char* pkey_tmp; 770 char* pkey_tmp;
771 size_t request_size;
780 772
781 if (NULL == name) 773 if (NULL == name)
782 { 774 {
@@ -795,23 +787,23 @@ GNUNET_GNS_lookup_zone (struct GNUNET_GNS_Handle *handle,
795 pkey_enc = NULL; 787 pkey_enc = NULL;
796 key_len = 0; 788 key_len = 0;
797 } 789 }
798 790GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
799 msize = sizeof (struct GNUNET_GNS_ClientLookupMessage)
800 + key_len + strlen (name) + 1;
801 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
802 "Trying to lookup %s in GNS\n", 791 "Trying to lookup %s in GNS\n",
803 name); 792 name);
804 lr = GNUNET_malloc (sizeof (struct GNUNET_GNS_LookupRequest)); 793 msize = sizeof (struct GNUNET_GNS_ClientLookupMessage)
794 + key_len + strlen (name) + 1;
795 request_size = sizeof (struct GNUNET_GNS_LookupRequest) +
796 sizeof (struct PendingMessage) + msize;
797 lr = GNUNET_malloc (request_size);
805 lr->gns_handle = handle; 798 lr->gns_handle = handle;
806 lr->lookup_proc = proc; 799 lr->lookup_proc = proc;
807 lr->proc_cls = proc_cls; 800 lr->proc_cls = proc_cls;
808 lr->r_id = handle->r_id++; 801 lr->r_id = handle->r_id++;
809 GNUNET_CONTAINER_DLL_insert_tail (handle->lookup_head, 802 pending = (struct PendingMessage *)&lr[1];
810 handle->lookup_tail, lr);
811
812 pending = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
813 pending->size = msize; 803 pending->size = msize;
814 pending->r_id = lr->r_id; 804 pending->r_id = lr->r_id;
805 GNUNET_CONTAINER_DLL_insert_tail (handle->lookup_head,
806 handle->lookup_tail, lr);
815 807
816 lookup_msg = (struct GNUNET_GNS_ClientLookupMessage *) &pending[1]; 808 lookup_msg = (struct GNUNET_GNS_ClientLookupMessage *) &pending[1];
817 lookup_msg->header.type = htons (GNUNET_MESSAGE_TYPE_GNS_LOOKUP); 809 lookup_msg->header.type = htons (GNUNET_MESSAGE_TYPE_GNS_LOOKUP);
@@ -902,6 +894,7 @@ GNUNET_GNS_shorten_zone (struct GNUNET_GNS_Handle *handle,
902 struct GNUNET_GNS_ClientShortenMessage *shorten_msg; 894 struct GNUNET_GNS_ClientShortenMessage *shorten_msg;
903 struct GNUNET_GNS_ShortenRequest *sr; 895 struct GNUNET_GNS_ShortenRequest *sr;
904 size_t msize; 896 size_t msize;
897 size_t request_size;
905 struct PendingMessage *pending; 898 struct PendingMessage *pending;
906 899
907 if (NULL == name) 900 if (NULL == name)
@@ -912,7 +905,9 @@ GNUNET_GNS_shorten_zone (struct GNUNET_GNS_Handle *handle,
912 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Trying to shorten %s in GNS\n", name); 905 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Trying to shorten %s in GNS\n", name);
913 906
914 msize = sizeof (struct GNUNET_GNS_ClientShortenMessage) + strlen(name) + 1; 907 msize = sizeof (struct GNUNET_GNS_ClientShortenMessage) + strlen(name) + 1;
915 sr = GNUNET_malloc (sizeof (struct GNUNET_GNS_ShortenRequest)); 908 request_size = sizeof (struct GNUNET_GNS_ShortenRequest) +
909 sizeof (struct PendingMessage) + msize;
910 sr = GNUNET_malloc (request_size);
916 sr->gns_handle = handle; 911 sr->gns_handle = handle;
917 sr->shorten_proc = proc; 912 sr->shorten_proc = proc;
918 sr->proc_cls = proc_cls; 913 sr->proc_cls = proc_cls;
@@ -920,7 +915,7 @@ GNUNET_GNS_shorten_zone (struct GNUNET_GNS_Handle *handle,
920 GNUNET_CONTAINER_DLL_insert_tail (handle->shorten_head, 915 GNUNET_CONTAINER_DLL_insert_tail (handle->shorten_head,
921 handle->shorten_tail, sr); 916 handle->shorten_tail, sr);
922 917
923 pending = GNUNET_malloc (sizeof (struct PendingMessage) + msize); 918 pending = (struct PendingMessage *)&sr[1];
924 pending->size = msize; 919 pending->size = msize;
925 pending->r_id = sr->r_id; 920 pending->r_id = sr->r_id;
926 921
@@ -996,6 +991,7 @@ GNUNET_GNS_get_authority (struct GNUNET_GNS_Handle *handle,
996 struct GNUNET_GNS_ClientGetAuthMessage *get_auth_msg; 991 struct GNUNET_GNS_ClientGetAuthMessage *get_auth_msg;
997 struct GNUNET_GNS_GetAuthRequest *gar; 992 struct GNUNET_GNS_GetAuthRequest *gar;
998 size_t msize; 993 size_t msize;
994 size_t request_size;
999 struct PendingMessage *pending; 995 struct PendingMessage *pending;
1000 996
1001 if (NULL == name) 997 if (NULL == name)
@@ -1007,7 +1003,9 @@ GNUNET_GNS_get_authority (struct GNUNET_GNS_Handle *handle,
1007 "Trying to look up authority for %s in GNS\n", name); 1003 "Trying to look up authority for %s in GNS\n", name);
1008 1004
1009 msize = sizeof (struct GNUNET_GNS_ClientGetAuthMessage) + strlen (name) + 1; 1005 msize = sizeof (struct GNUNET_GNS_ClientGetAuthMessage) + strlen (name) + 1;
1010 gar = GNUNET_malloc (sizeof (struct GNUNET_GNS_GetAuthRequest)); 1006 request_size = sizeof (struct GNUNET_GNS_GetAuthRequest) +
1007 sizeof (struct PendingMessage) + msize;
1008 gar = GNUNET_malloc (request_size);
1011 gar->gns_handle = handle; 1009 gar->gns_handle = handle;
1012 gar->auth_proc = proc; 1010 gar->auth_proc = proc;
1013 gar->proc_cls = proc_cls; 1011 gar->proc_cls = proc_cls;
@@ -1015,7 +1013,7 @@ GNUNET_GNS_get_authority (struct GNUNET_GNS_Handle *handle,
1015 GNUNET_CONTAINER_DLL_insert_tail (handle->get_auth_head, 1013 GNUNET_CONTAINER_DLL_insert_tail (handle->get_auth_head,
1016 handle->get_auth_tail, gar); 1014 handle->get_auth_tail, gar);
1017 1015
1018 pending = GNUNET_malloc (sizeof (struct PendingMessage) + msize); 1016 pending = (struct PendingMessage *)&gar[1];
1019 pending->size = msize; 1017 pending->size = msize;
1020 pending->r_id = gar->r_id; 1018 pending->r_id = gar->r_id;
1021 get_auth_msg = (struct GNUNET_GNS_ClientGetAuthMessage *) &pending[1]; 1019 get_auth_msg = (struct GNUNET_GNS_ClientGetAuthMessage *) &pending[1];
diff --git a/src/gns/test_gns_cname_lookup.c b/src/gns/test_gns_cname_lookup.c
index 2c384cfa2..36cdcde05 100644
--- a/src/gns/test_gns_cname_lookup.c
+++ b/src/gns/test_gns_cname_lookup.c
@@ -104,6 +104,13 @@ end_badly_now ()
104 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 104 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
105} 105}
106 106
107static void shutdown_task (void *cls,
108 const struct GNUNET_SCHEDULER_TaskContext *tc)
109{
110 GNUNET_GNS_disconnect(gns_handle);
111 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
112 GNUNET_SCHEDULER_shutdown ();
113}
107 114
108static void 115static void
109on_lookup_result_cname (void *cls, uint32_t rd_count, 116on_lookup_result_cname (void *cls, uint32_t rd_count,
@@ -148,10 +155,7 @@ on_lookup_result_cname (void *cls, uint32_t rd_count,
148 } 155 }
149 } 156 }
150 } 157 }
151 GNUNET_GNS_disconnect(gns_handle); 158 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
152 gns_handle = NULL;
153 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
154 GNUNET_SCHEDULER_shutdown ();
155} 159}
156 160
157static void 161static void
diff --git a/src/gns/test_gns_dht_delegated_lookup.c b/src/gns/test_gns_dht_delegated_lookup.c
index 0b5382fc8..0fcd723e3 100644
--- a/src/gns/test_gns_dht_delegated_lookup.c
+++ b/src/gns/test_gns_dht_delegated_lookup.c
@@ -123,6 +123,13 @@ end_badly_now ()
123 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 123 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
124} 124}
125 125
126static void shutdown_task (void *cls,
127 const struct GNUNET_SCHEDULER_TaskContext *tc)
128{
129 GNUNET_GNS_disconnect(gns_handle);
130 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
131 GNUNET_SCHEDULER_shutdown ();
132}
126 133
127static void 134static void
128on_lookup_result(void *cls, uint32_t rd_count, 135on_lookup_result(void *cls, uint32_t rd_count,
@@ -171,12 +178,10 @@ on_lookup_result(void *cls, uint32_t rd_count,
171 } 178 }
172 } 179 }
173 } 180 }
174 GNUNET_GNS_disconnect(gns_handle);
175 gns_handle = NULL;
176 GNUNET_DHT_disconnect (dht_handle); 181 GNUNET_DHT_disconnect (dht_handle);
177 dht_handle = NULL; 182 dht_handle = NULL;
178 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n"); 183
179 GNUNET_SCHEDULER_shutdown (); 184 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
180} 185}
181 186
182 187
diff --git a/src/gns/test_gns_max_queries.c b/src/gns/test_gns_max_queries.c
index 0d3cf931f..fecc40925 100644
--- a/src/gns/test_gns_max_queries.c
+++ b/src/gns/test_gns_max_queries.c
@@ -101,10 +101,18 @@ end_badly_now ()
101} 101}
102 102
103 103
104static void shutdown_task (void *cls,
105 const struct GNUNET_SCHEDULER_TaskContext *tc)
106{
107 GNUNET_GNS_disconnect(gns_handle);
108 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
109 GNUNET_SCHEDULER_shutdown ();
110}
104static void 111static void
105on_lookup_result_dummy(void *cls, uint32_t rd_count, 112on_lookup_result_dummy(void *cls, uint32_t rd_count,
106 const struct GNUNET_NAMESTORE_RecordData *rd) 113 const struct GNUNET_NAMESTORE_RecordData *rd)
107{ 114{
115 static int replies = 0;
108 if (GNUNET_SCHEDULER_NO_TASK != die_task) 116 if (GNUNET_SCHEDULER_NO_TASK != die_task)
109 { 117 {
110 GNUNET_SCHEDULER_cancel (die_task); 118 GNUNET_SCHEDULER_cancel (die_task);
@@ -117,9 +125,13 @@ on_lookup_result_dummy(void *cls, uint32_t rd_count,
117 rd_count); 125 rd_count);
118 ok = -1; 126 ok = -1;
119 } 127 }
128 replies++;
129 if (replies == (max_parallel_lookups+TEST_ADDITIONAL_LOOKUPS))
130 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
120 fprintf (stderr, "."); 131 fprintf (stderr, ".");
121} 132}
122 133
134
123static void 135static void
124on_lookup_result(void *cls, uint32_t rd_count, 136on_lookup_result(void *cls, uint32_t rd_count,
125 const struct GNUNET_NAMESTORE_RecordData *rd) 137 const struct GNUNET_NAMESTORE_RecordData *rd)
@@ -168,10 +180,7 @@ on_lookup_result(void *cls, uint32_t rd_count,
168 } 180 }
169 } 181 }
170 } 182 }
171 GNUNET_GNS_disconnect(gns_handle); 183 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
172 gns_handle = NULL;
173 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
174 GNUNET_SCHEDULER_shutdown ();
175} 184}
176 185
177 186
diff --git a/src/gns/test_gns_ns_lookup.c b/src/gns/test_gns_ns_lookup.c
index 45893a760..d0c00613e 100644
--- a/src/gns/test_gns_ns_lookup.c
+++ b/src/gns/test_gns_ns_lookup.c
@@ -107,7 +107,7 @@ end_badly_now ()
107} 107}
108 108
109static void 109static void
110end_now () 110end_now (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
111{ 111{
112 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Test successful, shutting down...\n"); 112 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Test successful, shutting down...\n");
113 if (GNUNET_SCHEDULER_NO_TASK != die_task) 113 if (GNUNET_SCHEDULER_NO_TASK != die_task)
@@ -175,7 +175,7 @@ on_lookup_result_alt2 (void *cls, uint32_t rd_count,
175 } 175 }
176 } 176 }
177 } 177 }
178 end_now (); 178 GNUNET_SCHEDULER_add_now (&end_now, NULL);
179} 179}
180 180
181static void 181static void
@@ -310,7 +310,7 @@ handle_dns_test (void *cls,
310 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 310 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
311 "System resolver not working. Test inconclusive!\n"); 311 "System resolver not working. Test inconclusive!\n");
312 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer1!\n"); 312 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer1!\n");
313 end_now (); 313 GNUNET_SCHEDULER_add_now (&end_now, NULL);
314 return; 314 return;
315 } 315 }
316 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Starting lookup \n"); 316 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Starting lookup \n");
diff --git a/src/gns/test_gns_pseu_shorten.c b/src/gns/test_gns_pseu_shorten.c
index cae454047..c5ff6435e 100644
--- a/src/gns/test_gns_pseu_shorten.c
+++ b/src/gns/test_gns_pseu_shorten.c
@@ -133,6 +133,14 @@ end_badly_now ()
133 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 133 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
134} 134}
135 135
136static void shutdown_task (void *cls,
137 const struct GNUNET_SCHEDULER_TaskContext *tc)
138{
139 GNUNET_GNS_disconnect(gns_handle);
140 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
141 GNUNET_SCHEDULER_shutdown ();
142}
143
136/** 144/**
137 * Called when gns shorten finishes 145 * Called when gns shorten finishes
138 */ 146 */
@@ -146,12 +154,6 @@ process_shorten_result(void* cls, const char* sname)
146 die_task = GNUNET_SCHEDULER_NO_TASK; 154 die_task = GNUNET_SCHEDULER_NO_TASK;
147 } 155 }
148 156
149 if (NULL != gns_handle)
150 {
151 GNUNET_GNS_disconnect(gns_handle);
152 gns_handle = NULL;
153 }
154
155 if (NULL != dht_handle) 157 if (NULL != dht_handle)
156 { 158 {
157 GNUNET_DHT_disconnect (dht_handle); 159 GNUNET_DHT_disconnect (dht_handle);
@@ -178,8 +180,7 @@ process_shorten_result(void* cls, const char* sname)
178 180
179 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "shorten test succeeded!\n"); 181 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "shorten test succeeded!\n");
180 } 182 }
181 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n"); 183 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
182 GNUNET_SCHEDULER_shutdown ();
183} 184}
184 185
185 186
diff --git a/src/gns/test_gns_revocation.c b/src/gns/test_gns_revocation.c
index bc31d943d..a538ab3e7 100644
--- a/src/gns/test_gns_revocation.c
+++ b/src/gns/test_gns_revocation.c
@@ -95,6 +95,15 @@ end_badly_now ()
95 GNUNET_SCHEDULER_cancel (die_task); 95 GNUNET_SCHEDULER_cancel (die_task);
96 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 96 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
97} 97}
98
99static void shutdown_task (void *cls,
100 const struct GNUNET_SCHEDULER_TaskContext *tc)
101{
102 GNUNET_GNS_disconnect(gns_handle);
103 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
104 GNUNET_SCHEDULER_shutdown ();
105}
106
98static void 107static void
99on_lookup_result(void *cls, uint32_t rd_count, 108on_lookup_result(void *cls, uint32_t rd_count,
100 const struct GNUNET_NAMESTORE_RecordData *rd) 109 const struct GNUNET_NAMESTORE_RecordData *rd)
@@ -142,10 +151,7 @@ on_lookup_result(void *cls, uint32_t rd_count,
142 } 151 }
143 } 152 }
144 } 153 }
145 GNUNET_GNS_disconnect(gns_handle); 154 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
146 gns_handle = NULL;
147 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
148 GNUNET_SCHEDULER_shutdown ();
149} 155}
150 156
151 157
diff --git a/src/gns/test_gns_simple_delegated_lookup.c b/src/gns/test_gns_simple_delegated_lookup.c
index ab0395e62..b456e4112 100644
--- a/src/gns/test_gns_simple_delegated_lookup.c
+++ b/src/gns/test_gns_simple_delegated_lookup.c
@@ -110,6 +110,14 @@ void end_badly_now ()
110} 110}
111 111
112 112
113static void shutdown_task (void *cls,
114 const struct GNUNET_SCHEDULER_TaskContext *tc)
115{
116 GNUNET_GNS_disconnect(gns_handle);
117 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
118 GNUNET_SCHEDULER_shutdown ();
119}
120
113static void 121static void
114on_lookup_result(void *cls, uint32_t rd_count, 122on_lookup_result(void *cls, uint32_t rd_count,
115 const struct GNUNET_NAMESTORE_RecordData *rd) 123 const struct GNUNET_NAMESTORE_RecordData *rd)
@@ -156,10 +164,7 @@ on_lookup_result(void *cls, uint32_t rd_count,
156 } 164 }
157 } 165 }
158 } 166 }
159 167 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
160 GNUNET_GNS_disconnect(gns_handle);
161 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
162 GNUNET_SCHEDULER_shutdown ();
163} 168}
164 169
165 170
diff --git a/src/gns/test_gns_simple_get_authority.c b/src/gns/test_gns_simple_get_authority.c
index a2605fbae..4a5406e98 100644
--- a/src/gns/test_gns_simple_get_authority.c
+++ b/src/gns/test_gns_simple_get_authority.c
@@ -100,6 +100,13 @@ void end_badly_now ()
100 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 100 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
101} 101}
102 102
103static void shutdown_task (void *cls,
104 const struct GNUNET_SCHEDULER_TaskContext *tc)
105{
106 GNUNET_GNS_disconnect(gns_handle);
107 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
108 GNUNET_SCHEDULER_shutdown ();
109}
103 110
104/** 111/**
105 * Called when gns_get_authority finishes 112 * Called when gns_get_authority finishes
@@ -108,8 +115,6 @@ static void
108process_auth_result(void* cls, const char* aname) 115process_auth_result(void* cls, const char* aname)
109{ 116{
110 117
111 GNUNET_GNS_disconnect(gns_handle);
112
113 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 118 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
114 "Disconnecting from namestore\n"); 119 "Disconnecting from namestore\n");
115 GNUNET_NAMESTORE_disconnect (namestore_handle); 120 GNUNET_NAMESTORE_disconnect (namestore_handle);
@@ -146,8 +151,7 @@ process_auth_result(void* cls, const char* aname)
146 151
147 } 152 }
148 153
149 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer1!\n"); 154 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
150 GNUNET_SCHEDULER_shutdown ();
151} 155}
152 156
153 157
diff --git a/src/gns/test_gns_simple_lookup.c b/src/gns/test_gns_simple_lookup.c
index 97cb2b3f5..cc912b2e0 100644
--- a/src/gns/test_gns_simple_lookup.c
+++ b/src/gns/test_gns_simple_lookup.c
@@ -89,6 +89,16 @@ void end_badly_now ()
89 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 89 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
90} 90}
91 91
92
93static void shutdown_task (void *cls,
94 const struct GNUNET_SCHEDULER_TaskContext *tc)
95{
96 GNUNET_GNS_disconnect(gns_handle);
97 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
98 GNUNET_SCHEDULER_shutdown ();
99}
100
101
92static void 102static void
93on_lookup_result(void *cls, uint32_t rd_count, 103on_lookup_result(void *cls, uint32_t rd_count,
94 const struct GNUNET_NAMESTORE_RecordData *rd) 104 const struct GNUNET_NAMESTORE_RecordData *rd)
@@ -137,10 +147,7 @@ on_lookup_result(void *cls, uint32_t rd_count,
137 } 147 }
138 } 148 }
139 149
140 GNUNET_GNS_disconnect(gns_handle); 150 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
141 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
142 GNUNET_SCHEDULER_shutdown ();
143
144} 151}
145 152
146 153
diff --git a/src/gns/test_gns_simple_mx_lookup.c b/src/gns/test_gns_simple_mx_lookup.c
index 03e4f867f..a2fc311d4 100644
--- a/src/gns/test_gns_simple_mx_lookup.c
+++ b/src/gns/test_gns_simple_mx_lookup.c
@@ -100,6 +100,15 @@ end_badly_now ()
100 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 100 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
101} 101}
102 102
103
104static void shutdown_task (void *cls,
105 const struct GNUNET_SCHEDULER_TaskContext *tc)
106{
107 GNUNET_GNS_disconnect(gns_handle);
108 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
109 GNUNET_SCHEDULER_shutdown ();
110}
111
103static void 112static void
104on_lookup_result(void *cls, uint32_t rd_count, 113on_lookup_result(void *cls, uint32_t rd_count,
105 const struct GNUNET_NAMESTORE_RecordData *rd) 114 const struct GNUNET_NAMESTORE_RecordData *rd)
@@ -144,10 +153,8 @@ on_lookup_result(void *cls, uint32_t rd_count,
144 } 153 }
145 } 154 }
146 } 155 }
147 156
148 GNUNET_GNS_disconnect(gns_handle); 157 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
149 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
150 GNUNET_SCHEDULER_shutdown ();
151 158
152} 159}
153 160
diff --git a/src/gns/test_gns_simple_shorten.c b/src/gns/test_gns_simple_shorten.c
index fb02d223e..23305c889 100644
--- a/src/gns/test_gns_simple_shorten.c
+++ b/src/gns/test_gns_simple_shorten.c
@@ -95,6 +95,13 @@ void end_badly_now ()
95 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 95 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
96} 96}
97 97
98static void shutdown_task (void *cls,
99 const struct GNUNET_SCHEDULER_TaskContext *tc)
100{
101 GNUNET_GNS_disconnect(gns_handle);
102 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
103 GNUNET_SCHEDULER_shutdown ();
104}
98 105
99/** 106/**
100 * Called when gns shorten finishes 107 * Called when gns shorten finishes
@@ -102,7 +109,6 @@ void end_badly_now ()
102static void 109static void
103process_shorten_result(void* cls, const char* sname) 110process_shorten_result(void* cls, const char* sname)
104{ 111{
105 GNUNET_GNS_disconnect(gns_handle);
106 112
107 if (GNUNET_SCHEDULER_NO_TASK != die_task) 113 if (GNUNET_SCHEDULER_NO_TASK != die_task)
108 { 114 {
@@ -135,9 +141,8 @@ process_shorten_result(void* cls, const char* sname)
135 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shorten test succeeded!\n"); 141 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shorten test succeeded!\n");
136 ok = 0; 142 ok = 0;
137 } 143 }
138 144
139 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutting down peer!\n"); 145 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
140 GNUNET_SCHEDULER_shutdown ();
141} 146}
142 147
143/** 148/**
diff --git a/src/gns/test_gns_simple_srv_lookup.c b/src/gns/test_gns_simple_srv_lookup.c
index ea1673759..b3aec0e21 100644
--- a/src/gns/test_gns_simple_srv_lookup.c
+++ b/src/gns/test_gns_simple_srv_lookup.c
@@ -100,6 +100,14 @@ end_badly_now ()
100 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 100 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
101} 101}
102 102
103static void shutdown_task (void *cls,
104 const struct GNUNET_SCHEDULER_TaskContext *tc)
105{
106 GNUNET_GNS_disconnect(gns_handle);
107 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
108 GNUNET_SCHEDULER_shutdown ();
109}
110
103static void 111static void
104on_lookup_result(void *cls, uint32_t rd_count, 112on_lookup_result(void *cls, uint32_t rd_count,
105 const struct GNUNET_NAMESTORE_RecordData *rd) 113 const struct GNUNET_NAMESTORE_RecordData *rd)
@@ -146,9 +154,8 @@ on_lookup_result(void *cls, uint32_t rd_count,
146 } 154 }
147 } 155 }
148 156
149 GNUNET_GNS_disconnect(gns_handle); 157 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
150 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n"); 158
151 GNUNET_SCHEDULER_shutdown ();
152} 159}
153 160
154 161
diff --git a/src/gns/test_gns_simple_zkey_lookup.c b/src/gns/test_gns_simple_zkey_lookup.c
index 716ac7236..a1cef1828 100644
--- a/src/gns/test_gns_simple_zkey_lookup.c
+++ b/src/gns/test_gns_simple_zkey_lookup.c
@@ -99,6 +99,14 @@ end_badly_now ()
99 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 99 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
100} 100}
101 101
102static void shutdown_task (void *cls,
103 const struct GNUNET_SCHEDULER_TaskContext *tc)
104{
105 GNUNET_GNS_disconnect(gns_handle);
106 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
107 GNUNET_SCHEDULER_shutdown ();
108}
109
102static void 110static void
103on_lookup_result(void *cls, uint32_t rd_count, 111on_lookup_result(void *cls, uint32_t rd_count,
104 const struct GNUNET_NAMESTORE_RecordData *rd) 112 const struct GNUNET_NAMESTORE_RecordData *rd)
@@ -146,11 +154,8 @@ on_lookup_result(void *cls, uint32_t rd_count,
146 } 154 }
147 } 155 }
148 } 156 }
149 157
150 GNUNET_GNS_disconnect(gns_handle); 158 GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
151 gns_handle = NULL;
152 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer!\n");
153 GNUNET_SCHEDULER_shutdown ();
154} 159}
155/** 160/**
156 * Function scheduled to be run on the successful start of services 161 * Function scheduled to be run on the successful start of services