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);