diff options
author | Martin Willi <martin@strongswan.org> | 2008-06-24 12:49:04 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-06-24 12:49:04 +0000 |
commit | eec675bf8c56f6d08948c00eeb2907742daaf164 (patch) | |
tree | 792fdd65fba3a77402a22499174a6a6e18d2c00d /src | |
parent | ad4d3f81c17f661ed0d970f4182911d1d181c150 (diff) | |
download | strongswan-eec675bf8c56f6d08948c00eeb2907742daaf164.tar.bz2 strongswan-eec675bf8c56f6d08948c00eeb2907742daaf164.tar.xz |
enumerating loaded plugins in "ipsec statusall"
Diffstat (limited to 'src')
-rw-r--r-- | src/charon/plugins/stroke/stroke_list.c | 11 | ||||
-rw-r--r-- | src/libstrongswan/plugins/plugin_loader.c | 24 | ||||
-rw-r--r-- | src/libstrongswan/plugins/plugin_loader.h | 11 |
3 files changed, 43 insertions, 3 deletions
diff --git a/src/charon/plugins/stroke/stroke_list.c b/src/charon/plugins/stroke/stroke_list.c index bac05cf7f..44699ba0a 100644 --- a/src/charon/plugins/stroke/stroke_list.c +++ b/src/charon/plugins/stroke/stroke_list.c @@ -204,7 +204,7 @@ static void status(private_stroke_list_t *this, stroke_msg_t *msg, FILE *out, bo 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; @@ -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)); 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"); diff --git a/src/libstrongswan/plugins/plugin_loader.c b/src/libstrongswan/plugins/plugin_loader.c index 28957895a..c2996f79c 100644 --- a/src/libstrongswan/plugins/plugin_loader.c +++ b/src/libstrongswan/plugins/plugin_loader.c @@ -15,9 +15,9 @@ * $Id$ */ +#define _GNU_SOURCE #include "plugin_loader.h" -#define _GNU_SOURCE #include <string.h> #include <dlfcn.h> #include <limits.h> @@ -43,6 +43,11 @@ struct private_plugin_loader_t { * list of loaded 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) { /* 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) @@ -136,20 +142,34 @@ static int load(private_plugin_loader_t *this, char *path, char *list) 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); } @@ -162,9 +182,11 @@ plugin_loader_t *plugin_loader_create() 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; } diff --git a/src/libstrongswan/plugins/plugin_loader.h b/src/libstrongswan/plugins/plugin_loader.h index 45b7afa57..bd24e7558 100644 --- a/src/libstrongswan/plugins/plugin_loader.h +++ b/src/libstrongswan/plugins/plugin_loader.h @@ -23,6 +23,8 @@ typedef struct plugin_loader_t plugin_loader_t; +#include <utils/enumerator.h> + /** * The plugin_loader loads plugins from a directory and initializes them */ @@ -41,7 +43,14 @@ struct plugin_loader_t { * 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. */ |