From 7115aa3b7f22f95e5e614ffc74c467844c08d965 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Tue, 24 Feb 2015 16:28:30 +0100 Subject: Add a reload add-hoc command --- CHANGELOG | 1 + src/main.cpp | 8 ++------ src/utils/reload.cpp | 13 +++++++++++++ src/utils/reload.hpp | 10 ++++++++++ src/xmpp/adhoc_command.cpp | 12 ++++++++++++ src/xmpp/adhoc_command.hpp | 1 + src/xmpp/adhoc_commands_handler.cpp | 3 ++- 7 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 src/utils/reload.cpp create mode 100644 src/utils/reload.hpp diff --git a/CHANGELOG b/CHANGELOG index 468974c..e3ba7bb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,6 +11,7 @@ Version 2.0 instead of immediately. This avoid hogging resources for nothing - Asynchronously resolve domain names by optionally using the DNS library c-ares. + - Add a reload add-hoc command, to reload biboumi's configuration Version 1.1 2014-16-07 diff --git a/src/main.cpp b/src/main.cpp index 94c3cb5..148412e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -123,13 +124,8 @@ int main(int ac, char** av) } if (reload) { - // Closing the config will just force it to be reopened the next time - // a configuration option is needed log_info("Signal received, reloading the config..."); - Config::close(); - // Destroy the logger instance, to be recreated the next time a log - // line needs to be written - Logger::instance().reset(); + ::reload_process(); reload.store(false); } // Reconnect to the XMPP server if this was not intended. This may have diff --git a/src/utils/reload.cpp b/src/utils/reload.cpp new file mode 100644 index 0000000..6600c75 --- /dev/null +++ b/src/utils/reload.cpp @@ -0,0 +1,13 @@ +#include +#include + +void reload_process() +{ + // Closing the config will just force it to be reopened the next time + // a configuration option is needed + Config::close(); + // Destroy the logger instance, to be recreated the next time a log + // line needs to be written + Logger::instance().reset(); + log_debug("Configuration and logger reloaded."); +} diff --git a/src/utils/reload.hpp b/src/utils/reload.hpp new file mode 100644 index 0000000..16d64f7 --- /dev/null +++ b/src/utils/reload.hpp @@ -0,0 +1,10 @@ +#ifndef RELOAD_HPP_INCLUDED +#define RELOAD_HPP_INCLUDED + +/** + * Reload the server's configuration, and close the logger (so that it + * closes its files etc, to take into account the new configuration) + */ +void reload_process(); + +#endif /* RELOAD_HPP_INCLUDED */ diff --git a/src/xmpp/adhoc_command.cpp b/src/xmpp/adhoc_command.cpp index e1bfc97..c20976a 100644 --- a/src/xmpp/adhoc_command.cpp +++ b/src/xmpp/adhoc_command.cpp @@ -3,6 +3,8 @@ #include +#include + using namespace std::string_literals; AdhocCommand::AdhocCommand(std::vector&& callbacks, const std::string& name, const bool admin_only): @@ -198,3 +200,13 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X session.terminate(); } +void Reload(XmppComponent*, AdhocSession& session, XmlNode& command_node) +{ + ::reload_process(); + command_node.delete_all_children(); + XmlNode note("note"); + note["type"] = "info"; + note.set_inner("Configuration reloaded."); + note.close(); + command_node.add_child(std::move(note)); +} diff --git a/src/xmpp/adhoc_command.hpp b/src/xmpp/adhoc_command.hpp index 60f7d6c..622d6b9 100644 --- a/src/xmpp/adhoc_command.hpp +++ b/src/xmpp/adhoc_command.hpp @@ -40,5 +40,6 @@ void HelloStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); void DisconnectUserStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); void DisconnectUserStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); +void Reload(XmppComponent*, AdhocSession& session, XmlNode& command_node); #endif // ADHOC_COMMAND_HPP diff --git a/src/xmpp/adhoc_commands_handler.cpp b/src/xmpp/adhoc_commands_handler.cpp index a0defdd..def1dcb 100644 --- a/src/xmpp/adhoc_commands_handler.cpp +++ b/src/xmpp/adhoc_commands_handler.cpp @@ -15,7 +15,8 @@ AdhocCommandsHandler::AdhocCommandsHandler(XmppComponent* xmpp_component): commands{ {"ping", AdhocCommand({&PingStep1}, "Do a ping", false)}, {"hello", AdhocCommand({&HelloStep1, &HelloStep2}, "Receive a custom greeting", false)}, - {"disconnect-user", AdhocCommand({&DisconnectUserStep1, &DisconnectUserStep2}, "Disconnect a user from the gateway", true)} + {"disconnect-user", AdhocCommand({&DisconnectUserStep1, &DisconnectUserStep2}, "Disconnect a user from the gateway", true)}, + {"reload", AdhocCommand({&Reload}, "Reload biboumi’s configuration", true)} } { } -- cgit v1.2.3