From 2d2ffa58f6b0b34595e3e255795c4e732610f379 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 29 Jun 2011 15:45:32 +0200 Subject: [PATCH] Added a listplugins stroke command to show plugin features --- src/libcharon/plugins/stroke/stroke_list.c | 55 ++++++++++++++++++++++ src/stroke/stroke.c | 2 + src/stroke/stroke_keywords.h | 1 + src/stroke/stroke_keywords.txt | 1 + src/stroke/stroke_msg.h | 4 +- 5 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/libcharon/plugins/stroke/stroke_list.c b/src/libcharon/plugins/stroke/stroke_list.c index 8ceb8b4ca..987475fb3 100644 --- a/src/libcharon/plugins/stroke/stroke_list.c +++ b/src/libcharon/plugins/stroke/stroke_list.c @@ -1206,6 +1206,57 @@ static void list_algs(FILE *out) fprintf(out, "\n"); } +/** + * List loaded plugin information + */ +static void list_plugins(FILE *out) +{ + plugin_feature_t *features, *fp; + enumerator_t *enumerator; + linked_list_t *list; + plugin_t *plugin; + int count, i; + bool loaded; + char *str; + + fprintf(out, "\n"); + fprintf(out, "List of loaded plugins:\n"); + + enumerator = lib->plugins->create_plugin_enumerator(lib->plugins); + while (enumerator->enumerate(enumerator, &plugin, &list)) + { + fprintf(out, "%s:\n", plugin->get_name(plugin)); + if (plugin->get_features) + { + count = plugin->get_features(plugin, &features); + for (i = 0; i < count; i++) + { + str = plugin_feature_get_string(&features[i]); + switch (features[i].kind) + { + case FEATURE_PROVIDE: + fp = &features[i]; + loaded = list->find_first(list, NULL, + (void**)&fp) == SUCCESS; + fprintf(out, " %s%s\n", + str, loaded ? "" : " (not loaded)"); + break; + case FEATURE_DEPENDS: + fprintf(out, " %s\n", str); + break; + case FEATURE_SDEPEND: + fprintf(out, " %s(soft)\n", str); + break; + default: + break; + } + free(str); + } + } + } + enumerator->destroy(enumerator); +} + METHOD(stroke_list_t, list, void, private_stroke_list_t *this, stroke_msg_t *msg, FILE *out) { @@ -1277,6 +1328,10 @@ METHOD(stroke_list_t, list, void, { list_algs(out); } + if (msg->list.flags & LIST_PLUGINS) + { + list_plugins(out); + } } /** diff --git a/src/stroke/stroke.c b/src/stroke/stroke.c index 2abbd7bff..a27c374c7 100644 --- a/src/stroke/stroke.c +++ b/src/stroke/stroke.c @@ -263,6 +263,7 @@ static int list_flags[] = { LIST_CRLS, LIST_OCSP, LIST_ALGS, + LIST_PLUGINS, LIST_ALL }; @@ -531,6 +532,7 @@ int main(int argc, char *argv[]) case STROKE_LIST_CRLS: case STROKE_LIST_OCSP: case STROKE_LIST_ALGS: + case STROKE_LIST_PLUGINS: case STROKE_LIST_ALL: res = list(token->kw, argc > 2 && strcmp(argv[2], "--utc") == 0); break; diff --git a/src/stroke/stroke_keywords.h b/src/stroke/stroke_keywords.h index 3e55ef8f2..3bd68bdc3 100644 --- a/src/stroke/stroke_keywords.h +++ b/src/stroke/stroke_keywords.h @@ -41,6 +41,7 @@ typedef enum { STROKE_LIST_CRLS, STROKE_LIST_OCSP, STROKE_LIST_ALGS, + STROKE_LIST_PLUGINS, STROKE_LIST_ALL, STROKE_REREAD_SECRETS, STROKE_REREAD_CACERTS, diff --git a/src/stroke/stroke_keywords.txt b/src/stroke/stroke_keywords.txt index 78212c2b8..4a4cc57a9 100644 --- a/src/stroke/stroke_keywords.txt +++ b/src/stroke/stroke_keywords.txt @@ -48,6 +48,7 @@ listcainfos, STROKE_LIST_CAINFOS listcrls, STROKE_LIST_CRLS listocsp, STROKE_LIST_OCSP listalgs, STROKE_LIST_ALGS +listplugins, STROKE_LIST_PLUGINS listall, STROKE_LIST_ALL rereadsecrets, STROKE_REREAD_SECRETS rereadcacerts, STROKE_REREAD_CACERTS diff --git a/src/stroke/stroke_msg.h b/src/stroke/stroke_msg.h index 8324c775d..f3c525ba7 100644 --- a/src/stroke/stroke_msg.h +++ b/src/stroke/stroke_msg.h @@ -65,8 +65,10 @@ enum list_flag_t { LIST_OCSP = 0x0200, /** list all supported algorithms */ LIST_ALGS = 0x0400, + /** list plugin information */ + LIST_PLUGINS = 0x0800, /** all list options */ - LIST_ALL = 0x07FF, + LIST_ALL = 0x0FFF, }; typedef enum reread_flag_t reread_flag_t;