Commit 9714d020 authored by louiz’'s avatar louiz’

Also store a reference instead of a pointer, in AdhocCommandsHandler

parent 7e242714
...@@ -20,7 +20,7 @@ bool AdhocCommand::is_admin_only() const ...@@ -20,7 +20,7 @@ bool AdhocCommand::is_admin_only() const
return this->admin_only; return this->admin_only;
} }
void PingStep1(XmppComponent*, AdhocSession&, XmlNode& command_node) void PingStep1(XmppComponent&, AdhocSession&, XmlNode& command_node)
{ {
XmlNode note("note"); XmlNode note("note");
note["type"] = "info"; note["type"] = "info";
...@@ -28,7 +28,7 @@ void PingStep1(XmppComponent*, AdhocSession&, XmlNode& command_node) ...@@ -28,7 +28,7 @@ void PingStep1(XmppComponent*, AdhocSession&, XmlNode& command_node)
command_node.add_child(std::move(note)); command_node.add_child(std::move(note));
} }
void HelloStep1(XmppComponent*, AdhocSession&, XmlNode& command_node) void HelloStep1(XmppComponent&, AdhocSession&, XmlNode& command_node)
{ {
XmlNode x("jabber:x:data:x"); XmlNode x("jabber:x:data:x");
x["type"] = "form"; x["type"] = "form";
...@@ -48,11 +48,10 @@ void HelloStep1(XmppComponent*, AdhocSession&, XmlNode& command_node) ...@@ -48,11 +48,10 @@ void HelloStep1(XmppComponent*, AdhocSession&, XmlNode& command_node)
command_node.add_child(std::move(x)); command_node.add_child(std::move(x));
} }
void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node) void HelloStep2(XmppComponent&, AdhocSession& session, XmlNode& command_node)
{ {
// Find out if the name was provided in the form. // Find out if the name was provided in the form.
const XmlNode* x = command_node.get_child("x", "jabber:x:data"); if (const XmlNode* x = command_node.get_child("x", "jabber:x:data"))
if (x)
{ {
const XmlNode* name_field = nullptr; const XmlNode* name_field = nullptr;
for (const XmlNode* field: x->get_children("field", "jabber:x:data")) for (const XmlNode* field: x->get_children("field", "jabber:x:data"))
...@@ -63,8 +62,7 @@ void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node) ...@@ -63,8 +62,7 @@ void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node)
} }
if (name_field) if (name_field)
{ {
const XmlNode* value = name_field->get_child("value", "jabber:x:data"); if (const XmlNode* value = name_field->get_child("value", "jabber:x:data"))
if (value)
{ {
XmlNode note("note"); XmlNode note("note");
note["type"] = "info"; note["type"] = "info";
...@@ -84,7 +82,7 @@ void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node) ...@@ -84,7 +82,7 @@ void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node)
session.terminate(); session.terminate();
} }
void Reload(XmppComponent*, AdhocSession&, XmlNode& command_node) void Reload(XmppComponent&, AdhocSession&, XmlNode& command_node)
{ {
::reload_process(); ::reload_process();
command_node.delete_all_children(); command_node.delete_all_children();
......
...@@ -35,9 +35,9 @@ private: ...@@ -35,9 +35,9 @@ private:
const bool admin_only; const bool admin_only;
}; };
void PingStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); void PingStep1(XmppComponent&, AdhocSession& session, XmlNode& command_node);
void HelloStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); 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 Reload(XmppComponent*, AdhocSession& session, XmlNode& command_node); void Reload(XmppComponent&, AdhocSession& session, XmlNode& command_node);
#endif // ADHOC_COMMAND_HPP #endif // ADHOC_COMMAND_HPP
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
class AdhocCommandsHandler class AdhocCommandsHandler
{ {
public: public:
explicit AdhocCommandsHandler(XmppComponent* xmpp_component): explicit AdhocCommandsHandler(XmppComponent& xmpp_component):
xmpp_component(xmpp_component), xmpp_component(xmpp_component),
commands{} commands{}
{ } { }
...@@ -50,10 +50,9 @@ public: ...@@ -50,10 +50,9 @@ public:
void remove_session(const std::string& session_id, const std::string& initiator_jid); void remove_session(const std::string& session_id, const std::string& initiator_jid);
private: private:
/** /**
* A pointer to the XmppComponent, to access to basically anything in the * To access basically anything in the gateway.
* gateway.
*/ */
XmppComponent* xmpp_component; XmppComponent& xmpp_component;
/** /**
* The list of all available commands. * The list of all available commands.
*/ */
......
...@@ -17,7 +17,7 @@ class AdhocSession; ...@@ -17,7 +17,7 @@ class AdhocSession;
* XmlNode and modifies it accordingly (inserting for example an <error/> * XmlNode and modifies it accordingly (inserting for example an <error/>
* node, or a data form…). * node, or a data form…).
*/ */
using AdhocStep = std::function<void(XmppComponent*, AdhocSession&, XmlNode&)>; using AdhocStep = std::function<void(XmppComponent&, AdhocSession&, XmlNode&)>;
class AdhocSession class AdhocSession
{ {
......
...@@ -45,7 +45,7 @@ XmppComponent::XmppComponent(std::shared_ptr<Poller> poller, const std::string& ...@@ -45,7 +45,7 @@ XmppComponent::XmppComponent(std::shared_ptr<Poller> poller, const std::string&
doc_open(false), doc_open(false),
served_hostname(hostname), served_hostname(hostname),
stanza_handlers{}, stanza_handlers{},
adhoc_commands_handler(this) adhoc_commands_handler(*this)
{ {
this->parser.add_stream_open_callback(std::bind(&XmppComponent::on_remote_stream_open, this, this->parser.add_stream_open_callback(std::bind(&XmppComponent::on_remote_stream_open, this,
std::placeholders::_1)); std::placeholders::_1));
......
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
using namespace std::string_literals; using namespace std::string_literals;
void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode& command_node) void DisconnectUserStep1(XmppComponent& xmpp_component, AdhocSession&, XmlNode& command_node)
{ {
auto biboumi_component = static_cast<BiboumiComponent*>(xmpp_component); auto& biboumi_component = static_cast<BiboumiComponent&>(xmpp_component);
XmlNode x("jabber:x:data:x"); XmlNode x("jabber:x:data:x");
x["type"] = "form"; x["type"] = "form";
...@@ -35,7 +35,7 @@ void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode& ...@@ -35,7 +35,7 @@ void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode&
jids_field["label"] = "The JIDs to disconnect"; jids_field["label"] = "The JIDs to disconnect";
XmlNode required("required"); XmlNode required("required");
jids_field.add_child(std::move(required)); jids_field.add_child(std::move(required));
for (Bridge* bridge: biboumi_component->get_bridges()) for (Bridge* bridge: biboumi_component.get_bridges())
{ {
XmlNode option("option"); XmlNode option("option");
option["label"] = bridge->get_jid(); option["label"] = bridge->get_jid();
...@@ -57,9 +57,9 @@ void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode& ...@@ -57,9 +57,9 @@ void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode&
command_node.add_child(std::move(x)); command_node.add_child(std::move(x));
} }
void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, XmlNode& command_node) void DisconnectUserStep2(XmppComponent& xmpp_component, AdhocSession& session, XmlNode& command_node)
{ {
auto biboumi_component = static_cast<BiboumiComponent*>(xmpp_component); auto& biboumi_component = static_cast<BiboumiComponent&>(xmpp_component);
// Find out if the jids, and the quit message are provided in the form. // Find out if the jids, and the quit message are provided in the form.
std::string quit_message; std::string quit_message;
...@@ -84,7 +84,7 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X ...@@ -84,7 +84,7 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X
std::size_t num = 0; std::size_t num = 0;
for (const XmlNode* value: jids_field->get_children("value", "jabber:x:data")) for (const XmlNode* value: jids_field->get_children("value", "jabber:x:data"))
{ {
Bridge* bridge = biboumi_component->find_user_bridge(value->get_inner()); Bridge* bridge = biboumi_component.find_user_bridge(value->get_inner());
if (bridge) if (bridge)
{ {
bridge->shutdown(quit_message); bridge->shutdown(quit_message);
...@@ -114,7 +114,7 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X ...@@ -114,7 +114,7 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X
} }
#ifdef USE_DATABASE #ifdef USE_DATABASE
void ConfigureIrcServerStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node) void ConfigureIrcServerStep1(XmppComponent&, AdhocSession& session, XmlNode& command_node)
{ {
const Jid owner(session.get_owner_jid()); const Jid owner(session.get_owner_jid());
const Jid target(session.get_target_jid()); const Jid target(session.get_target_jid());
...@@ -236,7 +236,7 @@ void ConfigureIrcServerStep1(XmppComponent*, AdhocSession& session, XmlNode& com ...@@ -236,7 +236,7 @@ void ConfigureIrcServerStep1(XmppComponent*, AdhocSession& session, XmlNode& com
command_node.add_child(std::move(x)); command_node.add_child(std::move(x));
} }
void ConfigureIrcServerStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node) void ConfigureIrcServerStep2(XmppComponent&, AdhocSession& session, XmlNode& command_node)
{ {
const XmlNode* x = command_node.get_child("x", "jabber:x:data"); const XmlNode* x = command_node.get_child("x", "jabber:x:data");
if (x) if (x)
...@@ -314,7 +314,7 @@ void ConfigureIrcServerStep2(XmppComponent*, AdhocSession& session, XmlNode& com ...@@ -314,7 +314,7 @@ void ConfigureIrcServerStep2(XmppComponent*, AdhocSession& session, XmlNode& com
} }
#endif // USE_DATABASE #endif // USE_DATABASE
void DisconnectUserFromServerStep1(XmppComponent* xmpp_component, AdhocSession& session, XmlNode& command_node) void DisconnectUserFromServerStep1(XmppComponent& xmpp_component, AdhocSession& session, XmlNode& command_node)
{ {
const Jid owner(session.get_owner_jid()); const Jid owner(session.get_owner_jid());
if (owner.bare() != Config::get("admin", "")) if (owner.bare() != Config::get("admin", ""))
...@@ -325,7 +325,7 @@ void DisconnectUserFromServerStep1(XmppComponent* xmpp_component, AdhocSession& ...@@ -325,7 +325,7 @@ void DisconnectUserFromServerStep1(XmppComponent* xmpp_component, AdhocSession&
} }
else else
{ // Send a form to select the user to disconnect { // Send a form to select the user to disconnect
auto biboumi_component = static_cast<BiboumiComponent*>(xmpp_component); auto& biboumi_component = static_cast<BiboumiComponent&>(xmpp_component);
XmlNode x("jabber:x:data:x"); XmlNode x("jabber:x:data:x");
x["type"] = "form"; x["type"] = "form";
...@@ -341,7 +341,7 @@ void DisconnectUserFromServerStep1(XmppComponent* xmpp_component, AdhocSession& ...@@ -341,7 +341,7 @@ void DisconnectUserFromServerStep1(XmppComponent* xmpp_component, AdhocSession&
jids_field["label"] = "The JID to disconnect"; jids_field["label"] = "The JID to disconnect";
XmlNode required("required"); XmlNode required("required");
jids_field.add_child(std::move(required)); jids_field.add_child(std::move(required));
for (Bridge* bridge: biboumi_component->get_bridges()) for (Bridge* bridge: biboumi_component.get_bridges())
{ {
XmlNode option("option"); XmlNode option("option");
option["label"] = bridge->get_jid(); option["label"] = bridge->get_jid();
...@@ -355,7 +355,7 @@ void DisconnectUserFromServerStep1(XmppComponent* xmpp_component, AdhocSession& ...@@ -355,7 +355,7 @@ void DisconnectUserFromServerStep1(XmppComponent* xmpp_component, AdhocSession&
} }
} }
void DisconnectUserFromServerStep2(XmppComponent* xmpp_component, AdhocSession& session, XmlNode& command_node) void DisconnectUserFromServerStep2(XmppComponent& xmpp_component, AdhocSession& session, XmlNode& command_node)
{ {
// If no JID is contained in the command node, it means we skipped the // If no JID is contained in the command node, it means we skipped the
// previous stage, and the jid to disconnect is the executor's jid // previous stage, and the jid to disconnect is the executor's jid
...@@ -377,7 +377,7 @@ void DisconnectUserFromServerStep2(XmppComponent* xmpp_component, AdhocSession& ...@@ -377,7 +377,7 @@ void DisconnectUserFromServerStep2(XmppComponent* xmpp_component, AdhocSession&
// Send a data form to let the user choose which server to disconnect the // Send a data form to let the user choose which server to disconnect the
// user from // user from
command_node.delete_all_children(); command_node.delete_all_children();
auto biboumi_component = static_cast<BiboumiComponent*>(xmpp_component); auto& biboumi_component = static_cast<BiboumiComponent&>(xmpp_component);
XmlNode x("jabber:x:data:x"); XmlNode x("jabber:x:data:x");
x["type"] = "form"; x["type"] = "form";
...@@ -393,7 +393,7 @@ void DisconnectUserFromServerStep2(XmppComponent* xmpp_component, AdhocSession& ...@@ -393,7 +393,7 @@ void DisconnectUserFromServerStep2(XmppComponent* xmpp_component, AdhocSession&
jids_field["label"] = "The servers to disconnect from"; jids_field["label"] = "The servers to disconnect from";
XmlNode required("required"); XmlNode required("required");
jids_field.add_child(std::move(required)); jids_field.add_child(std::move(required));
Bridge* bridge = biboumi_component->find_user_bridge(jid_to_disconnect); Bridge* bridge = biboumi_component.find_user_bridge(jid_to_disconnect);
if (!bridge || bridge->get_irc_clients().empty()) if (!bridge || bridge->get_irc_clients().empty())
{ {
...@@ -428,7 +428,7 @@ void DisconnectUserFromServerStep2(XmppComponent* xmpp_component, AdhocSession& ...@@ -428,7 +428,7 @@ void DisconnectUserFromServerStep2(XmppComponent* xmpp_component, AdhocSession&
command_node.add_child(std::move(x)); command_node.add_child(std::move(x));
} }
void DisconnectUserFromServerStep3(XmppComponent* xmpp_component, AdhocSession& session, XmlNode& command_node) void DisconnectUserFromServerStep3(XmppComponent& xmpp_component, AdhocSession& session, XmlNode& command_node)
{ {
const auto it = session.vars.find("jid"); const auto it = session.vars.find("jid");
if (it == session.vars.end()) if (it == session.vars.end())
...@@ -453,8 +453,8 @@ void DisconnectUserFromServerStep3(XmppComponent* xmpp_component, AdhocSession& ...@@ -453,8 +453,8 @@ void DisconnectUserFromServerStep3(XmppComponent* xmpp_component, AdhocSession&
} }
} }
auto biboumi_component = static_cast<BiboumiComponent*>(xmpp_component); auto& biboumi_component = static_cast<BiboumiComponent&>(xmpp_component);
Bridge* bridge = biboumi_component->find_user_bridge(jid_to_disconnect); Bridge* bridge = biboumi_component.find_user_bridge(jid_to_disconnect);
auto& clients = bridge->get_irc_clients(); auto& clients = bridge->get_irc_clients();
std::size_t number = 0; std::size_t number = 0;
......
...@@ -7,14 +7,14 @@ ...@@ -7,14 +7,14 @@
class XmppComponent; class XmppComponent;
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 ConfigureIrcServerStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); void ConfigureIrcServerStep1(XmppComponent&, AdhocSession& session, XmlNode& command_node);
void ConfigureIrcServerStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); void ConfigureIrcServerStep2(XmppComponent&, AdhocSession& session, XmlNode& command_node);
void DisconnectUserFromServerStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); void DisconnectUserFromServerStep1(XmppComponent&, AdhocSession& session, XmlNode& command_node);
void DisconnectUserFromServerStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); void DisconnectUserFromServerStep2(XmppComponent&, AdhocSession& session, XmlNode& command_node);
void DisconnectUserFromServerStep3(XmppComponent*, AdhocSession& session, XmlNode& command_node); void DisconnectUserFromServerStep3(XmppComponent&, AdhocSession& session, XmlNode& command_node);
#endif /* BIBOUMI_ADHOC_COMMANDS_HPP_INCLUDED */ #endif /* BIBOUMI_ADHOC_COMMANDS_HPP_INCLUDED */
...@@ -43,7 +43,7 @@ static std::set<std::string> kickable_errors{ ...@@ -43,7 +43,7 @@ static std::set<std::string> kickable_errors{
BiboumiComponent::BiboumiComponent(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& secret): BiboumiComponent::BiboumiComponent(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& secret):
XmppComponent(poller, hostname, secret), XmppComponent(poller, hostname, secret),
irc_server_adhoc_commands_handler(this) irc_server_adhoc_commands_handler(*this)
{ {
this->stanza_handlers.emplace("presence", this->stanza_handlers.emplace("presence",
std::bind(&BiboumiComponent::handle_presence, this,std::placeholders::_1)); std::bind(&BiboumiComponent::handle_presence, this,std::placeholders::_1));
......
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