diff options
Diffstat (limited to 'src/libcharon/control')
-rw-r--r-- | src/libcharon/control/controller.c | 19 | ||||
-rw-r--r-- | src/libcharon/control/controller.h | 19 |
2 files changed, 24 insertions, 14 deletions
diff --git a/src/libcharon/control/controller.c b/src/libcharon/control/controller.c index 7ba4747ac..c23bf044e 100644 --- a/src/libcharon/control/controller.c +++ b/src/libcharon/control/controller.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Tobias Brunner + * Copyright (C) 2011-2012 Tobias Brunner * Copyright (C) 2007-2011 Martin Willi * Copyright (C) 2011 revosec AG * Hochschule fuer Technik Rapperswil @@ -199,11 +199,11 @@ static bool wait_for_listener(interface_listener_t *listener, job_t *job, METHOD(logger_t, listener_log, void, interface_logger_t *this, debug_t group, level_t level, int thread, - ike_sa_t *ike_sa, char* format, va_list args) + ike_sa_t *ike_sa, char* message) { if (this->listener->ike_sa == ike_sa) { - if (!this->callback(this->param, group, level, ike_sa, format, args)) + if (!this->callback(this->param, group, level, ike_sa, message)) { this->listener->status = NEED_MORE; listener_done(this->listener); @@ -211,6 +211,14 @@ METHOD(logger_t, listener_log, void, } } +METHOD(logger_t, listener_get_level, level_t, + interface_logger_t *this, debug_t group) +{ + /* in order to allow callback listeners to decide what they want to log + * we request any log message, but only if we actually want logging */ + return this->callback == controller_cb_empty ? LEVEL_SILENT : LEVEL_PRIVATE; +} + METHOD(job_t, get_priority_medium, job_priority_t, job_t *this) { @@ -350,6 +358,7 @@ METHOD(controller_t, initiate, status_t, .logger = { .public = { .log = _listener_log, + .get_level = _listener_get_level, }, .callback = callback, .param = param, @@ -416,6 +425,7 @@ METHOD(controller_t, terminate_ike, status_t, .logger = { .public = { .log = _listener_log, + .get_level = _listener_get_level, }, .callback = callback, .param = param, @@ -494,6 +504,7 @@ METHOD(controller_t, terminate_child, status_t, .logger = { .public = { .log = _listener_log, + .get_level = _listener_get_level, }, .callback = callback, .param = param, @@ -560,7 +571,7 @@ METHOD(controller_t, terminate_child, status_t, * See header */ bool controller_cb_empty(void *param, debug_t group, level_t level, - ike_sa_t *ike_sa, char *format, va_list args) + ike_sa_t *ike_sa, char *message) { return TRUE; } diff --git a/src/libcharon/control/controller.h b/src/libcharon/control/controller.h index e7e922204..26614af32 100644 --- a/src/libcharon/control/controller.h +++ b/src/libcharon/control/controller.h @@ -24,27 +24,26 @@ #include <bus/bus.h> /** - * callback to log things triggered by controller. + * Callback to log things triggered by controller. * - * @param param echoed parameter supplied when function invoked + * @param param parameter supplied when controller method was called * @param group debugging group - * @param level verbosity level if log + * @param level verbosity level * @param ike_sa associated IKE_SA, if any - * @param format printf like format string - * @param args list of arguments to use for format - * @return FALSE to return from invoked function + * @param message log message + * @return FALSE to return from called controller method */ typedef bool (*controller_cb_t)(void* param, debug_t group, level_t level, - ike_sa_t* ike_sa, char* format, va_list args); + ike_sa_t* ike_sa, char* message); /** - * Empty callback function for controller_t functions. + * Empty callback function for controller_t methods. * * If you want to do a synchronous call, but don't need a callback, pass - * this function to the controllers methods. + * this function to the controller methods. */ bool controller_cb_empty(void *param, debug_t group, level_t level, - ike_sa_t *ike_sa, char *format, va_list args); + ike_sa_t *ike_sa, char *message); typedef struct controller_t controller_t; |