mirror of
https://github.com/weechat/weechat.git
synced 2026-06-30 14:56:39 +02:00
Added generic function for incoming numeric IRC commands (bug #16611)
This commit is contained in:
@@ -4,6 +4,7 @@ WeeChat - Wee Enhanced Environment for Chat
|
||||
ChangeLog - 2006-07-25
|
||||
|
||||
Version 0.2.0 (under dev!):
|
||||
* added generic function for incoming numeric IRC commands (bug #16611)
|
||||
* fixed crash when doing "/part something" on a server buffer (bug #17201)
|
||||
* charsets are now checked when set by /charset command
|
||||
* added "look_save_on_exit" option (patch from Emanuele Giaquinta)
|
||||
|
||||
+900
-952
File diff suppressed because it is too large
Load Diff
@@ -307,74 +307,8 @@ t_irc_command irc_commands[] =
|
||||
"", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_whowas, NULL },
|
||||
{ "001", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_001 },
|
||||
{ "002", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "003", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "004", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "005", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "006", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "007", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "008", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "020", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "042", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "212", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "219", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "221", N_("user mode string"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_221 },
|
||||
{ "250", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "251", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "252", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "253", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "254", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "255", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "256", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "257", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "258", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "259", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "260", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "261", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "262", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "263", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "264", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "265", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "266", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "267", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "268", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "269", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "290", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "292", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "301", N_("away message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_301 },
|
||||
{ "302", N_("userhost"), "", "",
|
||||
@@ -387,8 +321,6 @@ t_irc_command irc_commands[] =
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_306 },
|
||||
{ "307", N_("whois (registered nick)"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_307 },
|
||||
{ "310", N_("available for help"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "311", N_("whois (user)"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_311 },
|
||||
{ "312", N_("whois (server)"), "", "",
|
||||
@@ -445,40 +377,14 @@ t_irc_command irc_commands[] =
|
||||
N_("channel: name of channel\n"
|
||||
" nick: nick on the channel"),
|
||||
NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_353 },
|
||||
{ "364", N_("links"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "365", N_("end of /links list"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "366", N_("end of /names list"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_366 },
|
||||
{ "367", N_("banlist"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_367 },
|
||||
{ "368", N_("end of banlist"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_368 },
|
||||
{ "369", N_("end of /whowas list"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "371", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "372", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "373", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "374", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "375", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "376", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "378", N_("connecting from"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_378 },
|
||||
{ "379", N_("using modes"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "381", N_("you are now an IRC operator"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "382", N_("rehashing"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "391", N_("server local time"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "401", N_("no such nick/channel"), "", "",
|
||||
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "402", N_("no such server"), "", "",
|
||||
@@ -585,8 +491,6 @@ t_irc_command irc_commands[] =
|
||||
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "502", N_("can't change mode for other users"), "", "",
|
||||
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "505", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "671", N_("whois (secure connection)"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_671 },
|
||||
{ "973", N_("whois (secure connection)"), "", "",
|
||||
|
||||
+42
-8
@@ -74,6 +74,21 @@ irc_is_word_char (char c)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_is_numeric: return 1 if given string is 100% numeric
|
||||
*/
|
||||
|
||||
int
|
||||
irc_is_numeric (char *str)
|
||||
{
|
||||
while (str && str[0])
|
||||
{
|
||||
if (!isdigit (str[0]))
|
||||
return 0;
|
||||
str++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_is_highlight: returns 1 if given message contains highlight (with given nick
|
||||
@@ -211,6 +226,8 @@ irc_recv_command (t_irc_server *server, char *entire_line,
|
||||
int i, cmd_found, return_code;
|
||||
char *pos, *nick, *args_after_color;
|
||||
char *dup_entire_line, *dup_host, *dup_arguments;
|
||||
t_irc_recv_func *cmd_recv_func;
|
||||
char *cmd_name;
|
||||
|
||||
if (!command)
|
||||
return -2;
|
||||
@@ -225,21 +242,38 @@ irc_recv_command (t_irc_server *server, char *entire_line,
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* command not found */
|
||||
if (cmd_found < 0)
|
||||
return -3;
|
||||
{
|
||||
/* for numeric commands, we use default recv function (irc_recv_server_msg) */
|
||||
if (irc_is_numeric (command))
|
||||
{
|
||||
cmd_name = command;
|
||||
cmd_recv_func = irc_cmd_recv_server_msg;
|
||||
}
|
||||
else
|
||||
return -3;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd_name = irc_commands[cmd_found].command_name;
|
||||
cmd_recv_func = irc_commands[cmd_found].recv_function;
|
||||
}
|
||||
|
||||
if (irc_commands[i].recv_function != NULL)
|
||||
if (cmd_recv_func != NULL)
|
||||
{
|
||||
dup_entire_line = (entire_line) ? strdup (entire_line) : NULL;
|
||||
dup_host = (host) ? strdup (host) : NULL;
|
||||
dup_arguments = (arguments) ? strdup (arguments) : NULL;
|
||||
|
||||
command_ignored = ignore_check (dup_host, irc_commands[i].command_name, NULL, server->name);
|
||||
command_ignored = ignore_check (dup_host,
|
||||
cmd_name,
|
||||
NULL,
|
||||
server->name);
|
||||
#ifdef PLUGINS
|
||||
return_code = plugin_msg_handler_exec (server->name,
|
||||
irc_commands[i].command_name,
|
||||
cmd_name,
|
||||
dup_entire_line);
|
||||
/* plugin handler choosed to discard message for WeeChat,
|
||||
so we ignore this message in standard handler */
|
||||
@@ -255,9 +289,9 @@ irc_recv_command (t_irc_server *server, char *entire_line,
|
||||
args_after_color = (char *)gui_color_decode ((unsigned char *)dup_arguments,
|
||||
cfg_irc_colors_receive);
|
||||
irc_last_command_received = strdup (dup_entire_line);
|
||||
return_code = (int) (irc_commands[i].recv_function) (server, dup_host, nick,
|
||||
(args_after_color) ?
|
||||
args_after_color : dup_arguments);
|
||||
return_code = (int) (cmd_recv_func) (server, dup_host, nick,
|
||||
(args_after_color) ?
|
||||
args_after_color : dup_arguments);
|
||||
if (irc_last_command_received)
|
||||
free (irc_last_command_received);
|
||||
if (args_after_color)
|
||||
|
||||
+3
-2
@@ -200,6 +200,8 @@ struct t_irc_server
|
||||
|
||||
/* irc commands */
|
||||
|
||||
typedef int (t_irc_recv_func)(t_irc_server *, char *, char *, char *);
|
||||
|
||||
typedef struct t_irc_command t_irc_command;
|
||||
|
||||
struct t_irc_command
|
||||
@@ -218,8 +220,7 @@ struct t_irc_command
|
||||
/* function called when user enters cmd */
|
||||
int (*cmd_function_1arg)(t_irc_server *, t_irc_channel *, char *);
|
||||
/* function called when user enters cmd */
|
||||
int (*recv_function)(t_irc_server *, char *, char *, char *);
|
||||
/* function called when cmd is received */
|
||||
t_irc_recv_func *recv_function; /* function called when cmd is received */
|
||||
};
|
||||
|
||||
/* irc messages */
|
||||
|
||||
@@ -4,6 +4,7 @@ WeeChat - Wee Enhanced Environment for Chat
|
||||
ChangeLog - 2006-07-25
|
||||
|
||||
Version 0.2.0 (under dev!):
|
||||
* added generic function for incoming numeric IRC commands (bug #16611)
|
||||
* fixed crash when doing "/part something" on a server buffer (bug #17201)
|
||||
* charsets are now checked when set by /charset command
|
||||
* added "look_save_on_exit" option (patch from Emanuele Giaquinta)
|
||||
|
||||
+898
-953
File diff suppressed because it is too large
Load Diff
+898
-950
File diff suppressed because it is too large
Load Diff
+898
-953
File diff suppressed because it is too large
Load Diff
+898
-953
File diff suppressed because it is too large
Load Diff
+898
-953
File diff suppressed because it is too large
Load Diff
+898
-953
File diff suppressed because it is too large
Load Diff
+900
-952
File diff suppressed because it is too large
Load Diff
@@ -307,74 +307,8 @@ t_irc_command irc_commands[] =
|
||||
"", 1, MAX_ARGS, 0, 1, NULL, irc_cmd_send_whowas, NULL },
|
||||
{ "001", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_001 },
|
||||
{ "002", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "003", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "004", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "005", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "006", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "007", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "008", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "020", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "042", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "212", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "219", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "221", N_("user mode string"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_221 },
|
||||
{ "250", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "251", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "252", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "253", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "254", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "255", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "256", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "257", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "258", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "259", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "260", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "261", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "262", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "263", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "264", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "265", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "266", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "267", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "268", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "269", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "290", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "292", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "301", N_("away message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_301 },
|
||||
{ "302", N_("userhost"), "", "",
|
||||
@@ -387,8 +321,6 @@ t_irc_command irc_commands[] =
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_306 },
|
||||
{ "307", N_("whois (registered nick)"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_307 },
|
||||
{ "310", N_("available for help"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "311", N_("whois (user)"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_311 },
|
||||
{ "312", N_("whois (server)"), "", "",
|
||||
@@ -445,40 +377,14 @@ t_irc_command irc_commands[] =
|
||||
N_("channel: name of channel\n"
|
||||
" nick: nick on the channel"),
|
||||
NULL, 2, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_353 },
|
||||
{ "364", N_("links"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "365", N_("end of /links list"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "366", N_("end of /names list"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_366 },
|
||||
{ "367", N_("banlist"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_367 },
|
||||
{ "368", N_("end of banlist"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_368 },
|
||||
{ "369", N_("end of /whowas list"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "371", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "372", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "373", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "374", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "375", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "376", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "378", N_("connecting from"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_378 },
|
||||
{ "379", N_("using modes"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "381", N_("you are now an IRC operator"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "382", N_("rehashing"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "391", N_("server local time"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "401", N_("no such nick/channel"), "", "",
|
||||
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "402", N_("no such server"), "", "",
|
||||
@@ -585,8 +491,6 @@ t_irc_command irc_commands[] =
|
||||
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "502", N_("can't change mode for other users"), "", "",
|
||||
NULL, 0, 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "505", N_("a server message"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "671", N_("whois (secure connection)"), "", "",
|
||||
NULL, 0, 0, 0, 1, NULL, NULL, irc_cmd_recv_671 },
|
||||
{ "973", N_("whois (secure connection)"), "", "",
|
||||
|
||||
@@ -74,6 +74,21 @@ irc_is_word_char (char c)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_is_numeric: return 1 if given string is 100% numeric
|
||||
*/
|
||||
|
||||
int
|
||||
irc_is_numeric (char *str)
|
||||
{
|
||||
while (str && str[0])
|
||||
{
|
||||
if (!isdigit (str[0]))
|
||||
return 0;
|
||||
str++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_is_highlight: returns 1 if given message contains highlight (with given nick
|
||||
@@ -211,6 +226,8 @@ irc_recv_command (t_irc_server *server, char *entire_line,
|
||||
int i, cmd_found, return_code;
|
||||
char *pos, *nick, *args_after_color;
|
||||
char *dup_entire_line, *dup_host, *dup_arguments;
|
||||
t_irc_recv_func *cmd_recv_func;
|
||||
char *cmd_name;
|
||||
|
||||
if (!command)
|
||||
return -2;
|
||||
@@ -225,21 +242,38 @@ irc_recv_command (t_irc_server *server, char *entire_line,
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* command not found */
|
||||
if (cmd_found < 0)
|
||||
return -3;
|
||||
{
|
||||
/* for numeric commands, we use default recv function (irc_recv_server_msg) */
|
||||
if (irc_is_numeric (command))
|
||||
{
|
||||
cmd_name = command;
|
||||
cmd_recv_func = irc_cmd_recv_server_msg;
|
||||
}
|
||||
else
|
||||
return -3;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd_name = irc_commands[cmd_found].command_name;
|
||||
cmd_recv_func = irc_commands[cmd_found].recv_function;
|
||||
}
|
||||
|
||||
if (irc_commands[i].recv_function != NULL)
|
||||
if (cmd_recv_func != NULL)
|
||||
{
|
||||
dup_entire_line = (entire_line) ? strdup (entire_line) : NULL;
|
||||
dup_host = (host) ? strdup (host) : NULL;
|
||||
dup_arguments = (arguments) ? strdup (arguments) : NULL;
|
||||
|
||||
command_ignored = ignore_check (dup_host, irc_commands[i].command_name, NULL, server->name);
|
||||
command_ignored = ignore_check (dup_host,
|
||||
cmd_name,
|
||||
NULL,
|
||||
server->name);
|
||||
#ifdef PLUGINS
|
||||
return_code = plugin_msg_handler_exec (server->name,
|
||||
irc_commands[i].command_name,
|
||||
cmd_name,
|
||||
dup_entire_line);
|
||||
/* plugin handler choosed to discard message for WeeChat,
|
||||
so we ignore this message in standard handler */
|
||||
@@ -255,9 +289,9 @@ irc_recv_command (t_irc_server *server, char *entire_line,
|
||||
args_after_color = (char *)gui_color_decode ((unsigned char *)dup_arguments,
|
||||
cfg_irc_colors_receive);
|
||||
irc_last_command_received = strdup (dup_entire_line);
|
||||
return_code = (int) (irc_commands[i].recv_function) (server, dup_host, nick,
|
||||
(args_after_color) ?
|
||||
args_after_color : dup_arguments);
|
||||
return_code = (int) (cmd_recv_func) (server, dup_host, nick,
|
||||
(args_after_color) ?
|
||||
args_after_color : dup_arguments);
|
||||
if (irc_last_command_received)
|
||||
free (irc_last_command_received);
|
||||
if (args_after_color)
|
||||
|
||||
@@ -200,6 +200,8 @@ struct t_irc_server
|
||||
|
||||
/* irc commands */
|
||||
|
||||
typedef int (t_irc_recv_func)(t_irc_server *, char *, char *, char *);
|
||||
|
||||
typedef struct t_irc_command t_irc_command;
|
||||
|
||||
struct t_irc_command
|
||||
@@ -218,8 +220,7 @@ struct t_irc_command
|
||||
/* function called when user enters cmd */
|
||||
int (*cmd_function_1arg)(t_irc_server *, t_irc_channel *, char *);
|
||||
/* function called when user enters cmd */
|
||||
int (*recv_function)(t_irc_server *, char *, char *, char *);
|
||||
/* function called when cmd is received */
|
||||
t_irc_recv_func *recv_function; /* function called when cmd is received */
|
||||
};
|
||||
|
||||
/* irc messages */
|
||||
|
||||
Reference in New Issue
Block a user