diff options
-rw-r--r-- | src/libstrongswan/credentials/credential_factory.c | 26 | ||||
-rw-r--r-- | src/libstrongswan/credentials/credential_factory.h | 6 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/libstrongswan/credentials/credential_factory.c b/src/libstrongswan/credentials/credential_factory.c index 4be52df8b..c9444503a 100644 --- a/src/libstrongswan/credentials/credential_factory.c +++ b/src/libstrongswan/credentials/credential_factory.c @@ -149,6 +149,31 @@ METHOD(credential_factory_t, create, void*, return construct; } +/** + * Filter function for builder enumerator + */ +static bool builder_filter(void *null, entry_t **entry, credential_type_t *type, + void *dummy1, int *subtype, + void *dummy2, builder_function_t *constructor) +{ + *type = (*entry)->type; + *subtype = (*entry)->subtype; + if (constructor) + { + *constructor = (*entry)->constructor; + } + return TRUE; +} + +METHOD(credential_factory_t, create_builder_enumerator, enumerator_t*, + private_credential_factory_t *this) +{ + this->lock->read_lock(this->lock); + return enumerator_create_filter( + this->constructors->create_enumerator(this->constructors), + (void*)builder_filter, this->lock, (void*)this->lock->unlock); +} + METHOD(credential_factory_t, destroy, void, private_credential_factory_t *this) { @@ -168,6 +193,7 @@ credential_factory_t *credential_factory_create() INIT(this, .public = { .create = _create, + .create_builder_enumerator = _create_builder_enumerator, .add_builder = _add_builder, .remove_builder = _remove_builder, .destroy = _destroy, diff --git a/src/libstrongswan/credentials/credential_factory.h b/src/libstrongswan/credentials/credential_factory.h index e8ffb6b9d..ee1351b15 100644 --- a/src/libstrongswan/credentials/credential_factory.h +++ b/src/libstrongswan/credentials/credential_factory.h @@ -64,6 +64,12 @@ struct credential_factory_t { */ void* (*create)(credential_factory_t *this, credential_type_t type, int subtype, ...); + /** + * Create an enumerator over registered builder functions. + * + * @return enumerator (credential_type_t, int, build_function_t) + */ + enumerator_t* (*create_builder_enumerator)(credential_factory_t *this); /** * Register a credential builder function. |