enumerating loaded plugins in "ipsec statusall"

This commit is contained in:
Martin Willi
2008-06-24 12:49:04 +00:00
parent ad4d3f81c1
commit eec675bf8c
3 changed files with 43 additions and 3 deletions
+10 -1
View File
@@ -204,7 +204,7 @@ static void status(private_stroke_list_t *this, stroke_msg_t *msg, FILE *out, bo
ike_cfg_t *ike_cfg; ike_cfg_t *ike_cfg;
child_cfg_t *child_cfg; child_cfg_t *child_cfg;
ike_sa_t *ike_sa; ike_sa_t *ike_sa;
char *name = NULL; char *name = NULL, *plugin;
bool found = FALSE; bool found = FALSE;
time_t uptime; time_t uptime;
@@ -222,6 +222,15 @@ static void status(private_stroke_list_t *this, stroke_msg_t *msg, FILE *out, bo
charon->processor->get_job_load(charon->processor)); charon->processor->get_job_load(charon->processor));
fprintf(out, " scheduled events: %d\n", fprintf(out, " scheduled events: %d\n",
charon->scheduler->get_job_load(charon->scheduler)); 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( iterator = charon->kernel_interface->create_address_iterator(
charon->kernel_interface); charon->kernel_interface);
fprintf(out, "Listening IP addresses:\n"); fprintf(out, "Listening IP addresses:\n");
+23 -1
View File
@@ -15,9 +15,9 @@
* $Id$ * $Id$
*/ */
#define _GNU_SOURCE
#include "plugin_loader.h" #include "plugin_loader.h"
#define _GNU_SOURCE
#include <string.h> #include <string.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <limits.h> #include <limits.h>
@@ -43,6 +43,11 @@ struct private_plugin_loader_t {
* list of loaded plugins * list of loaded plugins
*/ */
linked_list_t *plugins; linked_list_t *plugins;
/**
* names of loaded plugins
*/
linked_list_t *names;
}; };
/** /**
@@ -116,6 +121,7 @@ static int load(private_plugin_loader_t *this, char *path, char *list)
if (plugin) if (plugin)
{ /* insert in front to destroy them in reverse order */ { /* insert in front to destroy them in reverse order */
this->plugins->insert_last(this->plugins, plugin); this->plugins->insert_last(this->plugins, plugin);
this->names->insert_last(this->names, strdup(list));
count++; count++;
} }
if (pos) if (pos)
@@ -136,20 +142,34 @@ static int load(private_plugin_loader_t *this, char *path, char *list)
static void unload(private_plugin_loader_t *this) static void unload(private_plugin_loader_t *this)
{ {
plugin_t *plugin; plugin_t *plugin;
char *name;
while (this->plugins->remove_first(this->plugins, while (this->plugins->remove_first(this->plugins,
(void**)&plugin) == SUCCESS) (void**)&plugin) == SUCCESS)
{ {
plugin->destroy(plugin); 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 * Implementation of plugin_loader_t.destroy
*/ */
static void destroy(private_plugin_loader_t *this) static void destroy(private_plugin_loader_t *this)
{ {
this->plugins->destroy_offset(this->plugins, offsetof(plugin_t, destroy)); this->plugins->destroy_offset(this->plugins, offsetof(plugin_t, destroy));
this->plugins->destroy_function(this->plugins, free);
free(this); free(this);
} }
@@ -162,9 +182,11 @@ plugin_loader_t *plugin_loader_create()
this->public.load = (int(*)(plugin_loader_t*, char *path, char *prefix))load; this->public.load = (int(*)(plugin_loader_t*, char *path, char *prefix))load;
this->public.unload = (void(*)(plugin_loader_t*))unload; 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->public.destroy = (void(*)(plugin_loader_t*))destroy;
this->plugins = linked_list_create(); this->plugins = linked_list_create();
this->names = linked_list_create();
return &this->public; return &this->public;
} }
+10 -1
View File
@@ -23,6 +23,8 @@
typedef struct plugin_loader_t plugin_loader_t; typedef struct plugin_loader_t plugin_loader_t;
#include <utils/enumerator.h>
/** /**
* The plugin_loader loads plugins from a directory and initializes them * The plugin_loader loads plugins from a directory and initializes them
*/ */
@@ -41,7 +43,14 @@ struct plugin_loader_t {
* Unload all loaded plugins. * Unload all loaded plugins.
*/ */
void (*unload)(plugin_loader_t *this); 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. * Unload loaded plugins, destroy plugin_loader instance.
*/ */