24 #include <plugin/manager.h> 25 #include <logging/logger.h> 32 #include <xmlrpc-c/girerr.hpp> 48 __xmlrpc_registry = registry;
49 __plugin_manager = plugin_manager;
52 __plugin_load =
new plugin_load(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 delete __plugin_unload;
79 _help =
"Returns array of plugins. Each entry is a struct consisting of the " 80 "entries name, desc, and loaded.";
82 __plugin_manager = plugin_manager;
96 xmlrpc_c::value *
const result)
98 std::list<std::pair<std::string, std::string> > available_plugins;
99 std::list<std::string> loadedp;
105 std::vector<xmlrpc_c::value> array;
107 std::list<std::pair<std::string, std::string> >::iterator i;
108 for (i = available_plugins.begin(); i != available_plugins.end(); ++i) {
109 std::map<std::string, xmlrpc_c::value> elem;
110 elem.insert(std::make_pair(
"name", xmlrpc_c::value_string(i->first)));
111 elem.insert(std::make_pair(
"desc", xmlrpc_c::value_string(i->second)));
112 bool loaded = std::binary_search(loadedp.begin(), loadedp.end(), i->first);
113 elem.insert(std::make_pair(
"loaded", xmlrpc_c::value_boolean(loaded)));
114 array.push_back(xmlrpc_c::value_struct(elem));
117 *result = xmlrpc_c::value_array(array);
135 _help =
"Load plugin specified as argument, returns true on success, false otherwise.";
137 __plugin_manager = plugin_manager;
152 xmlrpc_c::value *
const result)
155 std::string plugin_name = params.getString(0);
156 __plugin_manager->
load(plugin_name.c_str());
157 }
catch (girerr::error &e) {
158 throw xmlrpc_c::fault(e.what(), xmlrpc_c::fault::CODE_UNSPECIFIED);
160 __logger->
log_warn(
"XML-RPC plugin.load", e);
161 *result = xmlrpc_c::value_boolean(
false);
164 *result = xmlrpc_c::value_boolean(
true);
182 _help =
"Unload plugin specified as argument, returns true on success, false otherwise.";
184 __plugin_manager = plugin_manager;
199 xmlrpc_c::value *
const result)
202 std::string plugin_name = params.getString(0);
203 __plugin_manager->
unload(plugin_name.c_str());
204 }
catch (girerr::error &e) {
205 throw xmlrpc_c::fault(e.what(), xmlrpc_c::fault::CODE_UNSPECIFIED);
207 __logger->
log_warn(
"XML-RPC plugin.unload", e);
208 *result = xmlrpc_c::value_boolean(
false);
211 *result = xmlrpc_c::value_boolean(
true);
plugin_list(fawkes::PluginManager *plugin_manager)
Constructor.
XML-RPC method to load a plugin.
std::list< std::pair< std::string, std::string > > get_available_plugins()
Generate list of all available plugins.
~XmlRpcPluginMethods()
Destructor.
XML-RPC method to unload a plugin.
virtual ~plugin_list()
Virtual empty destructor.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
Plugin list XML-RPC method.
XmlRpcPluginMethods(xmlrpc_c::registry *registry, fawkes::PluginManager *plugin_manager, fawkes::Logger *logger)
Constructor.
Base class for exceptions in Fawkes.
void load(const char *plugin_list)
Load plugin.
virtual ~plugin_unload()
Virtual empty destructor.
std::list< std::string > get_loaded_plugins()
Get list of loaded plugins.
void unload(const char *plugin_name)
Unload plugin.
virtual void log_warn(const char *component, const char *format,...)=0
Log warning message.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
virtual ~plugin_load()
Virtual empty destructor.
plugin_unload(fawkes::PluginManager *plugin_manager, fawkes::Logger *logger)
Constructor.
plugin_load(fawkes::PluginManager *plugin_manager, fawkes::Logger *logger)
Constructor.