From c65ae4754921fe1f9888afc30d26ed11d5275258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Mon, 12 Dec 2016 00:36:59 +0100 Subject: Auto accept presence subscription --- louloulibs/xmpp/xmpp_component.hpp | 4 ---- src/xmpp/biboumi_component.cpp | 44 ++++++++++++++++++++++++++------------ src/xmpp/biboumi_component.hpp | 7 ++---- tests/end_to_end/__main__.py | 13 +++++++++++ 4 files changed, 45 insertions(+), 23 deletions(-) diff --git a/louloulibs/xmpp/xmpp_component.hpp b/louloulibs/xmpp/xmpp_component.hpp index e3f8ce2..a9bac0f 100644 --- a/louloulibs/xmpp/xmpp_component.hpp +++ b/louloulibs/xmpp/xmpp_component.hpp @@ -178,10 +178,6 @@ public: const std::string& affiliation, const std::string& role, const std::string& jid_to); - /** - * Send a result IQ with the gateway disco informations. - */ - void send_self_disco_info(const std::string& id, const std::string& jid_to); /** * Send a result IQ with the given version, or the gateway version if the * passed string is empty. diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp index d646656..f8d2f1d 100644 --- a/src/xmpp/biboumi_component.cpp +++ b/src/xmpp/biboumi_component.cpp @@ -161,6 +161,16 @@ void BiboumiComponent::handle_presence(const Stanza& stanza) bridge->leave_irc_channel(std::move(iid), status ? status->get_inner() : "", from.resource); } } + else if (iid.type == Iid::Type::Server || iid.type == Iid::Type::None) + { + if (type == "subscribe") + { // Auto-accept any subscription request for an IRC server + this->add_to_roster(to_str, from.bare()); + this->accept_subscription(to_str, from.bare()); + this->ask_subscription(to_str, from.bare()); + } + + } else { // A user wants to join an invalid IRC channel, return a presence error to him/her @@ -751,20 +761,6 @@ void BiboumiComponent::send_irc_channel_muc_traffic_info(const std::string id, c } -void BiboumiComponent::send_iq_version_request(const std::string& from, - const std::string& jid_to) -{ - Stanza iq("iq"); - iq["type"] = "get"; - iq["id"] = "version_"s + this->next_id(); - iq["from"] = from + "@" + this->served_hostname; - iq["to"] = jid_to; - XmlNode query("query"); - query["xmlns"] = VERSION_NS; - iq.add_child(std::move(query)); - this->send_stanza(iq); -} - void BiboumiComponent::send_ping_request(const std::string& from, const std::string& jid_to, const std::string& id) @@ -863,3 +859,23 @@ void BiboumiComponent::send_invitation(const std::string& room_target, message.add_child(std::move(x)); this->send_stanza(message); } + +void BiboumiComponent::accept_subscription(const std::string& from, const std::string& to) +{ + Stanza presence("presence"); + presence["from"] = from; + presence["to"] = to; + presence["id"] = this->next_id(); + presence["type"] = "subscribed"; + this->send_stanza(presence); +} + +void BiboumiComponent::ask_subscription(const std::string& from, const std::string& to) +{ + Stanza presence("presence"); + presence["from"] = from; + presence["to"] = to; + presence["id"] = this->next_id(); + presence["type"] = "subscribe"; + this->send_stanza(presence); +} diff --git a/src/xmpp/biboumi_component.hpp b/src/xmpp/biboumi_component.hpp index 999001f..7cafdec 100644 --- a/src/xmpp/biboumi_component.hpp +++ b/src/xmpp/biboumi_component.hpp @@ -70,11 +70,6 @@ public: * http://xmpp.org/extensions/xep-0045.html#impl-service-traffic */ void send_irc_channel_muc_traffic_info(const std::string id, const std::string& jid_from, const std::string& jid_to); - /** - * Send an iq version request - */ - void send_iq_version_request(const std::string& from, - const std::string& jid_to); /** * Send a ping request */ @@ -88,6 +83,8 @@ public: const ChannelList& channel_list, std::vector::const_iterator begin, std::vector::const_iterator end, const ResultSetInfo& rs_info); void send_invitation(const std::string& room_target, const std::string& jid_to, const std::string& author_nick); + void accept_subscription(const std::string& from, const std::string& to); + void ask_subscription(const std::string& from, const std::string& to); /** * Handle the various stanza types */ diff --git a/tests/end_to_end/__main__.py b/tests/end_to_end/__main__.py index b265200..dcdd560 100644 --- a/tests/end_to_end/__main__.py +++ b/tests/end_to_end/__main__.py @@ -1840,6 +1840,19 @@ if __name__ == '__main__': "/presence/muc:x", "/presence/error/stanza:text")), ], conf='fixed_server'), + Scenario("irc_server_presence_subscription", + [ + handshake_sequence(), + partial(send_stanza, ""), + partial(expect_stanza, "/presence[@to='{jid_one}'][@from='{irc_server_one}'][@type='subscribed']") + ]), + Scenario("fixed_irc_server_presence_subscription", + [ + handshake_sequence(), + partial(send_stanza, ""), + partial(expect_stanza, "/presence[@to='{jid_one}'][@from='{biboumi_host}'][@type='subscribed']") + ], conf='fixed_server') + ) -- cgit v1.2.3