Added an enumerator for registered credential builders
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user