aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-communicator-udp.c
diff options
context:
space:
mode:
authort3sserakt <t3ss@posteo.de>2021-02-02 13:20:04 +0100
committert3sserakt <t3ss@posteo.de>2021-02-02 13:20:04 +0100
commit7eeceb994d27f5bb6c360ce518b40074a1e0ce22 (patch)
tree30333577af1765f77b9ac0a4510c63a7913a5cbb /src/transport/gnunet-communicator-udp.c
parent2741db1300fddb17e39373fb9d649b7022ed81d3 (diff)
downloadgnunet-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.c95
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;
789static struct GNUNET_SCHEDULER_Task *timeout_task; 805static struct GNUNET_SCHEDULER_Task *timeout_task;
790 806
791/** 807/**
792 * ID of kce working queue task
793 */
794static struct GNUNET_SCHEDULER_Task *kce_task;
795
796/**
797 * ID of kce rekey working queue task
798 */
799static struct GNUNET_SCHEDULER_Task *kce_task_rekey;
800
801/**
802 * Is the kce_task finished?
803 */
804static int kce_task_finished = GNUNET_NO;
805
806/**
807 * ID of master broadcast task 808 * ID of master broadcast task
808 */ 809 */
809static struct GNUNET_SCHEDULER_Task *broadcast_task; 810static struct GNUNET_SCHEDULER_Task *broadcast_task;
@@ -1744,7 +1745,8 @@ static void
1744kce_generate_cb (void *cls) 1745kce_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
1779kce_generate_rekey_cb (void *cls) 1782kce_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)
1817static void 1823static void
1818consider_ss_ack (struct SharedSecret *ss, int initial) 1824consider_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);