Add a reload add-hoc command
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
+2
-6
@@ -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)
|
|||||||
}
|
}
|
||||||
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
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#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.");
|
||||||
|
}
|
||||||
@@ -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 */
|
||||||
@@ -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
|
|||||||
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);
|
|||||||
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):
|
|||||||
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)}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user