1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-03 00:03:12 +02:00

irc: allow signals "irc_raw_in" and "irc_in" to eat messages (issue #1657)

This is useful to implement IRC protocol extensions which introduce
new commands.
This commit is contained in:
Simon Ser
2021-06-27 09:48:16 +02:00
committed by Sébastien Helleu
parent 59853d9b30
commit ff8beb1918
9 changed files with 81 additions and 45 deletions
+12 -8
View File
@@ -6904,14 +6904,18 @@ irc_protocol_recv_command (struct t_irc_server *server,
host_no_color);
/* send signal with received command, even if command is ignored */
irc_server_send_signal (server, "irc_raw_in", msg_command,
irc_message, NULL);
return_code = irc_server_send_signal (server, "irc_raw_in", msg_command,
irc_message, NULL);
if (return_code == WEECHAT_RC_OK_EAT)
goto end;
/* send signal with received command, only if message is not ignored */
if (!message_ignored)
{
irc_server_send_signal (server, "irc_in", msg_command,
irc_message, NULL);
return_code = irc_server_send_signal (server, "irc_in", msg_command,
irc_message, NULL);
if (return_code == WEECHAT_RC_OK_EAT)
goto end;
}
/* look for IRC command */
@@ -7008,14 +7012,14 @@ irc_protocol_recv_command (struct t_irc_server *server,
/* send signal with received command (if message is not ignored) */
if (!message_ignored)
{
irc_server_send_signal (server, "irc_in2", msg_command,
irc_message, NULL);
(void) irc_server_send_signal (server, "irc_in2", msg_command,
irc_message, NULL);
}
}
/* send signal with received command, even if command is ignored */
irc_server_send_signal (server, "irc_raw_in2", msg_command,
irc_message, NULL);
(void) irc_server_send_signal (server, "irc_raw_in2", msg_command,
irc_message, NULL);
end:
if (nick)
+30 -23
View File
@@ -2374,15 +2374,18 @@ irc_server_reorder (const char **servers, int num_servers)
* Sends a signal for an IRC message (received or sent).
*/
void
int
irc_server_send_signal (struct t_irc_server *server, const char *signal,
const char *command, const char *full_message,
const char *tags)
{
int length;
int rc, length;
char *str_signal, *full_message_tags;
length = strlen (server->name) + 1 + strlen (signal) + 1 + strlen (command) + 1;
rc = WEECHAT_RC_OK;
length = strlen (server->name) + 1 + strlen (signal) + 1
+ strlen (command) + 1;
str_signal = malloc (length);
if (str_signal)
{
@@ -2396,20 +2399,22 @@ irc_server_send_signal (struct t_irc_server *server, const char *signal,
{
snprintf (full_message_tags, length,
"%s;%s", tags, full_message);
(void) weechat_hook_signal_send (str_signal,
WEECHAT_HOOK_SIGNAL_STRING,
(void *)full_message_tags);
rc = weechat_hook_signal_send (str_signal,
WEECHAT_HOOK_SIGNAL_STRING,
(void *)full_message_tags);
free (full_message_tags);
}
}
else
{
(void) weechat_hook_signal_send (str_signal,
WEECHAT_HOOK_SIGNAL_STRING,
(void *)full_message);
rc = weechat_hook_signal_send (str_signal,
WEECHAT_HOOK_SIGNAL_STRING,
(void *)full_message);
}
free (str_signal);
}
return rc;
}
/*
@@ -2571,14 +2576,14 @@ irc_server_outqueue_send (struct t_irc_server *server)
pos[0] = '\r';
/* send signal with command that will be sent to server */
irc_server_send_signal (
(void) irc_server_send_signal (
server, "irc_out",
server->outqueue[priority]->command,
server->outqueue[priority]->message_after_mod,
NULL);
tags_to_send = irc_server_get_tags_to_send (
server->outqueue[priority]->tags);
irc_server_send_signal (
(void) irc_server_send_signal (
server, "irc_outtags",
server->outqueue[priority]->command,
server->outqueue[priority]->message_after_mod,
@@ -2779,14 +2784,16 @@ irc_server_send_one_msg (struct t_irc_server *server, int flags,
}
/* send signal with command that will be sent to server */
irc_server_send_signal (server, "irc_out",
(command) ? command : "unknown",
ptr_msg,
NULL);
irc_server_send_signal (server, "irc_outtags",
(command) ? command : "unknown",
ptr_msg,
(tags_to_send) ? tags_to_send : "");
(void) irc_server_send_signal (
server, "irc_out",
(command) ? command : "unknown",
ptr_msg,
NULL);
(void) irc_server_send_signal (
server, "irc_outtags",
(command) ? command : "unknown",
ptr_msg,
(tags_to_send) ? tags_to_send : "");
if (irc_server_send (server, buffer, strlen (buffer)) <= 0)
rc = 0;
@@ -2896,10 +2903,10 @@ irc_server_sendf (struct t_irc_server *server, int flags, const char *tags,
if (!new_msg || new_msg[0])
{
/* send signal with command that will be sent to server (before split) */
irc_server_send_signal (server, "irc_out1",
(command) ? command : "unknown",
(new_msg) ? new_msg : items[i],
NULL);
(void) irc_server_send_signal (server, "irc_out1",
(command) ? command : "unknown",
(new_msg) ? new_msg : items[i],
NULL);
/*
* split message if needed (max is 512 bytes by default,
+4 -4
View File
@@ -361,10 +361,10 @@ extern struct t_irc_server *irc_server_copy (struct t_irc_server *server,
const char *new_name);
extern int irc_server_rename (struct t_irc_server *server, const char *new_name);
extern int irc_server_reorder (const char **servers, int num_servers);
extern void irc_server_send_signal (struct t_irc_server *server,
const char *signal, const char *command,
const char *full_message,
const char *tags);
extern int irc_server_send_signal (struct t_irc_server *server,
const char *signal, const char *command,
const char *full_message,
const char *tags);
extern void irc_server_set_send_default_tags (const char *tags);
extern struct t_hashtable *irc_server_sendf (struct t_irc_server *server,
int flags,