introduced an additional bus->signal parameter for signal specific data

added SIG_IKE/SIG_CHD macros for signal emitting
This commit is contained in:
Martin Willi
2008-07-18 15:51:40 +00:00
parent 2f725443e5
commit a4a3e0c7dc
20 changed files with 209 additions and 174 deletions
+9 -6
View File
@@ -271,6 +271,8 @@ typedef struct {
signal_t signal;
/** signal level */
level_t level;
/** signal specific user data */
void *user;
/** format string */
char *format;
/** argument list */
@@ -288,7 +290,7 @@ static bool signal_cb(entry_t *entry, signal_data_t *data)
}
entry->calling = TRUE;
if (!entry->listener->signal(entry->listener, data->signal, data->level,
data->thread, data->ike_sa, data->format, data->args))
data->thread, data->ike_sa, data->user, data->format, data->args))
{
if (entry->blocker)
{
@@ -310,7 +312,7 @@ static bool signal_cb(entry_t *entry, signal_data_t *data)
* Implementation of bus_t.vsignal.
*/
static void vsignal(private_bus_t *this, signal_t signal, level_t level,
char* format, va_list args)
void *user, char* format, va_list args)
{
signal_data_t data;
@@ -318,6 +320,7 @@ static void vsignal(private_bus_t *this, signal_t signal, level_t level,
data.thread = get_thread_number(this);
data.signal = signal;
data.level = level;
data.user = user;
data.format = format;
va_copy(data.args, args);
@@ -333,12 +336,12 @@ static void vsignal(private_bus_t *this, signal_t signal, level_t level,
* Implementation of bus_t.signal.
*/
static void signal_(private_bus_t *this, signal_t signal, level_t level,
char* format, ...)
void* data, char* format, ...)
{
va_list args;
va_start(args, format);
vsignal(this, signal, level, format, args);
vsignal(this, signal, level, data, format, args);
va_end(args);
}
@@ -363,8 +366,8 @@ bus_t *bus_create()
this->public.remove_listener = (void(*)(bus_t*,bus_listener_t*))remove_listener;
this->public.listen = (void(*)(bus_t*, bus_listener_t *listener, job_t *job))listen_;
this->public.set_sa = (void(*)(bus_t*,ike_sa_t*))set_sa;
this->public.signal = (void(*)(bus_t*,signal_t,level_t,char*,...))signal_;
this->public.vsignal = (void(*)(bus_t*,signal_t,level_t,char*,va_list))vsignal;
this->public.signal = (void(*)(bus_t*,signal_t,level_t,void*,char*,...))signal_;
this->public.vsignal = (void(*)(bus_t*,signal_t,level_t,void*,char*,va_list))vsignal;
this->public.destroy = (void(*)(bus_t*)) destroy;
this->listeners = linked_list_create();
+41 -27
View File
@@ -97,29 +97,29 @@ enum signal_t {
IKE_REKEY_FAILED,
/** signals for CHILD_SA establishment */
CHILD_UP_START,
CHILD_UP_SUCCESS,
CHILD_UP_FAILED,
CHD_UP_START,
CHD_UP_SUCCESS,
CHD_UP_FAILED,
/** signals for CHILD_SA delete */
CHILD_DOWN_START,
CHILD_DOWN_SUCCESS,
CHILD_DOWN_FAILED,
CHD_DOWN_START,
CHD_DOWN_SUCCESS,
CHD_DOWN_FAILED,
/** signals for CHILD_SA rekeying */
CHILD_REKEY_START,
CHILD_REKEY_SUCCESS,
CHILD_REKEY_FAILED,
CHD_REKEY_START,
CHD_REKEY_SUCCESS,
CHD_REKEY_FAILED,
/** signals for CHILD_SA routing */
CHILD_ROUTE_START,
CHILD_ROUTE_SUCCESS,
CHILD_ROUTE_FAILED,
CHD_ROUTE_START,
CHD_ROUTE_SUCCESS,
CHD_ROUTE_FAILED,
/** signals for CHILD_SA routing */
CHILD_UNROUTE_START,
CHILD_UNROUTE_SUCCESS,
CHILD_UNROUTE_FAILED,
CHD_UNROUTE_START,
CHD_UNROUTE_SUCCESS,
CHD_UNROUTE_FAILED,
SIG_MAX
};
@@ -161,16 +161,16 @@ enum level_t {
* @param format printf() style format string
* @param ... printf() style agument list
*/
# define DBG1(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_1, format, ##__VA_ARGS__)
# define DBG1(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_1, NULL, format, ##__VA_ARGS__)
#endif /* DEBUG_LEVEL */
#if DEBUG_LEVEL >= 2
#define DBG2(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_2, format, ##__VA_ARGS__)
#define DBG2(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_2, NULL, format, ##__VA_ARGS__)
#endif /* DEBUG_LEVEL */
#if DEBUG_LEVEL >= 3
#define DBG3(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_3, format, ##__VA_ARGS__)
#define DBG3(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_3, NULL, format, ##__VA_ARGS__)
#endif /* DEBUG_LEVEL */
#if DEBUG_LEVEL >= 4
#define DBG4(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_4, format, ##__VA_ARGS__)
#define DBG4(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_4, NULL, format, ##__VA_ARGS__)
#endif /* DEBUG_LEVEL */
#ifndef DBG1
@@ -187,13 +187,22 @@ enum level_t {
#endif /* DBG4 */
/**
* Raise a signal for an occured event.
* Raise a signal for an IKE_SA event.
*
* @param sig signal_t signal description
* @param format printf() style format string
* @param ... printf() style agument list
*/
#define SIG(sig, format, ...) charon->bus->signal(charon->bus, sig, LEVEL_0, format, ##__VA_ARGS__)
#define SIG_IKE(sig, format, ...) charon->bus->signal(charon->bus, IKE_##sig, LEVEL_0, NULL, format, ##__VA_ARGS__)
/**
* Raise a signal for an IKE event.
*
* @param sig signal_t signal description
* @param format printf() style format string
* @param ... printf() style agument list
*/
#define SIG_CHD(sig, chd, format, ...) charon->bus->signal(charon->bus, CHD_##sig, LEVEL_0, chd, format, ##__VA_ARGS__)
/**
* Get the type of a signal.
@@ -227,20 +236,21 @@ struct bus_listener_t {
* a "..." parameters to functions is not (cleanly) possible.
* The implementing signal function returns TRUE to stay registered
* to the bus, or FALSE to unregister itself.
* You should not call bus_t.signal() inside of a registered listener,
* as it WILL call itself recursively. If you do so, make shure to
* avoid infinite recursion. Watch your stack!
* Calling bus_t.signal() inside of a registered listener is possible,
* but the bus does not invoke listeners recursively.
*
* @param singal kind of the signal (up, down, rekeyed, ...)
* @param level verbosity level of the signal
* @param thread ID of the thread raised this signal
* @param ike_sa IKE_SA associated to the event
* @param data additional signal specific user data
* @param format printf() style format string
* @param args vprintf() style va_list argument list
" @return TRUE to stay registered, FALSE to unregister
*/
bool (*signal) (bus_listener_t *this, signal_t signal, level_t level,
int thread, ike_sa_t *ike_sa, char* format, va_list args);
int thread, ike_sa_t *ike_sa, void *data,
char* format, va_list args);
};
/**
@@ -310,10 +320,12 @@ struct bus_t {
*
* @param singal kind of the signal (up, down, rekeyed, ...)
* @param level verbosity level of the signal
* @param data additional signal specific user data
* @param format printf() style format string
* @param ... printf() style argument list
*/
void (*signal) (bus_t *this, signal_t signal, level_t level, char* format, ...);
void (*signal) (bus_t *this, signal_t signal, level_t level,
void *data, char* format, ...);
/**
* Send a signal to the bus using va_list arguments.
@@ -322,10 +334,12 @@ struct bus_t {
*
* @param singal kind of the signal (up, down, rekeyed, ...)
* @param level verbosity level of the signal
* @param data additional signal specific user data
* @param format printf() style format string
* @param args va_list arguments
*/
void (*vsignal) (bus_t *this, signal_t signal, level_t level, char* format, va_list args);
void (*vsignal) (bus_t *this, signal_t signal, level_t level,
void *data, char* format, va_list args);
/**
* Destroy the signal bus.
+3 -2
View File
@@ -49,7 +49,8 @@ struct private_file_logger_t {
* Implementation of bus_listener_t.signal.
*/
static bool signal_(private_file_logger_t *this, signal_t signal, level_t level,
int thread, ike_sa_t* ike_sa, char *format, va_list args)
int thread, ike_sa_t* ike_sa, void *data,
char *format, va_list args)
{
if (level <= this->levels[SIG_TYPE(signal)])
{
@@ -111,7 +112,7 @@ file_logger_t *file_logger_create(FILE *out)
private_file_logger_t *this = malloc_thing(private_file_logger_t);
/* public functions */
this->public.listener.signal = (bool(*)(bus_listener_t*,signal_t,level_t,int,ike_sa_t*,char*,va_list))signal_;
this->public.listener.signal = (bool(*)(bus_listener_t*,signal_t,level_t,int,ike_sa_t*,void*,char*,va_list))signal_;
this->public.set_level = (void(*)(file_logger_t*,signal_t,level_t))set_level;
this->public.destroy = (void(*)(file_logger_t*))destroy;
+3 -2
View File
@@ -50,7 +50,8 @@ struct private_sys_logger_t {
* Implementation of bus_listener_t.signal.
*/
static bool signal_(private_sys_logger_t *this, signal_t signal, level_t level,
int thread, ike_sa_t* ike_sa, char *format, va_list args)
int thread, ike_sa_t* ike_sa, void *data,
char *format, va_list args)
{
if (level <= this->levels[SIG_TYPE(signal)])
{
@@ -114,7 +115,7 @@ sys_logger_t *sys_logger_create(int facility)
private_sys_logger_t *this = malloc_thing(private_sys_logger_t);
/* public functions */
this->public.listener.signal = (bool(*)(bus_listener_t*,signal_t,level_t,int,ike_sa_t*,char*,va_list))signal_;
this->public.listener.signal = (bool(*)(bus_listener_t*,signal_t,level_t,int,ike_sa_t*,void*,char*,va_list))signal_;
this->public.set_level = (void(*)(sys_logger_t*,signal_t,level_t))set_level;
this->public.destroy = (void(*)(sys_logger_t*))destroy;