diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp index 3cfa9d0..f33b705 100644 --- a/src/xmpp/biboumi_component.cpp +++ b/src/xmpp/biboumi_component.cpp @@ -953,11 +953,15 @@ void BiboumiComponent::send_self_disco_info(const std::string& id, const std::st iq["from"] = this->served_hostname; XmlSubNode query(iq, "query"); query["xmlns"] = DISCO_INFO_NS; + XmlSubNode gwid(query, "identity"); + gwid["category"] = "gateway"; + gwid["type"] = "irc"; + gwid["name"] = "Biboumi"; XmlSubNode identity(query, "identity"); identity["category"] = "conference"; identity["type"] = "irc"; identity["name"] = "Biboumi XMPP-IRC gateway"; - for (const char *ns: {DISCO_INFO_NS, MUC_NS, ADHOC_NS, PING_NS, MAM_NS, VERSION_NS, STABLE_MUC_ID_NS}) + for (const char *ns: {DISCO_INFO_NS, CAPS_NS, MUC_NS, ADHOC_NS, PING_NS, MAM_NS, VERSION_NS, STABLE_MUC_ID_NS}) { XmlSubNode feature(query, "feature"); feature["var"] = ns; @@ -1194,6 +1198,14 @@ void BiboumiComponent::send_presence_to_contact(const std::string& from, const s presence["type"] = type; if (!id.empty()) presence["id"] = id; + + if (type.empty() && from == this->served_hostname) { + XmlSubNode c(presence, "c"); + c["xmlns"] = CAPS_NS; + c["hash"] = "sha-1"; + c["node"] = "https://biboumi.louiz.org/"; + c["ver"] = "m8CzZQt9wVuZlrV5a/vZYk/zAN0="; + } this->send_stanza(presence); } diff --git a/src/xmpp/xmpp_component.hpp b/src/xmpp/xmpp_component.hpp index ee6b776..54ab15c 100644 --- a/src/xmpp/xmpp_component.hpp +++ b/src/xmpp/xmpp_component.hpp @@ -16,6 +16,7 @@ #define STREAM_NS "http://etherx.jabber.org/streams" #define COMPONENT_NS "jabber:component:accept" +#define CAPS_NS "http://jabber.org/protocol/caps" #define MUC_NS "http://jabber.org/protocol/muc" #define MUC_USER_NS MUC_NS"#user" #define MUC_ADMIN_NS MUC_NS"#admin"