Added support for task enumeration in task_manager_t
This commit is contained in:
@@ -1013,6 +1013,22 @@ METHOD(task_manager_t, reset, void,
|
|||||||
this->reset = TRUE;
|
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,
|
METHOD(task_manager_t, destroy, void,
|
||||||
private_task_manager_t *this)
|
private_task_manager_t *this)
|
||||||
{
|
{
|
||||||
@@ -1043,6 +1059,7 @@ task_manager_t *task_manager_create(ike_sa_t *ike_sa)
|
|||||||
.reset = _reset,
|
.reset = _reset,
|
||||||
.adopt_tasks = _adopt_tasks,
|
.adopt_tasks = _adopt_tasks,
|
||||||
.busy = _busy,
|
.busy = _busy,
|
||||||
|
.create_task_enumerator = _create_task_enumerator,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
.ike_sa = ike_sa,
|
.ike_sa = ike_sa,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#define TASK_MANAGER_H_
|
#define TASK_MANAGER_H_
|
||||||
|
|
||||||
typedef struct task_manager_t task_manager_t;
|
typedef struct task_manager_t task_manager_t;
|
||||||
|
typedef enum task_queue_t task_queue_t;
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
@@ -55,6 +56,17 @@ typedef struct task_manager_t task_manager_t;
|
|||||||
*/
|
*/
|
||||||
#define ROUTEABILITY_CHECK_TRIES 10
|
#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.
|
* The task manager, juggles task and handles message exchanges.
|
||||||
@@ -157,6 +169,15 @@ struct task_manager_t {
|
|||||||
*/
|
*/
|
||||||
bool (*busy) (task_manager_t *this);
|
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.
|
* Destroy the task_manager_t.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user