aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-01-10 17:26:42 +0100
committerMartin Willi <martin@revosec.ch>2012-03-20 17:31:35 +0100
commitff6b084ac4e9ca27a306a2836f7b341d9129ea5b (patch)
tree28cc7d62ba82549e0b2d9295229f16cc20728b91 /src
parent2ddd45c9a76a77d673cca5ce0bd2ea0bb7ee859a (diff)
downloadstrongswan-ff6b084ac4e9ca27a306a2836f7b341d9129ea5b.tar.bz2
strongswan-ff6b084ac4e9ca27a306a2836f7b341d9129ea5b.tar.xz
Confirm message reception time only if DPD sequence number valid
Diffstat (limited to 'src')
-rwxr-xr-xsrc/libcharon/sa/ikev1/task_manager_v1.c11
-rwxr-xr-xsrc/libcharon/sa/ikev1/tasks/isakmp_dpd.c2
2 files changed, 10 insertions, 3 deletions
diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c
index ec5eee155..562a9eb42 100755
--- a/src/libcharon/sa/ikev1/task_manager_v1.c
+++ b/src/libcharon/sa/ikev1/task_manager_v1.c
@@ -735,7 +735,7 @@ static status_t process_request(private_task_manager_t *this,
{
enumerator_t *enumerator;
task_t *task = NULL;
- bool send_response = FALSE;
+ bool send_response = FALSE, dpd = FALSE;
notify_payload_t *notify;
chunk_t data;
@@ -790,11 +790,13 @@ static status_t process_request(private_task_manager_t *this,
}
task = (task_t *)isakmp_dpd_create(this->ike_sa, FALSE,
this->dpd_recv++);
+ dpd = TRUE;
}
else if (message->get_notify(message, DPD_R_U_THERE_ACK))
{
task = (task_t *)isakmp_dpd_create(this->ike_sa, TRUE,
this->dpd_send - 1);
+ dpd = TRUE;
}
else
{
@@ -817,6 +819,11 @@ static status_t process_request(private_task_manager_t *this,
return FAILED;
}
}
+ if (!dpd)
+ {
+ this->ike_sa->set_statistic(this->ike_sa, STAT_INBOUND,
+ time_monotonic(NULL));
+ }
/* let the tasks process the message */
enumerator = this->passive_tasks->create_enumerator(this->passive_tasks);
while (enumerator->enumerate(enumerator, (void*)&task))
@@ -1117,8 +1124,6 @@ METHOD(task_manager_t, process_message, status_t,
lib->settings->get_int(lib->settings,
"charon.half_open_timeout", HALF_OPEN_IKE_SA_TIMEOUT));
}
- this->ike_sa->set_statistic(this->ike_sa, STAT_INBOUND,
- time_monotonic(NULL));
this->ike_sa->update_hosts(this->ike_sa, me, other, TRUE);
charon->bus->message(charon->bus, msg, TRUE);
if (process_request(this, msg) != SUCCESS)
diff --git a/src/libcharon/sa/ikev1/tasks/isakmp_dpd.c b/src/libcharon/sa/ikev1/tasks/isakmp_dpd.c
index e2ed17dcd..e470e90ad 100755
--- a/src/libcharon/sa/ikev1/tasks/isakmp_dpd.c
+++ b/src/libcharon/sa/ikev1/tasks/isakmp_dpd.c
@@ -91,6 +91,8 @@ METHOD(task_t, process, status_t,
seqnr = untoh32(chunk.ptr);
if (seqnr == this->seqnr)
{
+ this->ike_sa->set_statistic(this->ike_sa, STAT_INBOUND,
+ time_monotonic(NULL));
if (!this->initiator)
{ /* queue DPD_ACK */
this->ike_sa->queue_task(this->ike_sa,