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:
committed by
Sébastien Helleu
parent
59853d9b30
commit
ff8beb1918
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user