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)
{
.reset = _reset,
.adopt_tasks = _adopt_tasks,
.busy = _busy,
+ .create_task_enumerator = _create_task_enumerator,
.destroy = _destroy,
},
.ike_sa = ike_sa,
#define TASK_MANAGER_H_
typedef struct task_manager_t task_manager_t;
+typedef enum task_queue_t task_queue_t;
#include <limits.h>
*/
#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.
*/
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.
*/