Respond to a disco query the gateway jid itself
This commit is contained in:
@@ -416,6 +416,17 @@ void XmppComponent::handle_iq(const Stanza& stanza)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == "get")
|
||||
{
|
||||
XmlNode* query;
|
||||
if ((query = stanza.get_child(DISCO_INFO_NS":query")))
|
||||
{ // Disco info
|
||||
if (to_str == this->served_hostname)
|
||||
{ // On the gateway itself
|
||||
this->send_self_disco_info(id, from);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error_type = "cancel";
|
||||
@@ -735,3 +746,32 @@ void XmppComponent::send_affiliation_role_change(const std::string& muc_name,
|
||||
presence.close();
|
||||
this->send_stanza(presence);
|
||||
}
|
||||
|
||||
void XmppComponent::send_self_disco_info(const std::string& id, const std::string& jid_to)
|
||||
{
|
||||
Stanza iq("iq");
|
||||
iq["type"] = "result";
|
||||
iq["id"] = id;
|
||||
iq["to"] = jid_to;
|
||||
iq["from"] = this->served_hostname;
|
||||
XmlNode query("query");
|
||||
query["xmlns"] = DISCO_INFO_NS;
|
||||
XmlNode identity("identity");
|
||||
identity["category"] = "conference";
|
||||
identity["type"] = "irc";
|
||||
identity["name"] = "Biboumi XMPP-IRC gateway";
|
||||
identity.close();
|
||||
query.add_child(std::move(identity));
|
||||
for (const std::string& ns: {"http://jabber.org/protocol/disco#info",
|
||||
"http://jabber.org/protocol/muc"})
|
||||
{
|
||||
XmlNode feature("feature");
|
||||
feature["var"] = ns;
|
||||
feature.close();
|
||||
query.add_child(std::move(feature));
|
||||
}
|
||||
query.close();
|
||||
iq.add_child(std::move(query));
|
||||
iq.close();
|
||||
this->send_stanza(iq);
|
||||
}
|
||||
|
||||
@@ -144,6 +144,10 @@ 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);
|
||||
/**
|
||||
* Handle the various stanza types
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user