diff options
author | Martin Willi <martin@revosec.ch> | 2011-11-21 11:56:58 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-03-20 17:30:45 +0100 |
commit | 744c0801531a6418ff46002caf6ce2123409d405 (patch) | |
tree | 27b21a5a94edf3c7e4239d11980293cd777baa81 /src | |
parent | 3bd5fcc8328af1241599e8bf0ef673d120dff798 (diff) | |
download | strongswan-744c0801531a6418ff46002caf6ce2123409d405.tar.bz2 strongswan-744c0801531a6418ff46002caf6ce2123409d405.tar.xz |
Initiate and respond to quick mode task (stub)
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ike_sa.c | 7 | ||||
-rw-r--r-- | src/libcharon/sa/task_manager_v1.c | 16 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c index e7478bd38..11901884b 100644 --- a/src/libcharon/sa/ike_sa.c +++ b/src/libcharon/sa/ike_sa.c @@ -45,6 +45,7 @@ #include <sa/tasks/child_delete.h> #include <sa/tasks/child_rekey.h> #include <sa/tasks/main_mode.h> +#include <sa/tasks/quick_mode.h> #include <processing/jobs/retransmit_job.h> #include <processing/jobs/delete_ike_sa_job.h> #include <processing/jobs/send_dpd_job.h> @@ -1190,13 +1191,13 @@ METHOD(ike_sa_t, initiate, status_t, child_create_t *child_create = (child_create_t*)task; child_create->use_reqid(child_create, reqid); } - this->task_manager->queue_task(this->task_manager, task); } else { - /* TODO-IKEv1: create quick mode task */ + task = (task_t*)quick_mode_create(&this->public, child_cfg, + tsi, tsr); } - child_cfg->destroy(child_cfg); + this->task_manager->queue_task(this->task_manager, task); #ifdef ME if (this->peer_cfg->get_mediated_by(this->peer_cfg)) diff --git a/src/libcharon/sa/task_manager_v1.c b/src/libcharon/sa/task_manager_v1.c index 41976986e..6cc2d7592 100644 --- a/src/libcharon/sa/task_manager_v1.c +++ b/src/libcharon/sa/task_manager_v1.c @@ -18,6 +18,7 @@ #include <daemon.h> #include <sa/tasks/main_mode.h> +#include <sa/tasks/quick_mode.h> typedef struct exchange_t exchange_t; @@ -214,6 +215,12 @@ METHOD(task_manager_t, initiate, status_t, exchange = ID_PROT; } break; + case IKE_ESTABLISHED: + if (activate_task(this, TASK_QUICK_MODE)) + { + exchange = QUICK_MODE; + } + break; default: break; } @@ -230,6 +237,9 @@ METHOD(task_manager_t, initiate, status_t, case MAIN_MODE: exchange = ID_PROT; break; + case TASK_QUICK_MODE: + exchange = QUICK_MODE; + break; default: continue; } @@ -423,8 +433,10 @@ static status_t process_request(private_task_manager_t *this, /* TODO-IKEv1: agressive mode */ return FAILED; case QUICK_MODE: - /* TODO-IKEv1: quick mode */ - return FAILED; + task = (task_t *)quick_mode_create(this->ike_sa, NULL, + NULL, NULL); + this->passive_tasks->insert_last(this->passive_tasks, task); + break; case INFORMATIONAL_V1: /* TODO-IKEv1: informational */ return FAILED; |