diff options
author | Martin Willi <martin@revosec.ch> | 2012-11-14 12:17:10 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-11-30 15:47:59 +0100 |
commit | f1f500c724e6a03ec8f08b3395237f7e72a31fb9 (patch) | |
tree | 12344af6c83a2f065c39ff5ae9d59de5da416651 /src | |
parent | cd7495946552ab716380f587831d89da1392db1e (diff) | |
download | strongswan-f1f500c724e6a03ec8f08b3395237f7e72a31fb9.tar.bz2 strongswan-f1f500c724e6a03ec8f08b3395237f7e72a31fb9.tar.xz |
Add an IMC constructor taking a set of custom TNC_IMC functions
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/plugins/tnc_imc/tnc_imc.c | 45 | ||||
-rw-r--r-- | src/libcharon/plugins/tnc_imc/tnc_imc.h | 18 |
2 files changed, 60 insertions, 3 deletions
diff --git a/src/libcharon/plugins/tnc_imc/tnc_imc.c b/src/libcharon/plugins/tnc_imc/tnc_imc.c index 521065014..d49f3dd08 100644 --- a/src/libcharon/plugins/tnc_imc/tnc_imc.c +++ b/src/libcharon/plugins/tnc_imc/tnc_imc.c @@ -315,9 +315,9 @@ METHOD(imc_t, destroy, void, } /** - * Described in header. + * Generic constructor */ -imc_t* tnc_imc_create(char *name, char *path) +static private_tnc_imc_t* tnc_imc_create_empty(char *name) { private_tnc_imc_t *this; @@ -338,6 +338,18 @@ imc_t* tnc_imc_create(char *name, char *path) .mutex = mutex_create(MUTEX_TYPE_DEFAULT), ); + return this; +} + +/** + * See header + */ +imc_t* tnc_imc_create(char *name, char *path) +{ + private_tnc_imc_t *this; + + this = tnc_imc_create_empty(name); + this->handle = dlopen(path, RTLD_LAZY); if (!this->handle) { @@ -384,3 +396,32 @@ imc_t* tnc_imc_create(char *name, char *path) return &this->public; } + +/** + * See header + */ +imc_t* tnc_imc_create_from_functions(char *name, + TNC_IMC_InitializePointer initialize, + TNC_IMC_NotifyConnectionChangePointer notify_connection_change, + TNC_IMC_BeginHandshakePointer begin_handshake, + TNC_IMC_ReceiveMessagePointer receive_message, + TNC_IMC_ReceiveMessageLongPointer receive_message_long, + TNC_IMC_BatchEndingPointer batch_ending, + TNC_IMC_TerminatePointer terminate, + TNC_IMC_ProvideBindFunctionPointer provide_bind_function) +{ + private_tnc_imc_t *this; + + this = tnc_imc_create_empty(name); + + this->public.initialize = initialize; + this->public.notify_connection_change = notify_connection_change; + this->public.begin_handshake = begin_handshake; + this->public.receive_message = receive_message; + this->public.receive_message_long = receive_message_long; + this->public.batch_ending = batch_ending; + this->public.terminate = terminate; + this->public.provide_bind_function = provide_bind_function; + + return &this->public; +} diff --git a/src/libcharon/plugins/tnc_imc/tnc_imc.h b/src/libcharon/plugins/tnc_imc/tnc_imc.h index 10a67f90b..ff606a822 100644 --- a/src/libcharon/plugins/tnc_imc/tnc_imc.h +++ b/src/libcharon/plugins/tnc_imc/tnc_imc.h @@ -25,7 +25,7 @@ #include <tnc/imc/imc.h> /** - * Create an Integrity Measurement Collector. + * Create an Integrity Measurement Collector loaded from a library. * * @param name name of the IMC * @param filename path to the dynamic IMC library @@ -33,4 +33,20 @@ */ imc_t* tnc_imc_create(char *name, char *filename); +/** + * Create an Integrity Measurement Collector from a set of IMC functions. + * + * @param name name of the IMC + * @return instance of the imc_t interface + */ +imc_t* tnc_imc_create_from_functions(char *name, + TNC_IMC_InitializePointer initialize, + TNC_IMC_NotifyConnectionChangePointer notify_connection_change, + TNC_IMC_BeginHandshakePointer begin_handshake, + TNC_IMC_ReceiveMessagePointer receive_message, + TNC_IMC_ReceiveMessageLongPointer receive_message_long, + TNC_IMC_BatchEndingPointer batch_ending, + TNC_IMC_TerminatePointer terminate, + TNC_IMC_ProvideBindFunctionPointer provide_bind_function); + #endif /** TNC_IMC_H_ @}*/ |