aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/sa/ike_sa.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-09-07 18:05:22 +0200
committerTobias Brunner <tobias@strongswan.org>2012-09-07 18:05:22 +0200
commitbcf8cdd556d23844e633c09f27e05c2395364c3d (patch)
tree943212e66dc8bec8c917790539ec2ac05a68723c /src/libcharon/sa/ike_sa.c
parentccba4f1533fd280f20d9d6e3290876feb63486e3 (diff)
downloadstrongswan-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.c10
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,