ike_cfg_t *ike_cfg;
child_cfg_t *child_cfg;
ike_sa_t *ike_sa;
- char *name = NULL;
+ char *name = NULL, *plugin;
bool found = FALSE;
time_t uptime;
charon->processor->get_job_load(charon->processor));
fprintf(out, " scheduled events: %d\n",
charon->scheduler->get_job_load(charon->scheduler));
+ fprintf(out, " loaded plugins: ");
+ enumerator = lib->plugins->create_plugin_enumerator(lib->plugins);
+ while (enumerator->enumerate(enumerator, &plugin))
+ {
+ fprintf(out, "%s ", plugin);
+ }
+ enumerator->destroy(enumerator);
+ fprintf(out, "\n");
+
iterator = charon->kernel_interface->create_address_iterator(
charon->kernel_interface);
fprintf(out, "Listening IP addresses:\n");
* $Id$
*/
+#define _GNU_SOURCE
#include "plugin_loader.h"
-#define _GNU_SOURCE
#include <string.h>
#include <dlfcn.h>
#include <limits.h>
* list of loaded plugins
*/
linked_list_t *plugins;
+
+ /**
+ * names of loaded plugins
+ */
+ linked_list_t *names;
};
/**
if (plugin)
{ /* insert in front to destroy them in reverse order */
this->plugins->insert_last(this->plugins, plugin);
+ this->names->insert_last(this->names, strdup(list));
count++;
}
if (pos)
static void unload(private_plugin_loader_t *this)
{
plugin_t *plugin;
+ char *name;
while (this->plugins->remove_first(this->plugins,
(void**)&plugin) == SUCCESS)
{
plugin->destroy(plugin);
}
+ while (this->names->remove_first(this->names, (void**)&name) == SUCCESS)
+ {
+ free(name);
+ }
}
/**
+ * Implementation of plugin_loader_t.create_plugin_enumerator
+ */
+static enumerator_t* create_plugin_enumerator(private_plugin_loader_t *this)
+{
+ return this->names->create_enumerator(this->names);
+}
+
+/**
* Implementation of plugin_loader_t.destroy
*/
static void destroy(private_plugin_loader_t *this)
{
this->plugins->destroy_offset(this->plugins, offsetof(plugin_t, destroy));
+ this->plugins->destroy_function(this->plugins, free);
free(this);
}
this->public.load = (int(*)(plugin_loader_t*, char *path, char *prefix))load;
this->public.unload = (void(*)(plugin_loader_t*))unload;
+ this->public.create_plugin_enumerator = (enumerator_t*(*)(plugin_loader_t*))create_plugin_enumerator;
this->public.destroy = (void(*)(plugin_loader_t*))destroy;
this->plugins = linked_list_create();
+ this->names = linked_list_create();
return &this->public;
}
typedef struct plugin_loader_t plugin_loader_t;
+#include <utils/enumerator.h>
+
/**
* The plugin_loader loads plugins from a directory and initializes them
*/
* Unload all loaded plugins.
*/
void (*unload)(plugin_loader_t *this);
-
+
+ /**
+ * Create an enumerator over all loaded plugin names.
+ *
+ * @return enumerator over char*
+ */
+ enumerator_t* (*create_plugin_enumerator)(plugin_loader_t *this);
+
/**
* Unload loaded plugins, destroy plugin_loader instance.
*/