1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-24 20:06:38 +02:00

irc: add function irc_server_get_max_modes

This commit is contained in:
Sébastien Helleu
2017-02-18 17:34:06 +01:00
parent e1eeb22945
commit 12e2d9995c
3 changed files with 42 additions and 48 deletions
+6 -48
View File
@@ -71,9 +71,7 @@ irc_command_mode_nicks (struct t_irc_server *server,
int argc, char **argv)
{
int i, arg_yes, max_modes, modes_added, msg_priority, prefix_found;
long number;
char *error, prefix, modes[128+1], nicks[1024];
const char *ptr_modes;
char prefix, modes[128+1], nicks[1024];
struct t_irc_nick *ptr_nick;
struct t_hashtable *nicks_sent;
@@ -103,27 +101,8 @@ irc_command_mode_nicks (struct t_irc_server *server,
}
}
/* default is 4 modes max (if server did not send the info) */
max_modes = 4;
/*
* look for the max modes supported in one command by the server
* (in isupport value, with the format: "MODES=4")
*/
ptr_modes = irc_server_get_isupport_value (server, "MODES");
if (ptr_modes)
{
error = NULL;
number = strtol (ptr_modes, &error, 10);
if (error && !error[0])
{
max_modes = number;
if (max_modes < 1)
max_modes = 1;
if (max_modes > 128)
max_modes = 128;
}
}
/* get the max number of modes we can send in a message */
max_modes = irc_server_get_max_modes (server);
/* get prefix for the mode (example: prefix == '@' for mode 'o') */
prefix = irc_server_get_prefix_char_for_mode (server, mode[0]);
@@ -256,9 +235,7 @@ irc_command_mode_masks (struct t_irc_server *server,
char **argv, int pos_masks)
{
int max_modes, modes_added, msg_priority, mask_fits;
long number;
char *error, modes[128+1], masks[1024], *mask;
const char *ptr_modes;
char modes[128+1], masks[1024], *mask;
struct t_irc_channel *ptr_channel;
struct t_irc_nick *ptr_nick;
@@ -272,27 +249,8 @@ irc_command_mode_masks (struct t_irc_server *server,
return;
}
/* default is 4 modes max (if server did not send the info) */
max_modes = 4;
/*
* look for the max modes supported in one command by the server
* (in isupport value, with the format: "MODES=4")
*/
ptr_modes = irc_server_get_isupport_value (server, "MODES");
if (ptr_modes)
{
error = NULL;
number = strtol (ptr_modes, &error, 10);
if (error && !error[0])
{
max_modes = number;
if (max_modes < 1)
max_modes = 1;
if (max_modes > 128)
max_modes = 128;
}
}
/* get the max number of modes we can send in a message */
max_modes = irc_server_get_max_modes (server);
/*
* first message has high priority and subsequent messages have low priority
+35
View File
@@ -952,6 +952,41 @@ irc_server_prefix_char_statusmsg (struct t_irc_server *server,
1 : 0;
}
/*
* Get max modes supported in one command by the server
* (in isupport value, with the format: "MODES=4").
*
* Default is 4 if the info is not given by the server.
*/
int
irc_server_get_max_modes (struct t_irc_server *server)
{
const char *support_modes;
char *error;
long number;
int max_modes;
max_modes = 4;
support_modes = irc_server_get_isupport_value (server, "MODES");
if (support_modes)
{
error = NULL;
number = strtol (support_modes, &error, 10);
if (error && !error[0])
{
max_modes = number;
if (max_modes < 1)
max_modes = 1;
if (max_modes > 128)
max_modes = 128;
}
}
return max_modes;
}
/*
* Gets an evaluated default_msg server option: replaces "%v" by WeeChat
* version if there's no ${...} in string, or just evaluates the string.
+1
View File
@@ -302,6 +302,7 @@ extern char irc_server_get_prefix_char_for_mode (struct t_irc_server *server,
extern const char *irc_server_get_chanmodes (struct t_irc_server *server);
extern int irc_server_prefix_char_statusmsg (struct t_irc_server *server,
char prefix_char);
extern int irc_server_get_max_modes (struct t_irc_server *server);
extern char *irc_server_get_default_msg (const char *default_msg,
struct t_irc_server *server,
const char *channel_name);