Forward CTCP version request to XMPP
This commit is contained in:
@@ -304,3 +304,8 @@ void Bridge::send_affiliation_role_change(const Iid& iid, const std::string& tar
|
|||||||
std::tie(role, affiliation) = get_role_affiliation_from_irc_mode(mode);
|
std::tie(role, affiliation) = get_role_affiliation_from_irc_mode(mode);
|
||||||
this->xmpp->send_affiliation_role_change(iid.chan + "%" + iid.server, target, affiliation, role, this->user_jid);
|
this->xmpp->send_affiliation_role_change(iid.chan + "%" + iid.server, target, affiliation, role, this->user_jid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Bridge::send_iq_version_request(const std::string& nick, const std::string& hostname)
|
||||||
|
{
|
||||||
|
this->xmpp->send_iq_version_request(nick + "%" + hostname, this->user_jid);
|
||||||
|
}
|
||||||
|
|||||||
@@ -99,6 +99,10 @@ public:
|
|||||||
* Send a role/affiliation change, matching the change of mode for that user
|
* Send a role/affiliation change, matching the change of mode for that user
|
||||||
*/
|
*/
|
||||||
void send_affiliation_role_change(const Iid& iid, const std::string& target, const char mode);
|
void send_affiliation_role_change(const Iid& iid, const std::string& target, const char mode);
|
||||||
|
/**
|
||||||
|
* Send an iq version request coming from nick%hostname@
|
||||||
|
*/
|
||||||
|
void send_iq_version_request(const std::string& nick, const std::string& hostname);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Misc
|
* Misc
|
||||||
|
|||||||
@@ -348,6 +348,8 @@ void IrcClient::on_channel_message(const IrcMessage& message)
|
|||||||
if (body.substr(1, 6) == "ACTION")
|
if (body.substr(1, 6) == "ACTION")
|
||||||
this->bridge->send_message(iid, nick,
|
this->bridge->send_message(iid, nick,
|
||||||
"/me"s + body.substr(7, body.size() - 8), muc);
|
"/me"s + body.substr(7, body.size() - 8), muc);
|
||||||
|
else if (body.substr(1, 8) == "VERSION\01")
|
||||||
|
this->bridge->send_iq_version_request(nick, this->hostname);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this->bridge->send_message(iid, nick, body, muc);
|
this->bridge->send_message(iid, nick, body, muc);
|
||||||
|
|||||||
@@ -28,6 +28,9 @@
|
|||||||
#define XHTMLIM_NS "http://jabber.org/protocol/xhtml-im"
|
#define XHTMLIM_NS "http://jabber.org/protocol/xhtml-im"
|
||||||
#define STANZA_NS "urn:ietf:params:xml:ns:xmpp-stanzas"
|
#define STANZA_NS "urn:ietf:params:xml:ns:xmpp-stanzas"
|
||||||
#define STREAMS_NS "urn:ietf:params:xml:ns:xmpp-streams"
|
#define STREAMS_NS "urn:ietf:params:xml:ns:xmpp-streams"
|
||||||
|
#define VERSION_NS "jabber:iq:version"
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
unsigned long XmppComponent::current_id = 0;
|
unsigned long XmppComponent::current_id = 0;
|
||||||
|
|
||||||
@@ -786,6 +789,22 @@ void XmppComponent::send_self_disco_info(const std::string& id, const std::strin
|
|||||||
this->send_stanza(iq);
|
this->send_stanza(iq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XmppComponent::send_iq_version_request(const std::string& from,
|
||||||
|
const std::string& jid_to)
|
||||||
|
{
|
||||||
|
Stanza iq("iq");
|
||||||
|
iq["type"] = "get";
|
||||||
|
iq["id"] = "version_"s + XmppComponent::next_id();
|
||||||
|
iq["from"] = from + "@" + this->served_hostname;
|
||||||
|
iq["to"] = jid_to;
|
||||||
|
XmlNode query("query");
|
||||||
|
query["xmlns"] = VERSION_NS;
|
||||||
|
query.close();
|
||||||
|
iq.add_child(std::move(query));
|
||||||
|
iq.close();
|
||||||
|
this->send_stanza(iq);
|
||||||
|
}
|
||||||
|
|
||||||
std::string XmppComponent::next_id()
|
std::string XmppComponent::next_id()
|
||||||
{
|
{
|
||||||
return std::to_string(XmppComponent::current_id++);
|
return std::to_string(XmppComponent::current_id++);
|
||||||
|
|||||||
@@ -154,6 +154,11 @@ public:
|
|||||||
* Send a result IQ with the gateway disco informations.
|
* 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);
|
||||||
|
/**
|
||||||
|
* Send an iq version request
|
||||||
|
*/
|
||||||
|
void send_iq_version_request(const std::string& from,
|
||||||
|
const std::string& jid_to);
|
||||||
/**
|
/**
|
||||||
* Handle the various stanza types
|
* Handle the various stanza types
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user