Forward CTCP version request to XMPP

This commit is contained in:
Florent Le Coz
2014-05-06 22:50:37 +02:00
parent f35db5ceba
commit 5ec05cb0ed
5 changed files with 35 additions and 0 deletions
+5
View File
@@ -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);
}
+4
View File
@@ -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
+2
View File
@@ -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);
+19
View File
@@ -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++);
+5
View File
@@ -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
*/ */