aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-02-02 10:33:40 +0100
committerMartin Willi <martin@revosec.ch>2012-03-20 17:31:39 +0100
commitf98af1ddd589fa61aaab8902caef5f88f6a246dc (patch)
tree1a305535b4e26ce13fc6a2f2d4eabea9e868661f /src
parent5ed4b727d0fb28d3dc508e2149aeee602efe9db1 (diff)
downloadstrongswan-f98af1ddd589fa61aaab8902caef5f88f6a246dc.tar.bz2
strongswan-f98af1ddd589fa61aaab8902caef5f88f6a246dc.tar.xz
Trigger DPD not before IKE_SA state gets updated
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/sa/ike_sa.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c
index c5683e93b..bcc98709c 100644
--- a/src/libcharon/sa/ike_sa.c
+++ b/src/libcharon/sa/ike_sa.c
@@ -606,6 +606,8 @@ METHOD(ike_sa_t, get_state, ike_sa_state_t,
METHOD(ike_sa_t, set_state, void,
private_ike_sa_t *this, ike_sa_state_t state)
{
+ bool trigger_dpd = FALSE;
+
DBG2(DBG_IKE, "IKE_SA %s[%d] state change: %N => %N",
get_name(this), this->unique_id,
ike_sa_state_names, this->state,
@@ -667,19 +669,7 @@ METHOD(ike_sa_t, set_state, void,
DBG1(DBG_IKE, "maximum IKE_SA lifetime %ds", t);
}
- /* start DPD checks */
- if (this->peer_cfg->get_dpd(this->peer_cfg))
- {
- if (supports_extension(this, EXT_DPD))
- {
- this->state = state;
- send_dpd(this);
- }
- else
- {
- DBG1(DBG_IKE, "DPD not supported by peer, disabled");
- }
- }
+ trigger_dpd = this->peer_cfg->get_dpd(this->peer_cfg);
}
break;
}
@@ -696,6 +686,18 @@ METHOD(ike_sa_t, set_state, void,
}
charon->bus->ike_state_change(charon->bus, &this->public, state);
this->state = state;
+
+ if (trigger_dpd)
+ {
+ if (supports_extension(this, EXT_DPD))
+ {
+ send_dpd(this);
+ }
+ else
+ {
+ DBG1(DBG_IKE, "DPD not supported by peer, disabled");
+ }
+ }
}
METHOD(ike_sa_t, reset, void,