From: Martin Willi Date: Fri, 9 Dec 2011 15:19:37 +0000 (+0100) Subject: Queue Mode Config tasks when required X-Git-Tag: 5.0.0~338^2~9^2~268 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=156b8662a64a4e251470de1e42213bc66f8e772e;p=thirdparty%2Fstrongswan.git Queue Mode Config tasks when required --- diff --git a/src/libcharon/sa/task_manager_v1.c b/src/libcharon/sa/task_manager_v1.c index 7fda51eeb1..e899b0687c 100755 --- a/src/libcharon/sa/task_manager_v1.c +++ b/src/libcharon/sa/task_manager_v1.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -287,6 +288,12 @@ METHOD(task_manager_t, initiate, status_t, } break; case IKE_ESTABLISHED: + if (activate_task(this, TASK_MODE_CONFIG)) + { + exchange = TRANSACTION; + new_mid = TRUE; + break; + } if (activate_task(this, TASK_QUICK_MODE)) { exchange = QUICK_MODE; @@ -400,15 +407,11 @@ METHOD(task_manager_t, initiate, status_t, { return retransmit(this, this->initiating.seqnr); } - else - { - charon->sender->send(charon->sender, - this->initiating.packet->clone(this->initiating.packet)); - - this->initiating.packet->destroy(this->initiating.packet); - this->initiating.packet = NULL; - return SUCCESS; - } + charon->sender->send(charon->sender, + this->initiating.packet->clone(this->initiating.packet)); + this->initiating.packet->destroy(this->initiating.packet); + this->initiating.packet = NULL; + return SUCCESS; } /** @@ -654,7 +657,14 @@ static status_t process_request(private_task_manager_t *this, enumerator->destroy(enumerator); break; case TRANSACTION: - task = (task_t *)xauth_create(this->ike_sa, FALSE); + if (this->ike_sa->get_state(this->ike_sa) == IKE_ESTABLISHED) + { + task = (task_t *)mode_config_create(this->ike_sa, FALSE); + } + else + { + task = (task_t *)xauth_create(this->ike_sa, FALSE); + } this->passive_tasks->insert_last(this->passive_tasks, task); break; default: diff --git a/src/libcharon/sa/tasks/main_mode.c b/src/libcharon/sa/tasks/main_mode.c index d31458b078..cea0631feb 100755 --- a/src/libcharon/sa/tasks/main_mode.c +++ b/src/libcharon/sa/tasks/main_mode.c @@ -29,6 +29,7 @@ #include #include #include +#include typedef struct private_main_mode_t private_main_mode_t; @@ -824,6 +825,12 @@ METHOD(task_t, build_r, status_t, return FAILED; } + if (this->peer_cfg->get_virtual_ip(this->peer_cfg)) + { + this->ike_sa->queue_task(this->ike_sa, + (task_t*)mode_config_create(this->ike_sa, TRUE)); + } + switch (this->auth_method) { case AUTH_XAUTH_INIT_PSK: