diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-09-07 18:05:22 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-09-07 18:05:22 +0200 |
commit | bcf8cdd556d23844e633c09f27e05c2395364c3d (patch) | |
tree | 943212e66dc8bec8c917790539ec2ac05a68723c /src/libcharon/sa/ike_sa.c | |
parent | ccba4f1533fd280f20d9d6e3290876feb63486e3 (diff) | |
download | strongswan-bcf8cdd556d23844e633c09f27e05c2395364c3d.tar.bz2 strongswan-bcf8cdd556d23844e633c09f27e05c2395364c3d.tar.xz |
Only initiate an exchange from send_dpd() if a task was actually queued
Otherwise, the initiator would prematurely initiate Quick Mode if it has
DPD enabled and XAuth is used.
Diffstat (limited to 'src/libcharon/sa/ike_sa.c')
-rw-r--r-- | src/libcharon/sa/ike_sa.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c index 635528c4d..c55d2b68b 100644 --- a/src/libcharon/sa/ike_sa.c +++ b/src/libcharon/sa/ike_sa.c @@ -575,6 +575,7 @@ METHOD(ike_sa_t, send_dpd, status_t, { job_t *job; time_t diff, delay; + bool task_queued = FALSE; if (this->state == IKE_PASSIVE) { @@ -595,9 +596,10 @@ METHOD(ike_sa_t, send_dpd, status_t, diff = now - last_in; if (!delay || diff >= delay) { - /* to long ago, initiate dead peer detection */ + /* too long ago, initiate dead peer detection */ DBG1(DBG_IKE, "sending DPD request"); this->task_manager->queue_dpd(this->task_manager); + task_queued = TRUE; diff = 0; } } @@ -607,7 +609,11 @@ METHOD(ike_sa_t, send_dpd, status_t, job = (job_t*)send_dpd_job_create(this->ike_sa_id); lib->scheduler->schedule_job(lib->scheduler, job, delay - diff); } - return this->task_manager->initiate(this->task_manager); + if (task_queued) + { + return this->task_manager->initiate(this->task_manager); + } + return SUCCESS; } METHOD(ike_sa_t, get_state, ike_sa_state_t, |