Added an enumerator for registered credential builders

This commit is contained in:
Martin Willi
2010-09-02 10:49:02 +02:00
parent b019136596
commit 0ac49c3292
2 changed files with 32 additions and 0 deletions
@@ -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,
@@ -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.