diff options
author | Martin Willi <martin@revosec.ch> | 2012-02-02 10:33:40 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-03-20 17:31:39 +0100 |
commit | f98af1ddd589fa61aaab8902caef5f88f6a246dc (patch) | |
tree | 1a305535b4e26ce13fc6a2f2d4eabea9e868661f /src | |
parent | 5ed4b727d0fb28d3dc508e2149aeee602efe9db1 (diff) | |
download | strongswan-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.c | 28 |
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, |