Commit 579ca4bd authored by louiz’'s avatar louiz’

Forward iq version results to IRC

parent 04fe15a1
...@@ -170,13 +170,13 @@ void Bridge::send_channel_message(const Iid& iid, const std::string& body) ...@@ -170,13 +170,13 @@ void Bridge::send_channel_message(const Iid& iid, const std::string& body)
this->make_xmpp_body(body), this->user_jid); this->make_xmpp_body(body), this->user_jid);
} }
void Bridge::send_private_message(const Iid& iid, const std::string& body) void Bridge::send_private_message(const Iid& iid, const std::string& body, const std::string& type)
{ {
if (iid.chan.empty() || iid.server.empty()) if (iid.chan.empty() || iid.server.empty())
return ; return ;
IrcClient* irc = this->get_irc_client(iid.server); IrcClient* irc = this->get_irc_client(iid.server);
if (irc) if (irc)
irc->send_private_message(iid.chan, body); irc->send_private_message(iid.chan, body, type);
} }
void Bridge::leave_irc_channel(Iid&& iid, std::string&& status_message) void Bridge::leave_irc_channel(Iid&& iid, std::string&& status_message)
...@@ -207,6 +207,13 @@ void Bridge::set_channel_topic(const Iid& iid, const std::string& subject) ...@@ -207,6 +207,13 @@ void Bridge::set_channel_topic(const Iid& iid, const std::string& subject)
irc->send_topic_command(iid.chan, subject); irc->send_topic_command(iid.chan, subject);
} }
void Bridge::send_xmpp_version_to_irc(const Iid& iid, const std::string& name, const std::string& version, const std::string& os)
{
std::string result(name + " " + version + " " + os);
this->send_private_message(iid, "\01VERSION "s + result + "\01", "NOTICE");
}
void Bridge::send_message(const Iid& iid, const std::string& nick, const std::string& body, const bool muc) void Bridge::send_message(const Iid& iid, const std::string& nick, const std::string& body, const bool muc)
{ {
if (muc) if (muc)
......
...@@ -45,11 +45,12 @@ public: ...@@ -45,11 +45,12 @@ public:
*/ */
bool join_irc_channel(const Iid& iid, const std::string& username); bool join_irc_channel(const Iid& iid, const std::string& username);
void send_channel_message(const Iid& iid, const std::string& body); void send_channel_message(const Iid& iid, const std::string& body);
void send_private_message(const Iid& iid, const std::string& body); void send_private_message(const Iid& iid, const std::string& body, const std::string& type="PRIVMSG");
void leave_irc_channel(Iid&& iid, std::string&& status_message); void leave_irc_channel(Iid&& iid, std::string&& status_message);
void send_irc_nick_change(const Iid& iid, const std::string& new_nick); void send_irc_nick_change(const Iid& iid, const std::string& new_nick);
void send_irc_kick(const Iid& iid, const std::string& target, const std::string& reason); void send_irc_kick(const Iid& iid, const std::string& target, const std::string& reason);
void set_channel_topic(const Iid& iid, const std::string& subject); void set_channel_topic(const Iid& iid, const std::string& subject);
void send_xmpp_version_to_irc(const Iid& iid, const std::string& name, const std::string& version, const std::string& os);
/*** /***
** **
......
...@@ -192,12 +192,12 @@ bool IrcClient::send_channel_message(const std::string& chan_name, const std::st ...@@ -192,12 +192,12 @@ bool IrcClient::send_channel_message(const std::string& chan_name, const std::st
return true; return true;
} }
void IrcClient::send_private_message(const std::string& username, const std::string& body) void IrcClient::send_private_message(const std::string& username, const std::string& body, const std::string& type)
{ {
std::string::size_type pos = 0; std::string::size_type pos = 0;
while (pos < body.size()) while (pos < body.size())
{ {
this->send_message(IrcMessage("PRIVMSG", {username, body.substr(pos, 400)})); this->send_message(IrcMessage(std::string(type), {username, body.substr(pos, 400)}));
pos += 400; pos += 400;
} }
......
...@@ -88,7 +88,7 @@ public: ...@@ -88,7 +88,7 @@ public:
/** /**
* Send a PRIVMSG command for an user * Send a PRIVMSG command for an user
*/ */
void send_private_message(const std::string& username, const std::string& body); void send_private_message(const std::string& username, const std::string& body, const std::string& type);
/** /**
* Send the PART irc command * Send the PART irc command
*/ */
......
...@@ -444,6 +444,24 @@ void XmppComponent::handle_iq(const Stanza& stanza) ...@@ -444,6 +444,24 @@ void XmppComponent::handle_iq(const Stanza& stanza)
else if (type == "result") else if (type == "result")
{ {
stanza_error.disable(); stanza_error.disable();
XmlNode* query;
if ((query = stanza.get_child(VERSION_NS":query")))
{
XmlNode* name_node = query->get_child(VERSION_NS":name");
XmlNode* version_node = query->get_child(VERSION_NS":version");
XmlNode* os_node = query->get_child(VERSION_NS":os");
std::string name;
std::string version;
std::string os;
if (name_node)
name = name_node->get_inner() + " (through the biboumi gateway)";
if (version_node)
version = version_node->get_inner();
if (os_node)
os = os_node->get_inner();
const Iid iid(to.local);
bridge->send_xmpp_version_to_irc(iid, name, version, os);
}
} }
error_type = "cancel"; error_type = "cancel";
error_name = "feature-not-implemented"; error_name = "feature-not-implemented";
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment