aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/control
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcharon/control')
-rw-r--r--src/libcharon/control/controller.c19
-rw-r--r--src/libcharon/control/controller.h19
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;