From 46897273d76c9f1cfa4fa6f2184adb5e84f01836 Mon Sep 17 00:00:00 2001 From: Clavister OpenSource Date: Thu, 24 Nov 2011 16:35:22 +0100 Subject: [PATCH] IKEv1 XAuth: Added new "swap_initiator" method to the standard task_t interface. This is needed for when we move a task from the passive queue to the active one. I'm not a huge fan of this method of doing things. Perhaps we should change task_t to have build_i, build_r, process_i, and process_r methods, and call the appropriate one from the task manager, since we have these methods for most tasks anyways. --- src/libcharon/sa/tasks/task.h | 5 +++++ src/libcharon/sa/tasks/xauth_request.c | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/libcharon/sa/tasks/task.h b/src/libcharon/sa/tasks/task.h index ad41bae7f..eebfb7a57 100644 --- a/src/libcharon/sa/tasks/task.h +++ b/src/libcharon/sa/tasks/task.h @@ -151,6 +151,11 @@ struct task_t { * Destroys a task_t object. */ void (*destroy) (task_t *this); + + /** + * Swaps the initiator flag in a task (if applicable, NULL OK) + */ + void (*swap_initiator) (task_t *this); }; #endif /** TASK_H_ @}*/ diff --git a/src/libcharon/sa/tasks/xauth_request.c b/src/libcharon/sa/tasks/xauth_request.c index 09ddb90f4..0a35889e1 100644 --- a/src/libcharon/sa/tasks/xauth_request.c +++ b/src/libcharon/sa/tasks/xauth_request.c @@ -221,6 +221,23 @@ METHOD(task_t, destroy, void, free(this); } +METHOD(task_t, swap_initiator, void, + private_xauth_request_t *this) +{ + if(this->initiator) + { + this->public.task.build = _build_r; + this->public.task.process = _process_r; + this->initiator = FALSE; + } + else + { + this->public.task.build = _build_i; + this->public.task.process = _process_i; + this->initiator = TRUE; + } +} + /* * Described in header. */ @@ -234,6 +251,7 @@ xauth_request_t *xauth_request_create(ike_sa_t *ike_sa, bool initiator) .get_type = _get_type, .migrate = _migrate, .destroy = _destroy, + .swap_initiator = _swap_initiator, }, }, .initiator = initiator,