Commit b98434b5 authored by louiz’'s avatar louiz’

In CAP messages, handle the last arg as a list of capabilities

Instead of just one. This fixes the issue of the "trailing whitespace" since we
now split it on ' '

Fix #3442
parent df2fe0bc
Pipeline #3333 failed with stages
in 18 minutes and 48 seconds
......@@ -1340,19 +1340,22 @@ long int IrcClient::get_throttle_limit() const
void IrcClient::on_cap(const IrcMessage &message)
{
const auto& sub_command = message.arguments[1];
const auto& cap = message.arguments[2];
auto it = this->capabilities.find(cap);
if (it == this->capabilities.end())
const auto& caps = utils::split(message.arguments[2], ' ', false);
for (const auto& cap: caps)
{
log_warning("Received a CAP message for something we didn’t ask, or that we already handled.");
return;
auto it = this->capabilities.find(cap);
if (it == this->capabilities.end())
{
log_warning("Received a CAP message for something we didn’t ask, or that we already handled: [", cap, "]");
return;
}
Capability& capability = it->second;
if (sub_command == "ACK")
capability.on_ack();
else if (sub_command == "NACK")
capability.on_nack();
this->capabilities.erase(it);
}
Capability& capability = it->second;
if (sub_command == "ACK")
capability.on_ack();
else if (sub_command == "NACK")
capability.on_nack();
this->capabilities.erase(it);
if (this->capabilities.empty())
this->cap_end();
}
......
......@@ -28,6 +28,9 @@ TEST_CASE("String split")
CHECK(splitted.size() == 2);
CHECK(splitted[0] == "");
CHECK(splitted[1] == "a");
splitted = utils::split("multi-prefix ", ' ');
CHECK(splitted[0] == "multi-prefix");
CHECK(splitted.size() == 1);
}
TEST_CASE("tolower")
......
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