diff options
author | Florent Le Coz <louiz@louiz.org> | 2013-11-28 02:14:42 +0100 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2013-11-28 02:14:42 +0100 |
commit | 1151c26c363e736a98c5fcb723c753658fe35b9b (patch) | |
tree | 14b1cd8ef09e0ea5ec57ad5a4a230b282ec7f943 | |
parent | 2921f53657a78a73ca0dc8af95219ca27653fe55 (diff) | |
download | biboumi-1151c26c363e736a98c5fcb723c753658fe35b9b.tar.gz biboumi-1151c26c363e736a98c5fcb723c753658fe35b9b.tar.bz2 biboumi-1151c26c363e736a98c5fcb723c753658fe35b9b.tar.xz biboumi-1151c26c363e736a98c5fcb723c753658fe35b9b.zip |
Channel names are case insensitive
But some servers (epiknet for example) send channel names with an uppercase
-rw-r--r-- | src/irc/irc_client.cpp | 13 | ||||
-rw-r--r-- | src/test.cpp | 5 | ||||
-rw-r--r-- | src/utils/tolower.hpp | 18 |
3 files changed, 30 insertions, 6 deletions
diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp index 72eec02..dc0986f 100644 --- a/src/irc/irc_client.cpp +++ b/src/irc/irc_client.cpp @@ -4,6 +4,7 @@ #include <irc/irc_user.hpp> #include <utils/make_unique.hpp> +#include <utils/tolower.hpp> #include <utils/split.hpp> #include <iostream> @@ -174,7 +175,7 @@ void IrcClient::forward_server_message(const IrcMessage& message) void IrcClient::set_and_forward_user_list(const IrcMessage& message) { - const std::string chan_name = message.arguments[2]; + const std::string chan_name = utils::tolower(message.arguments[2]); IrcChannel* channel = this->get_channel(chan_name); std::vector<std::string> nicks = utils::split(message.arguments[3], ' '); for (const std::string& nick: nicks) @@ -190,7 +191,7 @@ void IrcClient::set_and_forward_user_list(const IrcMessage& message) void IrcClient::on_channel_join(const IrcMessage& message) { - const std::string chan_name = message.arguments[0]; + const std::string chan_name = utils::tolower(message.arguments[0]); IrcChannel* channel = this->get_channel(chan_name); const std::string nick = message.prefix; if (channel->joined == false) @@ -252,14 +253,14 @@ void IrcClient::send_motd(const IrcMessage& message) void IrcClient::on_topic_received(const IrcMessage& message) { - const std::string chan_name = message.arguments[1]; + const std::string chan_name = utils::tolower(message.arguments[1]); IrcChannel* channel = this->get_channel(chan_name); channel->topic = message.arguments[2]; } void IrcClient::on_channel_completely_joined(const IrcMessage& message) { - const std::string chan_name = message.arguments[1]; + const std::string chan_name = utils::tolower(message.arguments[1]); IrcChannel* channel = this->get_channel(chan_name); this->bridge->send_self_join(this->hostname, chan_name, channel->get_self()->nick); this->bridge->send_topic(this->hostname, chan_name, channel->topic); @@ -276,7 +277,7 @@ void IrcClient::on_welcome_message(const IrcMessage& message) void IrcClient::on_part(const IrcMessage& message) { - const std::string chan_name = message.arguments[0]; + const std::string chan_name = utils::tolower(message.arguments[0]); IrcChannel* channel = this->get_channel(chan_name); std::string txt; if (message.arguments.size() >= 2) @@ -348,7 +349,7 @@ void IrcClient::on_kick(const IrcMessage& message) { const std::string target = message.arguments[1]; const std::string reason = message.arguments[2]; - const std::string chan_name = message.arguments[0]; + const std::string chan_name = utils::tolower(message.arguments[0]); IrcChannel* channel = this->get_channel(chan_name); if (channel->get_self()->nick == target) channel->joined = false; diff --git a/src/test.cpp b/src/test.cpp index bed8829..234ab2d 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -6,6 +6,7 @@ #include <utils/encoding.hpp> #include <config/config.hpp> #include <bridge/colors.hpp> +#include <utils/tolower.hpp> #include <utils/split.hpp> #include <xmpp/jid.hpp> #include <string.h> @@ -66,6 +67,10 @@ int main() assert(splitted[0] == ""); assert(splitted[1] == "a"); + const std::string lowercase = utils::tolower("CoUcOu LeS CoPaiNs ♥"); + std::cout << lowercase << std::endl; + assert(lowercase == "coucou les copains ♥"); + /** * XML parsing */ diff --git a/src/utils/tolower.hpp b/src/utils/tolower.hpp new file mode 100644 index 0000000..22d2b8f --- /dev/null +++ b/src/utils/tolower.hpp @@ -0,0 +1,18 @@ +#ifndef TOLOWER_INCLUDED +# define TOLOWER_INCLUDED + +#include <string> + +namespace utils +{ + std::string tolower(const std::string& original) + { + std::string res; + res.reserve(original.size()); + for (const char c: original) + res += static_cast<char>(std::tolower(c)); + return res; + } +} + +#endif // SPLIT_INCLUDED |