From 271377905d9ff7e0a69b38be46f88b2220977535 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Tue, 26 Jun 2012 10:36:49 +0200 Subject: [PATCH] Defer quick mode initiation if we expect a mode config request --- src/libcharon/sa/ikev1/task_manager_v1.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c index 007707ed26..11d5799913 100644 --- a/src/libcharon/sa/ikev1/task_manager_v1.c +++ b/src/libcharon/sa/ikev1/task_manager_v1.c @@ -341,6 +341,24 @@ METHOD(task_manager_t, retransmit, status_t, return status; } +/** + * Check if we have to wait for a mode config before starting a quick mode + */ +static bool mode_config_expected(private_task_manager_t *this) +{ + peer_cfg_t *peer_cfg; + + peer_cfg = this->ike_sa->get_peer_cfg(this->ike_sa); + if (peer_cfg && peer_cfg->get_pool(peer_cfg)) + { + if (!this->ike_sa->get_virtual_ip(this->ike_sa, FALSE)) + { + return TRUE; + } + } + return FALSE; +} + METHOD(task_manager_t, initiate, status_t, private_task_manager_t *this) { @@ -407,7 +425,8 @@ METHOD(task_manager_t, initiate, status_t, new_mid = TRUE; break; } - if (activate_task(this, TASK_QUICK_MODE)) + if (!mode_config_expected(this) && + activate_task(this, TASK_QUICK_MODE)) { exchange = QUICK_MODE; new_mid = TRUE; -- 2.47.2