From 3babde90bbccc3b5bb487e2e115fd6f5c831354e Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Wed, 5 Sep 2012 16:03:20 +0200 Subject: [PATCH] Trigger ike_updown event caused by retransmits only after reestablish() has been called This allows listeners to migrate to the new IKE_SA with the ike_reestablish event without having to worry about an ike_updown event for the old IKE_SA. --- src/libcharon/sa/ike_sa.c | 4 ++++ src/libcharon/sa/ikev1/task_manager_v1.c | 6 +----- src/libcharon/sa/ikev2/task_manager_v2.c | 5 ----- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c index e141380d2..635528c4d 100644 --- a/src/libcharon/sa/ike_sa.c +++ b/src/libcharon/sa/ike_sa.c @@ -1713,6 +1713,10 @@ METHOD(ike_sa_t, retransmit, status_t, reestablish(this); break; } + if (this->state != IKE_CONNECTING) + { + charon->bus->ike_updown(charon->bus, &this->public, FALSE); + } return DESTROY_ME; } return SUCCESS; diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c index ea836b76e..1ca8a0cf1 100644 --- a/src/libcharon/sa/ikev1/task_manager_v1.c +++ b/src/libcharon/sa/ikev1/task_manager_v1.c @@ -293,10 +293,6 @@ static status_t retransmit_packet(private_task_manager_t *this, u_int32_t seqnr, if (retransmitted > this->retransmit_tries) { DBG1(DBG_IKE, "giving up after %u retransmits", retransmitted - 1); - if (this->ike_sa->get_state(this->ike_sa) != IKE_CONNECTING) - { - charon->bus->ike_updown(charon->bus, this->ike_sa, FALSE); - } return DESTROY_ME; } t = (u_int32_t)(this->retransmit_timeout * 1000.0 * @@ -599,7 +595,7 @@ METHOD(task_manager_t, initiate, status_t, } this->initiating.seqnr++; - if (expect_response ) + if (expect_response) { message->destroy(message); return retransmit(this, this->initiating.seqnr); diff --git a/src/libcharon/sa/ikev2/task_manager_v2.c b/src/libcharon/sa/ikev2/task_manager_v2.c index 81367d21c..83e08b377 100644 --- a/src/libcharon/sa/ikev2/task_manager_v2.c +++ b/src/libcharon/sa/ikev2/task_manager_v2.c @@ -257,10 +257,6 @@ METHOD(task_manager_t, retransmit, status_t, { DBG1(DBG_IKE, "giving up after %d retransmits", this->initiating.retransmitted - 1); - if (this->ike_sa->get_state(this->ike_sa) != IKE_CONNECTING) - { - charon->bus->ike_updown(charon->bus, this->ike_sa, FALSE); - } return DESTROY_ME; } @@ -282,7 +278,6 @@ METHOD(task_manager_t, retransmit, status_t, { DBG1(DBG_IKE, "giving up after %d path probings", this->initiating.retransmitted - 1); - charon->bus->ike_updown(charon->bus, this->ike_sa, FALSE); return DESTROY_ME; }