aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2011-11-21 11:56:58 +0100
committerMartin Willi <martin@revosec.ch>2012-03-20 17:30:45 +0100
commit744c0801531a6418ff46002caf6ce2123409d405 (patch)
tree27b21a5a94edf3c7e4239d11980293cd777baa81 /src
parent3bd5fcc8328af1241599e8bf0ef673d120dff798 (diff)
downloadstrongswan-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.c7
-rw-r--r--src/libcharon/sa/task_manager_v1.c16
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;