From f38b31a63ee203e53d1135a87f1b4e9faaf7dd3f Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Sat, 9 Nov 2013 21:40:29 +0100 Subject: Remove IRC colors from the body when forwarding it to XMPP --- src/bridge/bridge.cpp | 23 +++++++++++++++++++---- src/bridge/bridge.hpp | 1 + 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'src/bridge') diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp index 5047a78..f028f5b 100644 --- a/src/bridge/bridge.cpp +++ b/src/bridge/bridge.cpp @@ -1,6 +1,9 @@ #include +#include #include #include +#include + #include @@ -15,6 +18,17 @@ Bridge::~Bridge() { } +std::string Bridge::sanitize_for_xmpp(const std::string& str) +{ + std::string res; + if (utils::is_valid_utf8(str.c_str())) + res = str; + else + res = utils::convert_to_utf8(str, "ISO-8859-1"); + remove_irc_colors(res); + return res; +} + IrcClient* Bridge::get_irc_client(const std::string& hostname, const std::string& username) { try @@ -43,7 +57,6 @@ IrcClient* Bridge::get_irc_client(const std::string& hostname) } } - void Bridge::join_irc_channel(const Iid& iid, const std::string& username) { IrcClient* irc = this->get_irc_client(iid.server, username); @@ -64,12 +77,14 @@ void Bridge::send_channel_message(const Iid& iid, const std::string& body) return; } irc->send_channel_message(iid.chan, body); + // We do not need to convert body to utf-8: it comes from our XMPP server, + // so it's ok to send it back this->xmpp->send_muc_message(iid.chan + "%" + iid.server, irc->get_own_nick(), body, this->user_jid); } void Bridge::send_muc_message(const Iid& iid, const std::string& nick, const std::string& body) { - this->xmpp->send_muc_message(iid.chan + "%" + iid.server, nick, body, this->user_jid); + this->xmpp->send_muc_message(iid.chan + "%" + iid.server, nick, this->sanitize_for_xmpp(body), this->user_jid); } void Bridge::send_xmpp_message(const std::string& from, const std::string& author, const std::string& msg) @@ -79,7 +94,7 @@ void Bridge::send_xmpp_message(const std::string& from, const std::string& autho body = std::string("[") + author + std::string("] ") + msg; else body = msg; - this->xmpp->send_message(from, body, this->user_jid); + this->xmpp->send_message(from, this->sanitize_for_xmpp(body), this->user_jid); } void Bridge::send_user_join(const std::string& hostname, const std::string& chan_name, const std::string nick) @@ -94,5 +109,5 @@ void Bridge::send_self_join(const std::string& hostname, const std::string& chan void Bridge::send_topic(const std::string& hostname, const std::string& chan_name, const std::string topic) { - this->xmpp->send_topic(chan_name + "%" + hostname, topic, this->user_jid); + this->xmpp->send_topic(chan_name + "%" + hostname, this->sanitize_for_xmpp(topic), this->user_jid); } diff --git a/src/bridge/bridge.hpp b/src/bridge/bridge.hpp index 38cf565..f7fd7c6 100644 --- a/src/bridge/bridge.hpp +++ b/src/bridge/bridge.hpp @@ -23,6 +23,7 @@ public: explicit Bridge(const std::string& user_jid, XmppComponent* xmpp, Poller* poller); ~Bridge(); + static std::string sanitize_for_xmpp(const std::string& str); /*** ** ** From XMPP to IRC. -- cgit v1.2.3