Commit 7115aa3b authored by louiz’'s avatar louiz’

Add a reload add-hoc command

parent 9837f611
...@@ -11,6 +11,7 @@ Version 2.0 ...@@ -11,6 +11,7 @@ Version 2.0
instead of immediately. This avoid hogging resources for nothing instead of immediately. This avoid hogging resources for nothing
- Asynchronously resolve domain names by optionally using the DNS - Asynchronously resolve domain names by optionally using the DNS
library c-ares. library c-ares.
- Add a reload add-hoc command, to reload biboumi's configuration
Version 1.1 2014-16-07 Version 1.1 2014-16-07
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <network/poller.hpp> #include <network/poller.hpp>
#include <config/config.hpp> #include <config/config.hpp>
#include <logger/logger.hpp> #include <logger/logger.hpp>
#include <utils/reload.hpp>
#include <iostream> #include <iostream>
#include <memory> #include <memory>
...@@ -123,13 +124,8 @@ int main(int ac, char** av) ...@@ -123,13 +124,8 @@ int main(int ac, char** av)
} }
if (reload) 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..."); log_info("Signal received, reloading the config...");
Config::close(); ::reload_process();
// Destroy the logger instance, to be recreated the next time a log
// line needs to be written
Logger::instance().reset();
reload.store(false); reload.store(false);
} }
// Reconnect to the XMPP server if this was not intended. This may have // Reconnect to the XMPP server if this was not intended. This may have
......
#include <config/config.hpp>
#include <logger/logger.hpp>
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.");
}
#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 */
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include <bridge/bridge.hpp> #include <bridge/bridge.hpp>
#include <utils/reload.hpp>
using namespace std::string_literals; using namespace std::string_literals;
AdhocCommand::AdhocCommand(std::vector<AdhocStep>&& callbacks, const std::string& name, const bool admin_only): AdhocCommand::AdhocCommand(std::vector<AdhocStep>&& callbacks, const std::string& name, const bool admin_only):
...@@ -198,3 +200,13 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X ...@@ -198,3 +200,13 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X
session.terminate(); 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));
}
...@@ -40,5 +40,6 @@ void HelloStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); ...@@ -40,5 +40,6 @@ void HelloStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node);
void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node);
void DisconnectUserStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); void DisconnectUserStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node);
void DisconnectUserStep2(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 #endif // ADHOC_COMMAND_HPP
...@@ -15,7 +15,8 @@ AdhocCommandsHandler::AdhocCommandsHandler(XmppComponent* xmpp_component): ...@@ -15,7 +15,8 @@ AdhocCommandsHandler::AdhocCommandsHandler(XmppComponent* xmpp_component):
commands{ commands{
{"ping", AdhocCommand({&PingStep1}, "Do a ping", false)}, {"ping", AdhocCommand({&PingStep1}, "Do a ping", false)},
{"hello", AdhocCommand({&HelloStep1, &HelloStep2}, "Receive a custom greeting", 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)}
} }
{ {
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment