From: Martin Willi Date: Mon, 7 Jun 2010 08:45:25 +0000 (+0200) Subject: Added support for task enumeration in task_manager_t X-Git-Tag: 4.4.1~183 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=665c18bd85b2157e2635219edb80d987aa95a8a8;p=thirdparty%2Fstrongswan.git Added support for task enumeration in task_manager_t --- diff --git a/src/libcharon/sa/task_manager.c b/src/libcharon/sa/task_manager.c index 5b575b519d..8bf6d4d51d 100644 --- a/src/libcharon/sa/task_manager.c +++ b/src/libcharon/sa/task_manager.c @@ -1013,6 +1013,22 @@ METHOD(task_manager_t, reset, void, this->reset = TRUE; } +METHOD(task_manager_t, create_task_enumerator, enumerator_t*, + private_task_manager_t *this, task_queue_t queue) +{ + switch (queue) + { + case TASK_QUEUE_ACTIVE: + return this->active_tasks->create_enumerator(this->active_tasks); + case TASK_QUEUE_PASSIVE: + return this->passive_tasks->create_enumerator(this->passive_tasks); + case TASK_QUEUE_QUEUED: + return this->queued_tasks->create_enumerator(this->queued_tasks); + default: + return enumerator_create_empty(); + } +} + METHOD(task_manager_t, destroy, void, private_task_manager_t *this) { @@ -1043,6 +1059,7 @@ task_manager_t *task_manager_create(ike_sa_t *ike_sa) .reset = _reset, .adopt_tasks = _adopt_tasks, .busy = _busy, + .create_task_enumerator = _create_task_enumerator, .destroy = _destroy, }, .ike_sa = ike_sa, diff --git a/src/libcharon/sa/task_manager.h b/src/libcharon/sa/task_manager.h index 731ed48982..14fccd5f9f 100644 --- a/src/libcharon/sa/task_manager.h +++ b/src/libcharon/sa/task_manager.h @@ -22,6 +22,7 @@ #define TASK_MANAGER_H_ typedef struct task_manager_t task_manager_t; +typedef enum task_queue_t task_queue_t; #include @@ -55,6 +56,17 @@ typedef struct task_manager_t task_manager_t; */ #define ROUTEABILITY_CHECK_TRIES 10 +/** + * Type of task queues the task manager uses to handle tasks + */ +enum task_queue_t { + /** tasks currently active, initiated by us */ + TASK_QUEUE_ACTIVE, + /** passive tasks initiated by the remote peer */ + TASK_QUEUE_PASSIVE, + /** tasks queued for initiated, but not yet activated */ + TASK_QUEUE_QUEUED, +}; /** * The task manager, juggles task and handles message exchanges. @@ -157,6 +169,15 @@ struct task_manager_t { */ bool (*busy) (task_manager_t *this); + /** + * Create an enumerator over tasks in a specific queue. + * + * @param queue queue to create an enumerator over + * @return enumerator over task_t + */ + enumerator_t* (*create_task_enumerator)(task_manager_t *this, + task_queue_t queue); + /** * Destroy the task_manager_t. */