Added an enumerator for registered credential builders
This commit is contained in:
@@ -149,6 +149,31 @@ METHOD(credential_factory_t, create, void*,
|
|||||||
return construct;
|
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,
|
METHOD(credential_factory_t, destroy, void,
|
||||||
private_credential_factory_t *this)
|
private_credential_factory_t *this)
|
||||||
{
|
{
|
||||||
@@ -168,6 +193,7 @@ credential_factory_t *credential_factory_create()
|
|||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
.create = _create,
|
.create = _create,
|
||||||
|
.create_builder_enumerator = _create_builder_enumerator,
|
||||||
.add_builder = _add_builder,
|
.add_builder = _add_builder,
|
||||||
.remove_builder = _remove_builder,
|
.remove_builder = _remove_builder,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
|
|||||||
@@ -64,6 +64,12 @@ struct credential_factory_t {
|
|||||||
*/
|
*/
|
||||||
void* (*create)(credential_factory_t *this, credential_type_t type,
|
void* (*create)(credential_factory_t *this, credential_type_t type,
|
||||||
int subtype, ...);
|
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.
|
* Register a credential builder function.
|
||||||
|
|||||||
Reference in New Issue
Block a user