diff options
author | t3sserakt <t3ss@posteo.de> | 2021-02-02 13:20:04 +0100 |
---|---|---|
committer | t3sserakt <t3ss@posteo.de> | 2021-02-02 13:20:04 +0100 |
commit | 7eeceb994d27f5bb6c360ce518b40074a1e0ce22 (patch) | |
tree | 30333577af1765f77b9ac0a4510c63a7913a5cbb /src/transport/gnunet-communicator-udp.c | |
parent | 2741db1300fddb17e39373fb9d649b7022ed81d3 (diff) | |
download | gnunet-7eeceb994d27f5bb6c360ce518b40074a1e0ce22.tar.gz gnunet-7eeceb994d27f5bb6c360ce518b40074a1e0ce22.zip |
- refactored singleton worker task for udp com. to be per sender. refactored test code to only accept packet loss in case of timeout.
Diffstat (limited to 'src/transport/gnunet-communicator-udp.c')
-rw-r--r-- | src/transport/gnunet-communicator-udp.c | 95 |
1 files changed, 56 insertions, 39 deletions
diff --git a/src/transport/gnunet-communicator-udp.c b/src/transport/gnunet-communicator-udp.c index 2e09bc9d2..415dc4b48 100644 --- a/src/transport/gnunet-communicator-udp.c +++ b/src/transport/gnunet-communicator-udp.c | |||
@@ -574,6 +574,22 @@ struct SenderAddress | |||
574 | * sender_destroy already called on sender. | 574 | * sender_destroy already called on sender. |
575 | */ | 575 | */ |
576 | int sender_destroy_called; | 576 | int sender_destroy_called; |
577 | |||
578 | |||
579 | /** | ||
580 | * ID of kce working queue task | ||
581 | */ | ||
582 | struct GNUNET_SCHEDULER_Task *kce_task; | ||
583 | |||
584 | /** | ||
585 | * ID of kce rekey working queue task | ||
586 | */ | ||
587 | struct GNUNET_SCHEDULER_Task *kce_task_rekey; | ||
588 | |||
589 | /** | ||
590 | * Is the kce_task finished? | ||
591 | */ | ||
592 | int kce_task_finished; | ||
577 | }; | 593 | }; |
578 | 594 | ||
579 | 595 | ||
@@ -789,21 +805,6 @@ static struct GNUNET_SCHEDULER_Task *read_task; | |||
789 | static struct GNUNET_SCHEDULER_Task *timeout_task; | 805 | static struct GNUNET_SCHEDULER_Task *timeout_task; |
790 | 806 | ||
791 | /** | 807 | /** |
792 | * ID of kce working queue task | ||
793 | */ | ||
794 | static struct GNUNET_SCHEDULER_Task *kce_task; | ||
795 | |||
796 | /** | ||
797 | * ID of kce rekey working queue task | ||
798 | */ | ||
799 | static struct GNUNET_SCHEDULER_Task *kce_task_rekey; | ||
800 | |||
801 | /** | ||
802 | * Is the kce_task finished? | ||
803 | */ | ||
804 | static int kce_task_finished = GNUNET_NO; | ||
805 | |||
806 | /** | ||
807 | * ID of master broadcast task | 808 | * ID of master broadcast task |
808 | */ | 809 | */ |
809 | static struct GNUNET_SCHEDULER_Task *broadcast_task; | 810 | static struct GNUNET_SCHEDULER_Task *broadcast_task; |
@@ -1744,7 +1745,8 @@ static void | |||
1744 | kce_generate_cb (void *cls) | 1745 | kce_generate_cb (void *cls) |
1745 | { | 1746 | { |
1746 | struct SharedSecret *ss = cls; | 1747 | struct SharedSecret *ss = cls; |
1747 | kce_task = NULL; | 1748 | |
1749 | ss->sender->kce_task = NULL; | ||
1748 | 1750 | ||
1749 | if (((GNUNET_NO == ss->sender->rekeying) && (ss->sender->acks_available < | 1751 | if (((GNUNET_NO == ss->sender->rekeying) && (ss->sender->acks_available < |
1750 | KCN_TARGET) ) || | 1752 | KCN_TARGET) ) || |
@@ -1759,16 +1761,17 @@ kce_generate_cb (void *cls) | |||
1759 | for (int i = 0; i < GENERATE_AT_ONCE; i++) | 1761 | for (int i = 0; i < GENERATE_AT_ONCE; i++) |
1760 | kce_generate (ss, ++ss->sequence_allowed); | 1762 | kce_generate (ss, ++ss->sequence_allowed); |
1761 | 1763 | ||
1762 | kce_task = GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL, | 1764 | ss->sender->kce_task = GNUNET_SCHEDULER_add_delayed ( |
1763 | kce_generate_cb, | 1765 | WORKING_QUEUE_INTERVALL, |
1764 | ss); | 1766 | kce_generate_cb, |
1767 | ss); | ||
1765 | } | 1768 | } |
1766 | else | 1769 | else |
1767 | { | 1770 | { |
1768 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1771 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1769 | "We have enough keys.\n"); | 1772 | "We have enough keys.\n"); |
1770 | ss_finished = ss; | 1773 | ss_finished = ss; |
1771 | kce_task_finished = GNUNET_YES; | 1774 | ss->sender->kce_task_finished = GNUNET_YES; |
1772 | } | 1775 | } |
1773 | 1776 | ||
1774 | 1777 | ||
@@ -1779,9 +1782,10 @@ static void | |||
1779 | kce_generate_rekey_cb (void *cls) | 1782 | kce_generate_rekey_cb (void *cls) |
1780 | { | 1783 | { |
1781 | struct SharedSecret *ss = cls; | 1784 | struct SharedSecret *ss = cls; |
1782 | kce_task_rekey = NULL; | ||
1783 | 1785 | ||
1784 | if (NULL == kce_task) | 1786 | ss->sender->kce_task_rekey = NULL; |
1787 | |||
1788 | if (NULL == ss->sender->kce_task) | ||
1785 | { | 1789 | { |
1786 | 1790 | ||
1787 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1791 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -1791,16 +1795,18 @@ kce_generate_rekey_cb (void *cls) | |||
1791 | for (int i = 0; i < GENERATE_AT_ONCE; i++) | 1795 | for (int i = 0; i < GENERATE_AT_ONCE; i++) |
1792 | kce_generate (ss, ++ss->sequence_allowed); | 1796 | kce_generate (ss, ++ss->sequence_allowed); |
1793 | 1797 | ||
1794 | kce_task = GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL, | 1798 | ss->sender->kce_task = GNUNET_SCHEDULER_add_delayed ( |
1795 | kce_generate_cb, | 1799 | WORKING_QUEUE_INTERVALL, |
1796 | ss); | 1800 | kce_generate_cb, |
1797 | kce_task_rekey = NULL; | 1801 | ss); |
1802 | ss->sender->kce_task_rekey = NULL; | ||
1798 | } | 1803 | } |
1799 | else | 1804 | else |
1800 | { | 1805 | { |
1801 | kce_task_rekey = GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL, | 1806 | ss->sender->kce_task_rekey = GNUNET_SCHEDULER_add_delayed ( |
1802 | kce_generate_rekey_cb, | 1807 | WORKING_QUEUE_INTERVALL, |
1803 | ss); | 1808 | kce_generate_rekey_cb, |
1809 | ss); | ||
1804 | } | 1810 | } |
1805 | } | 1811 | } |
1806 | 1812 | ||
@@ -1817,6 +1823,14 @@ kce_generate_rekey_cb (void *cls) | |||
1817 | static void | 1823 | static void |
1818 | consider_ss_ack (struct SharedSecret *ss, int initial) | 1824 | consider_ss_ack (struct SharedSecret *ss, int initial) |
1819 | { | 1825 | { |
1826 | struct GNUNET_SCHEDULER_Task *kce_task_rekey; | ||
1827 | struct GNUNET_SCHEDULER_Task *kce_task; | ||
1828 | int kce_task_finished; | ||
1829 | |||
1830 | kce_task_rekey = ss->sender->kce_task_rekey; | ||
1831 | kce_task_finished = ss->sender->kce_task_finished; | ||
1832 | kce_task = ss->sender->kce_task; | ||
1833 | |||
1820 | GNUNET_assert (NULL != ss->sender); | 1834 | GNUNET_assert (NULL != ss->sender); |
1821 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1835 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1822 | "Considering SS UDPAck %s\n", | 1836 | "Considering SS UDPAck %s\n", |
@@ -1886,6 +1900,7 @@ consider_ss_ack (struct SharedSecret *ss, int initial) | |||
1886 | kce_task = GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL, | 1900 | kce_task = GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL, |
1887 | kce_generate_cb, | 1901 | kce_generate_cb, |
1888 | ss); | 1902 | ss); |
1903 | kce_task_finished = GNUNET_NO; | ||
1889 | 1904 | ||
1890 | } | 1905 | } |
1891 | else if ((NULL == kce_task_rekey) && (GNUNET_YES == | 1906 | else if ((NULL == kce_task_rekey) && (GNUNET_YES == |
@@ -3247,6 +3262,18 @@ get_sender_delete_it (void *cls, | |||
3247 | 3262 | ||
3248 | (void) cls; | 3263 | (void) cls; |
3249 | (void) target; | 3264 | (void) target; |
3265 | |||
3266 | if (NULL != sender->kce_task_rekey) | ||
3267 | { | ||
3268 | GNUNET_SCHEDULER_cancel (sender->kce_task_rekey); | ||
3269 | sender->kce_task_rekey = NULL; | ||
3270 | } | ||
3271 | if (NULL != sender->kce_task) | ||
3272 | { | ||
3273 | GNUNET_SCHEDULER_cancel (sender->kce_task); | ||
3274 | sender->kce_task = NULL; | ||
3275 | } | ||
3276 | |||
3250 | sender_destroy (sender); | 3277 | sender_destroy (sender); |
3251 | return GNUNET_OK; | 3278 | return GNUNET_OK; |
3252 | } | 3279 | } |
@@ -3274,16 +3301,6 @@ do_shutdown (void *cls) | |||
3274 | GNUNET_SCHEDULER_cancel (broadcast_task); | 3301 | GNUNET_SCHEDULER_cancel (broadcast_task); |
3275 | broadcast_task = NULL; | 3302 | broadcast_task = NULL; |
3276 | } | 3303 | } |
3277 | if (NULL != kce_task_rekey) | ||
3278 | { | ||
3279 | GNUNET_SCHEDULER_cancel (kce_task_rekey); | ||
3280 | kce_task_rekey = NULL; | ||
3281 | } | ||
3282 | if (NULL != kce_task) | ||
3283 | { | ||
3284 | GNUNET_SCHEDULER_cancel (kce_task); | ||
3285 | kce_task = NULL; | ||
3286 | } | ||
3287 | if (NULL != timeout_task) | 3304 | if (NULL != timeout_task) |
3288 | { | 3305 | { |
3289 | GNUNET_SCHEDULER_cancel (timeout_task); | 3306 | GNUNET_SCHEDULER_cancel (timeout_task); |