aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-09-05 16:03:20 +0200
committerTobias Brunner <tobias@strongswan.org>2012-09-06 11:27:28 +0200
commit3babde90bbccc3b5bb487e2e115fd6f5c831354e (patch)
tree659d4c5e7ec2a4ebbb09c3aada0a1a68bb832462 /src
parentd7d2a5ec3852d17a137504f16a5d70b04164ec9c (diff)
downloadstrongswan-3babde90bbccc3b5bb487e2e115fd6f5c831354e.tar.bz2
strongswan-3babde90bbccc3b5bb487e2e115fd6f5c831354e.tar.xz
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.
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/sa/ike_sa.c4
-rw-r--r--src/libcharon/sa/ikev1/task_manager_v1.c6
-rw-r--r--src/libcharon/sa/ikev2/task_manager_v2.c5
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;
}