24 #include <logging/liblogger.h>
25 #include <netcomm/fawkes/component_ids.h>
26 #include <netcomm/fawkes/hub.h>
27 #include <plugin/manager.h>
28 #include <plugin/net/handler.h>
29 #include <plugin/net/list_message.h>
30 #include <plugin/net/messages.h>
62 : Thread(
"PluginNetworkHandler", Thread::OPMODE_WAITFORWAKEUP),
63 FawkesNetworkHandler(FAWKES_CID_PLUGINMANAGER)
68 manager_->add_listener(
this);
69 hub_->add_handler(
this);
88 PluginNetworkHandler::list_avail()
92 std::list<std::pair<std::string, std::string>> available_plugins;
95 std::list<std::pair<std::string, std::string>>::iterator i;
96 for (i = available_plugins.begin(); i != available_plugins.end(); ++i) {
97 m->
append(i->first.c_str(), i->first.length());
98 m->
append(i->second.c_str(), i->second.length());
104 PluginNetworkHandler::list_loaded()
106 PluginListMessage *m =
new PluginListMessage();
108 std::list<std::string> loaded_plugins;
111 std::list<std::string>::iterator i;
112 for (i = loaded_plugins.begin(); i != loaded_plugins.end(); ++i) {
113 m->append(i->c_str(), i->length());
120 PluginNetworkHandler::send_load_failure(
const char *plugin_name,
unsigned int client_id)
123 plugin_load_failed_msg_t *r =
124 (plugin_load_failed_msg_t *)calloc(1,
sizeof(plugin_load_failed_msg_t));
125 strncpy(r->name, plugin_name, PLUGIN_MSG_NAME_LENGTH - 1);
126 hub_->
send(client_id,
127 FAWKES_CID_PLUGINMANAGER,
130 sizeof(plugin_load_failed_msg_t));
131 }
catch (Exception &e) {
132 LibLogger::log_warn(
"PluginNetworkHandler",
"Failed to send load failure, exception follows");
138 PluginNetworkHandler::send_load_success(
const char *plugin_name,
unsigned int client_id)
141 plugin_loaded_msg_t *r = (plugin_loaded_msg_t *)calloc(1,
sizeof(plugin_loaded_msg_t));
142 strncpy(r->name, plugin_name, PLUGIN_MSG_NAME_LENGTH - 1);
144 client_id, FAWKES_CID_PLUGINMANAGER,
MSG_PLUGIN_LOADED, r,
sizeof(plugin_loaded_msg_t));
145 }
catch (Exception &e) {
146 LibLogger::log_warn(
"PluginNetworkHandler",
"Failed to send load success, exception follows");
152 PluginNetworkHandler::send_unloaded(
const char *plugin_name)
156 for (ssit_ = subscribers_.begin(); ssit_ != subscribers_.end(); ++ssit_) {
157 send_unload_success(plugin_name, *ssit_);
159 }
catch (Exception &e) {
167 PluginNetworkHandler::send_loaded(
const char *plugin_name)
171 for (ssit_ = subscribers_.begin(); ssit_ != subscribers_.end(); ++ssit_) {
172 send_load_success(plugin_name, *ssit_);
174 }
catch (Exception &e) {
182 PluginNetworkHandler::send_unload_failure(
const char *plugin_name,
unsigned int client_id)
185 plugin_unload_failed_msg_t *r =
186 (plugin_unload_failed_msg_t *)calloc(1,
sizeof(plugin_unload_failed_msg_t));
187 strncpy(r->name, plugin_name, PLUGIN_MSG_NAME_LENGTH - 1);
188 hub_->
send(client_id,
189 FAWKES_CID_PLUGINMANAGER,
192 sizeof(plugin_unload_failed_msg_t));
193 }
catch (Exception &e) {
194 LibLogger::log_warn(
"PluginNetworkHandler",
"Failed to send unload failure, exception follows");
200 PluginNetworkHandler::send_unload_success(
const char *plugin_name,
unsigned int client_id)
203 plugin_unloaded_msg_t *r = (plugin_unloaded_msg_t *)calloc(1,
sizeof(plugin_unloaded_msg_t));
204 strncpy(r->name, plugin_name, PLUGIN_MSG_NAME_LENGTH - 1);
206 client_id, FAWKES_CID_PLUGINMANAGER,
MSG_PLUGIN_UNLOADED, r,
sizeof(plugin_unloaded_msg_t));
207 }
catch (Exception &e) {
208 LibLogger::log_warn(
"PluginNetworkHandler",
"Failed to send unload success, exception follows");
222 PluginNetworkHandler::load(
const char *plugin_list,
unsigned int clid)
226 manager_->
load(plugin_list);
227 send_load_success(plugin_list, clid);
228 }
catch (Exception &e) {
231 send_load_failure(plugin_list, clid);
244 PluginNetworkHandler::unload(
const char *plugin_name,
unsigned int clid)
248 manager_->
unload(plugin_name);
249 send_unload_success(plugin_name, clid);
250 }
catch (Exception &e) {
253 send_unload_failure(plugin_name, clid);
263 while (!inbound_queue_.empty()) {
264 FawkesNetworkMessage *msg = inbound_queue_.front();
266 switch (msg->msgid()) {
272 char name[PLUGIN_MSG_NAME_LENGTH + 1];
273 name[PLUGIN_MSG_NAME_LENGTH] = 0;
274 strncpy(
name, m->
name, PLUGIN_MSG_NAME_LENGTH);
278 "Client requested loading of %s which is already loaded",
280 send_load_success(
name, msg->clid());
283 load(
name, msg->clid());
293 char name[PLUGIN_MSG_NAME_LENGTH + 1];
294 name[PLUGIN_MSG_NAME_LENGTH] = 0;
295 strncpy(
name, m->
name, PLUGIN_MSG_NAME_LENGTH);
299 "Client requested unloading of %s which is not loaded",
301 send_unload_success(
name, msg->clid());
304 unload(
name, msg->clid());
331 subscribers_.push_back(msg->clid());
333 subscribers_.unique();
371 send_loaded(plugin_name);
377 send_unloaded(plugin_name);