From: Martin Willi Date: Mon, 21 Nov 2011 10:56:58 +0000 (+0100) Subject: Initiate and respond to quick mode task (stub) X-Git-Tag: 5.0.0~338^2~9^2~458 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=744c0801531a6418ff46002caf6ce2123409d405;p=thirdparty%2Fstrongswan.git Initiate and respond to quick mode task (stub) --- diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c index e7478bd384..11901884b9 100644 --- a/src/libcharon/sa/ike_sa.c +++ b/src/libcharon/sa/ike_sa.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -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 41976986ef..6cc2d7592d 100644 --- a/src/libcharon/sa/task_manager_v1.c +++ b/src/libcharon/sa/task_manager_v1.c @@ -18,6 +18,7 @@ #include #include +#include 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;