From 567b139e1ce331c89dcdafe29c5b3b4114547222 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 7 Mar 2022 23:01:37 -0500 Subject: [PATCH] Allow disco queries with a node (needed for CAPS) --- src/xmpp/biboumi_component.cpp | 9 +++++---- src/xmpp/biboumi_component.hpp | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp index e328423..60e06bc 100644 --- a/src/xmpp/biboumi_component.cpp +++ b/src/xmpp/biboumi_component.cpp @@ -545,10 +545,10 @@ void BiboumiComponent::handle_iq(const Stanza& stanza) const std::string node = query->get_tag("node"); if (to_str == this->served_hostname) { - if (node.empty()) + if (node.empty() || node.rfind("https://biboumi.louiz.org/#", 0) == 0) { // On the gateway itself - this->send_self_disco_info(id, from); + this->send_self_disco_info(id, from, node); stanza_error.disable(); } } @@ -952,12 +952,13 @@ std::vector BiboumiComponent::get_bridges() const return res; } -void BiboumiComponent::send_self_disco_info(const std::string& id, const std::string& jid_to) +void BiboumiComponent::send_self_disco_info(const std::string& id, const std::string& jid_to, const std::string& node) { Stanza iq("iq"); { iq["type"] = "result"; iq["id"] = id; + if (!node.empty()) iq["node"] = node; iq["to"] = jid_to; iq["from"] = this->served_hostname; XmlSubNode query(iq, "query"); @@ -1213,7 +1214,7 @@ void BiboumiComponent::send_presence_to_contact(const std::string& from, const s c["xmlns"] = CAPS_NS; c["hash"] = "sha-1"; c["node"] = "https://biboumi.louiz.org/"; - c["ver"] = "m8CzZQt9wVuZlrV5a/vZYk/zAN0="; + c["ver"] = "URGCt+50NTdI6Ifcm1/YYNVxSjc="; } this->send_stanza(presence); } diff --git a/src/xmpp/biboumi_component.hpp b/src/xmpp/biboumi_component.hpp index f59ed9b..6b63366 100644 --- a/src/xmpp/biboumi_component.hpp +++ b/src/xmpp/biboumi_component.hpp @@ -63,7 +63,7 @@ public: /** * Send a result IQ with the gateway disco informations. */ - void send_self_disco_info(const std::string& id, const std::string& jid_to); + void send_self_disco_info(const std::string& id, const std::string& jid_to, const std::string& node); /** * Send a result IQ with the disco informations regarding IRC server JIDs. */