diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2021-02-26 15:14:03 +0100 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2021-02-26 15:14:03 +0100 |
commit | b2ef30b3eb815fbb34a519581e1afc8bac393269 (patch) | |
tree | a47374db9d377a98eb3e5863ec532f550ebf8a16 /src/transport/gnunet-service-tng.c | |
parent | 6edac715d38f2126ea7316373cfd27c3d76b05cf (diff) | |
download | gnunet-b2ef30b3eb815fbb34a519581e1afc8bac393269.tar.gz gnunet-b2ef30b3eb815fbb34a519581e1afc8bac393269.zip |
-First message through TNG test done
Diffstat (limited to 'src/transport/gnunet-service-tng.c')
-rw-r--r-- | src/transport/gnunet-service-tng.c | 124 |
1 files changed, 61 insertions, 63 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 | */ |
2773 | static struct GNUNET_TIME_Absolute hello_mono_time; | 2773 | static 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 | */ | ||
2779 | static 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 | ||
3684 | static void | ||
3685 | do_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 | ||
10049 | void | ||
10050 | cleanup_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 | |||
10103 | do_shutdown (void *cls) | 10094 | do_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 | |||
10172 | static void | ||
10173 | shutdown_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 | { |