From 3229140d0264b5e51b1f9d13354ee28dc6c9b683 Mon Sep 17 00:00:00 2001 From: "Nathan S. Evans" Date: Fri, 5 Feb 2010 15:22:13 +0000 Subject: [PATCH] changes to continuations required change of state machine maintenance (or so I claim) --- src/core/gnunet-service-core.c | 51 +++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/src/core/gnunet-service-core.c b/src/core/gnunet-service-core.c index 0150ec8f3..f86514a93 100644 --- a/src/core/gnunet-service-core.c +++ b/src/core/gnunet-service-core.c @@ -1508,6 +1508,21 @@ retry_plaintext_processing (void *cls, */ static void send_key (struct Neighbour *n); +/** + * Task that will retry "send_key" if our previous attempt failed + * to yield a PONG. + */ +static void +set_key_retry_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + struct Neighbour *n = cls; + + n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK; + n->set_key_retry_frequency = + GNUNET_TIME_relative_multiply (n->set_key_retry_frequency, 2); + send_key (n); +} + /** * Check if we have plaintext messages for the specified neighbour @@ -1545,6 +1560,13 @@ process_plaintext_neighbour_queue (struct Neighbour *n) #endif return; case PEER_STATE_KEY_SENT: + if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK) + { + n->retry_set_key_task + = GNUNET_SCHEDULER_add_delayed (sched, + n->set_key_retry_frequency, + &set_key_retry_task, n); + } GNUNET_assert (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK); #if DEBUG_CORE @@ -1554,6 +1576,13 @@ process_plaintext_neighbour_queue (struct Neighbour *n) #endif return; case PEER_STATE_KEY_RECEIVED: + if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK) + { + n->retry_set_key_task + = GNUNET_SCHEDULER_add_delayed (sched, + n->set_key_retry_frequency, + &set_key_retry_task, n); + } GNUNET_assert (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK); #if DEBUG_CORE @@ -1917,22 +1946,6 @@ static struct GNUNET_SERVER_MessageHandler handlers[] = { }; -/** - * Task that will retry "send_key" if our previous attempt failed - * to yield a PONG. - */ -static void -set_key_retry_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - struct Neighbour *n = cls; - - n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK; - n->set_key_retry_frequency = - GNUNET_TIME_relative_multiply (n->set_key_retry_frequency, 2); - send_key (n); -} - - /** * PEERINFO is giving us a HELLO for a peer. Add the public key to * the neighbour's struct and retry send_key. Or, if we did not get a @@ -1962,9 +1975,9 @@ process_hello_retry_send_key (void *cls, send_key (n); else n->retry_set_key_task - = GNUNET_SCHEDULER_add_delayed (sched, - n->set_key_retry_frequency, - &set_key_retry_task, n); + = GNUNET_SCHEDULER_add_delayed (sched, + n->set_key_retry_frequency, + &set_key_retry_task, n); return; } -- 2.25.1