Forward iq version results to IRC
This commit is contained in:
@@ -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)
|
|||||||
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:
|
|||||||
*/
|
*/
|
||||||
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
|
|||||||
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:
|
|||||||
/**
|
/**
|
||||||
* 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)
|
|||||||
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";
|
||||||
|
|||||||
Reference in New Issue
Block a user