private_ike_sa_t *this, child_cfg_t *child_cfg, u_int32_t reqid,
traffic_selector_t *tsi, traffic_selector_t *tsr)
{
- task_t *task;
-
if (this->state == IKE_CREATED)
{
resolve_hosts(this);
#endif /* ME */
{
/* normal IKE_SA with CHILD_SA */
- if (this->version == IKEV2)
- {
- task = (task_t*)child_create_create(&this->public, child_cfg, FALSE,
- tsi, tsr);
- if (reqid)
- {
- child_create_t *child_create = (child_create_t*)task;
- child_create->use_reqid(child_create, reqid);
- }
- }
- else
- {
- task = (task_t*)quick_mode_create(&this->public, child_cfg,
- tsi, tsr);
- }
- this->task_manager->queue_task(this->task_manager, task);
-
+ this->task_manager->queue_child(this->task_manager, child_cfg, reqid,
+ tsi, tsr);
#ifdef ME
if (this->peer_cfg->get_mediated_by(this->peer_cfg))
{
queue_task(this, (task_t*)isakmp_natd_create(this->ike_sa, TRUE));
}
+METHOD(task_manager_t, queue_child, void,
+ private_task_manager_t *this, child_cfg_t *cfg, u_int32_t reqid,
+ traffic_selector_t *tsi, traffic_selector_t *tsr)
+{
+ queue_task(this, (task_t*)quick_mode_create(this->ike_sa, cfg, tsi, tsr));
+}
+
METHOD(task_manager_t, queue_dpd, void,
private_task_manager_t *this)
{
.process_message = _process_message,
.queue_task = _queue_task,
.queue_ike = _queue_ike,
+ .queue_child = _queue_child,
.queue_dpd = _queue_dpd,
.initiate = _initiate,
.retransmit = _retransmit,
#endif /* ME */
}
+METHOD(task_manager_t, queue_child, void,
+ private_task_manager_t *this, child_cfg_t *cfg, u_int32_t reqid,
+ traffic_selector_t *tsi, traffic_selector_t *tsr)
+{
+ child_create_t *task;
+
+ task = child_create_create(this->ike_sa, cfg, FALSE, tsi, tsr);
+ if (reqid)
+ {
+ task->use_reqid(task, reqid);
+ }
+ queue_task(this, &task->task);
+}
+
METHOD(task_manager_t, queue_dpd, void,
private_task_manager_t *this)
{
.process_message = _process_message,
.queue_task = _queue_task,
.queue_ike = _queue_ike,
+ .queue_child = _queue_child,
.queue_dpd = _queue_dpd,
.initiate = _initiate,
.retransmit = _retransmit,
*/
void (*queue_ike)(task_manager_t *this);
+ /**
+ * Queue CHILD_SA establishing tasks.
+ *
+ * @param cfg CHILD_SA config to establish
+ * @param reqid reqid to use for CHILD_SA
+ * @param tsi initiator traffic selector, if packet-triggered
+ * @param tsr responder traffic selector, if packet-triggered
+ */
+ void (*queue_child)(task_manager_t *this, child_cfg_t *cfg, u_int32_t reqid,
+ traffic_selector_t *tsi, traffic_selector_t *tsr);
+
/**
* Queue liveness checking tasks.
*/