25#include <logging/logger.h>
26#include <plugin/manager.h>
32#include <xmlrpc-c/girerr.hpp>
48 xmlrpc_registry_ = registry;
49 plugin_manager_ = plugin_manager;
51 plugin_list_.reset(
new plugin_list(plugin_manager));
52 plugin_load_.reset(
new plugin_load(plugin_manager, logger));
53 plugin_unload_.reset(
new plugin_unload(plugin_manager, logger));
54 xmlrpc_registry_->addMethod(
"plugin.list", &*plugin_list_);
55 xmlrpc_registry_->addMethod(
"plugin.load", &*plugin_load_);
56 xmlrpc_registry_->addMethod(
"plugin.unload", &*plugin_unload_);
64 plugin_unload_.reset();
78 _help =
"Returns array of plugins. Each entry is a struct consisting of the "
79 "entries name, desc, and loaded.";
81 plugin_manager_ = plugin_manager;
95 xmlrpc_c::value *
const result)
97 std::list<std::pair<std::string, std::string>> available_plugins;
98 std::list<std::string> loadedp;
104 std::vector<xmlrpc_c::value> array;
106 std::list<std::pair<std::string, std::string>>::iterator i;
107 for (i = available_plugins.begin(); i != available_plugins.end(); ++i) {
108 std::map<std::string, xmlrpc_c::value> elem;
109 elem.insert(std::make_pair(
"name", xmlrpc_c::value_string(i->first)));
110 elem.insert(std::make_pair(
"desc", xmlrpc_c::value_string(i->second)));
111 bool loaded = std::binary_search(loadedp.begin(), loadedp.end(), i->first);
112 elem.insert(std::make_pair(
"loaded", xmlrpc_c::value_boolean(loaded)));
113 array.push_back(xmlrpc_c::value_struct(elem));
116 *result = xmlrpc_c::value_array(array);
132 _help =
"Load plugin specified as argument, returns true on success, false otherwise.";
134 plugin_manager_ = plugin_manager;
149 xmlrpc_c::value *
const result)
152 std::string plugin_name = params.getString(0);
153 plugin_manager_->
load(plugin_name.c_str());
154 }
catch (girerr::error &e) {
155 throw xmlrpc_c::fault(e.what(), xmlrpc_c::fault::CODE_UNSPECIFIED);
157 logger_->
log_warn(
"XML-RPC plugin.load", e);
158 *result = xmlrpc_c::value_boolean(
false);
161 *result = xmlrpc_c::value_boolean(
true);
177 _help =
"Unload plugin specified as argument, returns true on success, false otherwise.";
179 plugin_manager_ = plugin_manager;
194 xmlrpc_c::value *
const result)
197 std::string plugin_name = params.getString(0);
198 plugin_manager_->
unload(plugin_name.c_str());
199 }
catch (girerr::error &e) {
200 throw xmlrpc_c::fault(e.what(), xmlrpc_c::fault::CODE_UNSPECIFIED);
202 logger_->
log_warn(
"XML-RPC plugin.unload", e);
203 *result = xmlrpc_c::value_boolean(
false);
206 *result = xmlrpc_c::value_boolean(
true);
Plugin list XML-RPC method.
plugin_list(fawkes::PluginManager *plugin_manager)
Constructor.
virtual ~plugin_list()
Virtual empty destructor.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
XML-RPC method to load a plugin.
plugin_load(fawkes::PluginManager *plugin_manager, fawkes::Logger *logger)
Constructor.
virtual ~plugin_load()
Virtual empty destructor.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
XML-RPC method to unload a plugin.
plugin_unload(fawkes::PluginManager *plugin_manager, fawkes::Logger *logger)
Constructor.
virtual ~plugin_unload()
Virtual empty destructor.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
~XmlRpcPluginMethods()
Destructor.
XmlRpcPluginMethods(std::shared_ptr< xmlrpc_c::registry > registry, fawkes::PluginManager *plugin_manager, fawkes::Logger *logger)
Constructor.
Base class for exceptions in Fawkes.
virtual void log_warn(const char *component, const char *format,...)=0
Log warning message.
void unload(const std::string &plugin_name)
Unload plugin.
std::list< std::pair< std::string, std::string > > get_available_plugins()
Generate list of all available plugins.
void load(const std::string &plugin_list)
Load plugin.
std::list< std::string > get_loaded_plugins()
Get list of loaded plugins.