diff options
author | Martin Willi <martin@revosec.ch> | 2011-12-09 16:19:37 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-03-20 17:31:16 +0100 |
commit | 156b8662a64a4e251470de1e42213bc66f8e772e (patch) | |
tree | 3cd8f4e7f4c329ac22e68a1d281a79a629808083 /src/libcharon/sa/task_manager_v1.c | |
parent | b155084c42277a4a72f2b90997b6c5d32708aef3 (diff) | |
download | strongswan-156b8662a64a4e251470de1e42213bc66f8e772e.tar.bz2 strongswan-156b8662a64a4e251470de1e42213bc66f8e772e.tar.xz |
Queue Mode Config tasks when required
Diffstat (limited to 'src/libcharon/sa/task_manager_v1.c')
-rwxr-xr-x | src/libcharon/sa/task_manager_v1.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/libcharon/sa/task_manager_v1.c b/src/libcharon/sa/task_manager_v1.c index 7fda51eeb..e899b0687 100755 --- a/src/libcharon/sa/task_manager_v1.c +++ b/src/libcharon/sa/task_manager_v1.c @@ -23,6 +23,7 @@ #include <sa/tasks/main_mode.h> #include <sa/tasks/quick_mode.h> #include <sa/tasks/xauth.h> +#include <sa/tasks/mode_config.h> #include <sa/tasks/ike_delete.h> #include <sa/tasks/ike_natd_v1.h> #include <sa/tasks/ike_vendor_v1.h> @@ -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: |