Commit 163ace55 authored by louiz’'s avatar louiz’

Handle all unknown IRC command by forwarding the arguments as a message body

This way, the users can receive the result of any IRC command (although not
parsed nor formatted in anyway) when biboumi doesn’t support it

fix #2884
parent 0a6b673b
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <utils/tolower.hpp> #include <utils/tolower.hpp>
#include <utils/split.hpp> #include <utils/split.hpp>
#include <sstream>
#include <iostream> #include <iostream>
#include <stdexcept> #include <stdexcept>
...@@ -154,7 +155,11 @@ void IrcClient::parse_in_buffer(const size_t) ...@@ -154,7 +155,11 @@ void IrcClient::parse_in_buffer(const size_t)
} }
} }
else else
log_info("No handler for command " << message.command); {
log_info("No handler for command " << message.command <<
", forwarding the arguments to the user");
this->on_unknown_message(message);
}
// Try to find a waiting_iq, which response will be triggered by this IrcMessage // Try to find a waiting_iq, which response will be triggered by this IrcMessage
this->bridge->trigger_on_irc_message(this->hostname, message); this->bridge->trigger_on_irc_message(this->hostname, message);
} }
...@@ -797,6 +802,22 @@ void IrcClient::on_user_mode(const IrcMessage& message) ...@@ -797,6 +802,22 @@ void IrcClient::on_user_mode(const IrcMessage& message)
" is [" + message.arguments[1] + "]"); " is [" + message.arguments[1] + "]");
} }
void IrcClient::on_unknown_message(const IrcMessage& message)
{
if (message.arguments.size() < 2)
return ;
std::string from = message.prefix;
const std::string to = message.arguments[0];
std::stringstream ss;
for (auto it = message.arguments.begin() + 1; it != message.arguments.end(); ++it)
{
ss << *it;
if (it + 1 != message.arguments.end())
ss << " ";
}
this->bridge->send_xmpp_message(this->hostname, from, ss.str());
}
size_t IrcClient::number_of_joined_channels() const size_t IrcClient::number_of_joined_channels() const
{ {
if (this->dummy_channel.joined) if (this->dummy_channel.joined)
......
...@@ -211,6 +211,7 @@ public: ...@@ -211,6 +211,7 @@ public:
*/ */
void on_channel_mode(const IrcMessage& message); void on_channel_mode(const IrcMessage& message);
void on_quit(const IrcMessage& message); void on_quit(const IrcMessage& message);
void on_unknown_message(const IrcMessage& message);
/** /**
* Return the number of joined channels * Return the number of joined channels
*/ */
......
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