time_t diff, delay;
delay = this->peer_cfg->get_dpd(this->peer_cfg);
-
- if (delay == 0)
- {
- /* DPD disabled */
- return SUCCESS;
- }
-
if (this->task_manager->busy(this->task_manager))
{
/* an exchange is in the air, no need to start a DPD check */
last_in = get_use_time(this, TRUE);
now = time_monotonic(NULL);
diff = now - last_in;
- if (diff >= delay)
+ if (!delay || diff >= delay)
{
/* to long ago, initiate dead peer detection */
task_t *task;
}
}
/* recheck in "interval" seconds */
- job = (job_t*)send_dpd_job_create(this->ike_sa_id);
- lib->scheduler->schedule_job(lib->scheduler, job, delay - diff);
+ if (delay)
+ {
+ job = (job_t*)send_dpd_job_create(this->ike_sa_id);
+ lib->scheduler->schedule_job(lib->scheduler, job, delay - diff);
+ }
return SUCCESS;
}
}
/* start DPD checks */
- send_dpd(this);
+ if (this->peer_cfg->get_dpd(this->peer_cfg))
+ {
+ send_dpd(this);
+ }
}
break;
}