summaryrefslogtreecommitdiff
path: root/src/libstrongswan/plugins/plugin_loader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/plugins/plugin_loader.h')
-rw-r--r--src/libstrongswan/plugins/plugin_loader.h48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/libstrongswan/plugins/plugin_loader.h b/src/libstrongswan/plugins/plugin_loader.h
index 6a8f8f6a1..285b33910 100644
--- a/src/libstrongswan/plugins/plugin_loader.h
+++ b/src/libstrongswan/plugins/plugin_loader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Tobias Brunner
+ * Copyright (C) 2012-2013 Tobias Brunner
* Copyright (C) 2007 Martin Willi
* Hochschule fuer Technik Rapperswil
*
@@ -25,6 +25,7 @@
typedef struct plugin_loader_t plugin_loader_t;
#include <collections/enumerator.h>
+#include <utils/debug.h>
/* to avoid circular references we can't include plugin_feature.h */
struct plugin_feature_t;
@@ -56,17 +57,33 @@ struct plugin_loader_t {
bool critical);
/**
- * Load a list of plugins from a directory.
+ * Load a list of plugins.
*
- * Each plugin in list may have a ending exclamation mark (!) to mark it
+ * Each plugin in list may have an ending exclamation mark (!) to mark it
* as a critical plugin. If loading a critical plugin fails, plugin loading
* is aborted and FALSE is returned.
*
- * @param path path containing loadable plugins, NULL for default
+ * Additional paths can be added with add_path(), these will be searched
+ * for the plugins first, in the order they were added, then the default
+ * path follows.
+ *
+ * @note Even though this method could be called multiple times this is
+ * currently not really supported in regards to plugin features and their
+ * dependencies (in particular soft dependencies).
+ *
* @param list space separated list of plugins to load
* @return TRUE if all critical plugins loaded successfully
*/
- bool (*load)(plugin_loader_t *this, char *path, char *list);
+ bool (*load)(plugin_loader_t *this, char *list);
+
+ /**
+ * Add an additional search path for plugins.
+ *
+ * These will be searched in the order they were added.
+ *
+ * @param path path containing loadable plugins
+ */
+ void (*add_path)(plugin_loader_t *this, char *path);
/**
* Reload the configuration of one or multiple plugins.
@@ -84,15 +101,23 @@ struct plugin_loader_t {
/**
* Create an enumerator over all loaded plugins.
*
- * In addition to the plugin, the enumerator returns a list of pointers to
- * plugin features currently loaded (if the argument is not NULL).
- * This list is to be read only.
+ * In addition to the plugin, the enumerator optionally provides a list of
+ * pointers to plugin features currently loaded.
+ * This list has to be destroyed.
*
* @return enumerator over plugin_t*, linked_list_t*
*/
enumerator_t* (*create_plugin_enumerator)(plugin_loader_t *this);
/**
+ * Check if the given feature is available and loaded.
+ *
+ * @param feature feature to check
+ * @return TRUE if feature available
+ */
+ bool (*has_feature)(plugin_loader_t *this, struct plugin_feature_t feature);
+
+ /**
* Get a simple list the names of all loaded plugins.
*
* The function returns internal data, do not free.
@@ -102,6 +127,13 @@ struct plugin_loader_t {
char* (*loaded_plugins)(plugin_loader_t *this);
/**
+ * Log status about loaded plugins and features.
+ *
+ * @param level log level to use
+ */
+ void (*status)(plugin_loader_t *this, level_t level);
+
+ /**
* Unload loaded plugins, destroy plugin_loader instance.
*/
void (*destroy)(plugin_loader_t *this);