aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2021-02-26 15:14:03 +0100
committerMartin Schanzenbach <mschanzenbach@posteo.de>2021-02-26 15:14:03 +0100
commitb2ef30b3eb815fbb34a519581e1afc8bac393269 (patch)
treea47374db9d377a98eb3e5863ec532f550ebf8a16 /src/transport
parent6edac715d38f2126ea7316373cfd27c3d76b05cf (diff)
downloadgnunet-b2ef30b3eb815fbb34a519581e1afc8bac393269.tar.gz
gnunet-b2ef30b3eb815fbb34a519581e1afc8bac393269.zip
-First message through TNG test done
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/gnunet-service-tng.c124
-rw-r--r--src/transport/test_transport_api2_tcp_peer1.conf1
-rw-r--r--src/transport/test_transport_api2_tcp_peer2.conf2
-rw-r--r--src/transport/transport-testing2.c67
4 files changed, 100 insertions, 94 deletions
diff --git a/src/transport/gnunet-service-tng.c b/src/transport/gnunet-service-tng.c
index 64cb53ad8..aaa9f129b 100644
--- a/src/transport/gnunet-service-tng.c
+++ b/src/transport/gnunet-service-tng.c
@@ -2772,6 +2772,11 @@ static unsigned int pa_count;
2772 */ 2772 */
2773static struct GNUNET_TIME_Absolute hello_mono_time; 2773static struct GNUNET_TIME_Absolute hello_mono_time;
2774 2774
2775/**
2776 * Indication if we have received a shutdown signal
2777 * and are in the process of cleaning up.
2778 */
2779static int in_shutdown;
2775 2780
2776/** 2781/**
2777 * Get an offset into the transmission history buffer for `struct 2782 * Get an offset into the transmission history buffer for `struct
@@ -2805,6 +2810,7 @@ free_incoming_request (struct IncomingRequest *ir)
2805 GNUNET_assert (ir_total > 0); 2810 GNUNET_assert (ir_total > 0);
2806 ir_total--; 2811 ir_total--;
2807 GNUNET_PEERSTORE_watch_cancel (ir->wc); 2812 GNUNET_PEERSTORE_watch_cancel (ir->wc);
2813 ir->wc = NULL;
2808 GNUNET_free (ir); 2814 GNUNET_free (ir);
2809} 2815}
2810 2816
@@ -3333,6 +3339,8 @@ free_neighbour (struct Neighbour *neighbour)
3333 GNUNET_CONTAINER_multipeermap_remove (neighbours, 3339 GNUNET_CONTAINER_multipeermap_remove (neighbours,
3334 &neighbour->pid, 3340 &neighbour->pid,
3335 neighbour)); 3341 neighbour));
3342 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3343 "Freeing neighbour\n");
3336 if (NULL != neighbour->reassembly_map) 3344 if (NULL != neighbour->reassembly_map)
3337 { 3345 {
3338 GNUNET_CONTAINER_multihashmap32_iterate (neighbour->reassembly_map, 3346 GNUNET_CONTAINER_multihashmap32_iterate (neighbour->reassembly_map,
@@ -3499,6 +3507,8 @@ check_link_down (void *cls)
3499 struct GNUNET_TIME_Absolute dvh_timeout; 3507 struct GNUNET_TIME_Absolute dvh_timeout;
3500 struct GNUNET_TIME_Absolute q_timeout; 3508 struct GNUNET_TIME_Absolute q_timeout;
3501 3509
3510 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3511 "Checking if link is down\n");
3502 vl->visibility_task = NULL; 3512 vl->visibility_task = NULL;
3503 dvh_timeout = GNUNET_TIME_UNIT_ZERO_ABS; 3513 dvh_timeout = GNUNET_TIME_UNIT_ZERO_ABS;
3504 if (NULL != dv) 3514 if (NULL != dv)
@@ -3660,6 +3670,7 @@ stop_peer_request (void *cls,
3660 struct PeerRequest *pr = value; 3670 struct PeerRequest *pr = value;
3661 3671
3662 GNUNET_PEERSTORE_watch_cancel (pr->wc); 3672 GNUNET_PEERSTORE_watch_cancel (pr->wc);
3673 pr->wc = NULL;
3663 GNUNET_assert ( 3674 GNUNET_assert (
3664 GNUNET_YES == 3675 GNUNET_YES ==
3665 GNUNET_CONTAINER_multipeermap_remove (tc->details.application.requests, 3676 GNUNET_CONTAINER_multipeermap_remove (tc->details.application.requests,
@@ -3670,6 +3681,8 @@ stop_peer_request (void *cls,
3670 return GNUNET_OK; 3681 return GNUNET_OK;
3671} 3682}
3672 3683
3684static void
3685do_shutdown (void *cls);
3673 3686
3674/** 3687/**
3675 * Called whenever a client is disconnected. Frees our 3688 * Called whenever a client is disconnected. Frees our
@@ -3688,16 +3701,20 @@ client_disconnect_cb (void *cls,
3688 3701
3689 (void) cls; 3702 (void) cls;
3690 (void) client; 3703 (void) client;
3691 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3692 "Client %p disconnected, cleaning up.\n",
3693 tc);
3694 GNUNET_CONTAINER_DLL_remove (clients_head, clients_tail, tc); 3704 GNUNET_CONTAINER_DLL_remove (clients_head, clients_tail, tc);
3695 switch (tc->type) 3705 switch (tc->type)
3696 { 3706 {
3697 case CT_NONE: 3707 case CT_NONE:
3708 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3709 "Unknown Client %p disconnected, cleaning up.\n",
3710 tc);
3698 break; 3711 break;
3699 3712
3700 case CT_CORE: { 3713 case CT_CORE: {
3714 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3715 "CORE Client %p disconnected, cleaning up.\n",
3716 tc);
3717
3701 struct PendingMessage *pm; 3718 struct PendingMessage *pm;
3702 3719
3703 while (NULL != (pm = tc->details.core.pending_msg_head)) 3720 while (NULL != (pm = tc->details.core.pending_msg_head))
@@ -3712,9 +3729,17 @@ client_disconnect_cb (void *cls,
3712 break; 3729 break;
3713 3730
3714 case CT_MONITOR: 3731 case CT_MONITOR:
3732 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3733 "MONITOR Client %p disconnected, cleaning up.\n",
3734 tc);
3735
3715 break; 3736 break;
3716 3737
3717 case CT_COMMUNICATOR: { 3738 case CT_COMMUNICATOR: {
3739 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3740 "COMMUNICATOR Client %p disconnected, cleaning up.\n",
3741 tc);
3742
3718 struct Queue *q; 3743 struct Queue *q;
3719 struct AddressListEntry *ale; 3744 struct AddressListEntry *ale;
3720 3745
@@ -3727,6 +3752,10 @@ client_disconnect_cb (void *cls,
3727 break; 3752 break;
3728 3753
3729 case CT_APPLICATION: 3754 case CT_APPLICATION:
3755 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3756 "APPLICATION Client %p disconnected, cleaning up.\n",
3757 tc);
3758
3730 GNUNET_CONTAINER_multipeermap_iterate (tc->details.application.requests, 3759 GNUNET_CONTAINER_multipeermap_iterate (tc->details.application.requests,
3731 &stop_peer_request, 3760 &stop_peer_request,
3732 tc); 3761 tc);
@@ -3734,6 +3763,12 @@ client_disconnect_cb (void *cls,
3734 break; 3763 break;
3735 } 3764 }
3736 GNUNET_free (tc); 3765 GNUNET_free (tc);
3766 if ((GNUNET_YES == in_shutdown) && (NULL == clients_head))
3767 {
3768 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
3769 "Our last client disconnected\n");
3770 do_shutdown (cls);
3771 }
3737} 3772}
3738 3773
3739 3774
@@ -5166,7 +5201,9 @@ handle_del_address (void *cls,
5166 GNUNET_SERVICE_client_continue (tc->client); 5201 GNUNET_SERVICE_client_continue (tc->client);
5167 return; 5202 return;
5168 } 5203 }
5169 GNUNET_break (0); 5204 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
5205 "Communicator removed address we did not even have.\n");
5206 GNUNET_SERVICE_client_continue (tc->client);
5170 //GNUNET_SERVICE_client_drop (tc->client); 5207 //GNUNET_SERVICE_client_drop (tc->client);
5171} 5208}
5172 5209
@@ -10046,52 +10083,6 @@ free_ack_cummulator_cb (void *cls,
10046 return GNUNET_OK; 10083 return GNUNET_OK;
10047} 10084}
10048 10085
10049void
10050cleanup_client (struct TransportClient *tc)
10051{
10052 switch (tc->type)
10053 {
10054 case CT_NONE:
10055 break;
10056
10057 case CT_CORE: {
10058 struct PendingMessage *pm;
10059
10060 while (NULL != (pm = tc->details.core.pending_msg_head))
10061 {
10062 GNUNET_CONTAINER_MDLL_remove (client,
10063 tc->details.core.pending_msg_head,
10064 tc->details.core.pending_msg_tail,
10065 pm);
10066 pm->client = NULL;
10067 }
10068 }
10069 break;
10070
10071 case CT_MONITOR:
10072 break;
10073
10074 case CT_COMMUNICATOR: {
10075 struct Queue *q;
10076 struct AddressListEntry *ale;
10077
10078 while (NULL != (q = tc->details.communicator.queue_head))
10079 free_queue (q);
10080 while (NULL != (ale = tc->details.communicator.addr_head))
10081 free_address_list_entry (ale);
10082 GNUNET_free (tc->details.communicator.address_prefix);
10083 }
10084 break;
10085
10086 case CT_APPLICATION:
10087 GNUNET_CONTAINER_multipeermap_iterate (tc->details.application.requests,
10088 &stop_peer_request,
10089 tc);
10090 GNUNET_CONTAINER_multipeermap_destroy (tc->details.application.requests);
10091 break;
10092 }
10093
10094}
10095 10086
10096/** 10087/**
10097 * Function called when the service shuts down. Unloads our plugins 10088 * Function called when the service shuts down. Unloads our plugins
@@ -10103,20 +10094,10 @@ static void
10103do_shutdown (void *cls) 10094do_shutdown (void *cls)
10104{ 10095{
10105 struct LearnLaunchEntry *lle; 10096 struct LearnLaunchEntry *lle;
10106 struct TransportClient *client;
10107 10097
10108 (void) cls; 10098 (void) cls;
10109 for (client = clients_head; NULL != client; client = client->next) 10099 GNUNET_CONTAINER_multipeermap_iterate (neighbours,
10110 { 10100 &free_neighbour_cb, NULL);
10111 cleanup_client (client);
10112 }
10113 //GNUNET_CONTAINER_multipeermap_iterate (neighbours,
10114 //&free_neighbour_cb, NULL);
10115 if (NULL != peerstore)
10116 {
10117 GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_NO);
10118 peerstore = NULL;
10119 }
10120 if (NULL != validation_task) 10101 if (NULL != validation_task)
10121 { 10102 {
10122 GNUNET_SCHEDULER_cancel (validation_task); 10103 GNUNET_SCHEDULER_cancel (validation_task);
@@ -10171,6 +10152,13 @@ do_shutdown (void *cls)
10171 GNUNET_CONTAINER_DLL_remove (lle_head, lle_tail, lle); 10152 GNUNET_CONTAINER_DLL_remove (lle_head, lle_tail, lle);
10172 GNUNET_free (lle); 10153 GNUNET_free (lle);
10173 } 10154 }
10155 if (NULL != peerstore)
10156 {
10157 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
10158 "Disconnecting from PEERSTORE service\n");
10159 GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_NO);
10160 peerstore = NULL;
10161 }
10174 GNUNET_CONTAINER_multishortmap_destroy (dvlearn_map); 10162 GNUNET_CONTAINER_multishortmap_destroy (dvlearn_map);
10175 dvlearn_map = NULL; 10163 dvlearn_map = NULL;
10176 GNUNET_CONTAINER_heap_destroy (validation_heap); 10164 GNUNET_CONTAINER_heap_destroy (validation_heap);
@@ -10178,6 +10166,15 @@ do_shutdown (void *cls)
10178 GNUNET_CONTAINER_multipeermap_iterate (dv_routes, &free_dv_routes_cb, NULL); 10166 GNUNET_CONTAINER_multipeermap_iterate (dv_routes, &free_dv_routes_cb, NULL);
10179 GNUNET_CONTAINER_multipeermap_destroy (dv_routes); 10167 GNUNET_CONTAINER_multipeermap_destroy (dv_routes);
10180 dv_routes = NULL; 10168 dv_routes = NULL;
10169 GNUNET_SCHEDULER_shutdown ();
10170}
10171
10172static void
10173shutdown_task (void *cls)
10174{
10175 in_shutdown = GNUNET_YES;
10176 if (NULL == clients_head)
10177 do_shutdown (cls);
10181} 10178}
10182 10179
10183 10180
@@ -10197,6 +10194,7 @@ run (void *cls,
10197 (void) service; 10194 (void) service;
10198 /* setup globals */ 10195 /* setup globals */
10199 hello_mono_time = GNUNET_TIME_absolute_get_monotonic (c); 10196 hello_mono_time = GNUNET_TIME_absolute_get_monotonic (c);
10197 in_shutdown = GNUNET_NO;
10200 GST_cfg = c; 10198 GST_cfg = c;
10201 backtalkers = GNUNET_CONTAINER_multipeermap_create (16, GNUNET_YES); 10199 backtalkers = GNUNET_CONTAINER_multipeermap_create (16, GNUNET_YES);
10202 pending_acks = GNUNET_CONTAINER_multiuuidmap_create (32768, GNUNET_YES); 10200 pending_acks = GNUNET_CONTAINER_multiuuidmap_create (32768, GNUNET_YES);
@@ -10226,7 +10224,7 @@ run (void *cls,
10226 "My identity is `%s'\n", 10224 "My identity is `%s'\n",
10227 GNUNET_i2s_full (&GST_my_identity)); 10225 GNUNET_i2s_full (&GST_my_identity));
10228 GST_stats = GNUNET_STATISTICS_create ("transport", GST_cfg); 10226 GST_stats = GNUNET_STATISTICS_create ("transport", GST_cfg);
10229 GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); 10227 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
10230 peerstore = GNUNET_PEERSTORE_connect (GST_cfg); 10228 peerstore = GNUNET_PEERSTORE_connect (GST_cfg);
10231 if (NULL == peerstore) 10229 if (NULL == peerstore)
10232 { 10230 {
diff --git a/src/transport/test_transport_api2_tcp_peer1.conf b/src/transport/test_transport_api2_tcp_peer1.conf
index bc3434069..745ed6887 100644
--- a/src/transport/test_transport_api2_tcp_peer1.conf
+++ b/src/transport/test_transport_api2_tcp_peer1.conf
@@ -14,6 +14,7 @@ BINDTO = 60002
14DISABLE_V6 = YES 14DISABLE_V6 = YES
15IMMEDIATE_START = YES 15IMMEDIATE_START = YES
16UNIXPATH = $GNUNET_RUNTIME_DIR/tcp-comm-p1.sock 16UNIXPATH = $GNUNET_RUNTIME_DIR/tcp-comm-p1.sock
17#PREFIX = valgrind --log-file=/tmp/vg_cpeer1-%p
17 18
18[peerstore] 19[peerstore]
19IMMEDIATE_START = YES 20IMMEDIATE_START = YES
diff --git a/src/transport/test_transport_api2_tcp_peer2.conf b/src/transport/test_transport_api2_tcp_peer2.conf
index 437fac65d..022468bcd 100644
--- a/src/transport/test_transport_api2_tcp_peer2.conf
+++ b/src/transport/test_transport_api2_tcp_peer2.conf
@@ -12,7 +12,7 @@ BINARY = gnunet-communicator-tcp
12BINDTO = 60003 12BINDTO = 60003
13DISABLE_V6 = YES 13DISABLE_V6 = YES
14IMMEDIATE_START = YES 14IMMEDIATE_START = YES
15PREFIX = valgrind --log-file=/tmp/vg_comm2-%p 15#PREFIX = valgrind --log-file=/tmp/vg_comm2-%p
16UNIXPATH = $GNUNET_RUNTIME_DIR/tcp-comm-p2.sock 16UNIXPATH = $GNUNET_RUNTIME_DIR/tcp-comm-p2.sock
17 17
18[peerstore] 18[peerstore]
diff --git a/src/transport/transport-testing2.c b/src/transport/transport-testing2.c
index 1461915f0..789181d1f 100644
--- a/src/transport/transport-testing2.c
+++ b/src/transport/transport-testing2.c
@@ -328,6 +328,8 @@ notify_disconnect (void *cls,
328 } 328 }
329} 329}
330 330
331static void
332retrieve_hello (void *cls);
331 333
332static void 334static void
333hello_iter_cb (void *cb_cls, 335hello_iter_cb (void *cb_cls,
@@ -339,6 +341,12 @@ hello_iter_cb (void *cb_cls,
339 { 341 {
340 p->pic = NULL; 342 p->pic = NULL;
341 LOG (GNUNET_ERROR_TYPE_DEBUG, "Iteration End\n"); 343 LOG (GNUNET_ERROR_TYPE_DEBUG, "Iteration End\n");
344 if (NULL != p->start_cb)
345 {
346 LOG (GNUNET_ERROR_TYPE_DEBUG,
347 "Did not yet get my hello. Retrying...\n");
348 p->rh_task = GNUNET_SCHEDULER_add_now (retrieve_hello, p);
349 }
342 return; 350 return;
343 } 351 }
344 // Check record type et al? 352 // Check record type et al?
@@ -536,12 +544,8 @@ GNUNET_TRANSPORT_TESTING_start_peer (struct
536 // FIXME Error handling 544 // FIXME Error handling
537 p->ah = GNUNET_TRANSPORT_application_init (p->cfg); 545 p->ah = GNUNET_TRANSPORT_application_init (p->cfg);
538 GNUNET_assert (NULL != p->ah); 546 GNUNET_assert (NULL != p->ah);
539 // FIXME Error handleing 547 // FIXME Error handling
540 p->rh_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply ( 548 p->rh_task = GNUNET_SCHEDULER_add_now (retrieve_hello, p);
541 GNUNET_TIME_UNIT_SECONDS, 10),
542 retrieve_hello,
543 p);
544 // GNUNET_assert (NULL != p->pic);
545 549
546 return p; 550 return p;
547} 551}
@@ -667,7 +671,7 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct
667 } 671 }
668 if (NULL != p->pic) 672 if (NULL != p->pic)
669 { 673 {
670 // GNUNET_PEERSTORE_iterate_cancel (p->pic); 674 GNUNET_PEERSTORE_iterate_cancel (p->pic);
671 p->pic = NULL; 675 p->pic = NULL;
672 } 676 }
673 if (NULL != p->th) 677 if (NULL != p->th)
@@ -675,19 +679,6 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct
675 GNUNET_TRANSPORT_core_disconnect (p->th); 679 GNUNET_TRANSPORT_core_disconnect (p->th);
676 p->th = NULL; 680 p->th = NULL;
677 } 681 }
678 if (NULL != p->peer)
679 {
680 if (GNUNET_OK !=
681 GNUNET_TESTING_peer_stop (p->peer))
682 {
683 LOG (GNUNET_ERROR_TYPE_DEBUG,
684 "Testing lib failed to stop peer %u (`%s')\n",
685 p->no,
686 GNUNET_i2s (&p->id));
687 }
688 GNUNET_TESTING_peer_destroy (p->peer);
689 p->peer = NULL;
690 }
691 if (NULL != p->ats) 682 if (NULL != p->ats)
692 { 683 {
693 GNUNET_ATS_connectivity_done (p->ats); 684 GNUNET_ATS_connectivity_done (p->ats);
@@ -700,9 +691,25 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct
700 } 691 }
701 if (NULL != p->ph) 692 if (NULL != p->ph)
702 { 693 {
694 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
695 "Disconnecting from PEERSTORE service\n");
703 GNUNET_PEERSTORE_disconnect (p->ph, GNUNET_NO); 696 GNUNET_PEERSTORE_disconnect (p->ph, GNUNET_NO);
704 p->ph = NULL; 697 p->ph = NULL;
705 } 698 }
699
700 if (NULL != p->peer)
701 {
702 if (GNUNET_OK !=
703 GNUNET_TESTING_peer_stop (p->peer))
704 {
705 LOG (GNUNET_ERROR_TYPE_DEBUG,
706 "Testing lib failed to stop peer %u (`%s')\n",
707 p->no,
708 GNUNET_i2s (&p->id));
709 }
710 GNUNET_TESTING_peer_destroy (p->peer);
711 p->peer = NULL;
712 }
706 if (NULL != p->hello) 713 if (NULL != p->hello)
707 { 714 {
708 GNUNET_free (p->hello); 715 GNUNET_free (p->hello);
@@ -738,16 +745,16 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct
738 * FIXME maybe schedule the application_validate somehow 745 * FIXME maybe schedule the application_validate somehow
739 */ 746 */
740/* 747/*
741static void 748 static void
742hello_offered (void *cls) 749 hello_offered (void *cls)
743{ 750 {
744 struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cc = cls; 751 struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cc = cls;
745 752
746 cc->oh = NULL; 753 cc->oh = NULL;
747 cc->tct = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, 754 cc->tct = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
748 &offer_hello, 755 &offer_hello,
749 cc); 756 cc);
750}*/ 757 }*/
751 758
752 759
753/** 760/**