Replace get_server_flag() with get_server_umode()

This function gets the status of a single umode flag identified by umode char rather than
internal server flag number.

This also lets us remove all the USER_MODE* constants because they're no longer required.

Invert the sense of the +w check in e_wall() - we only echo our OPERWALL if we're *not* +w,
because if we are +w then the server will echo it back to us anyway.
This commit is contained in:
Kevin Easton
2017-12-07 00:23:43 +11:00
parent 1769c03951
commit 3800e4b099
7 changed files with 61 additions and 69 deletions

View File

@@ -3251,7 +3251,10 @@ BUILT_IN_COMMAND(e_wall)
set_display_target(NULL, LOG_WALLOP);
send_to_server("%s :%s", command, args);
if (get_server_flag(from_server, USER_MODE_W))
/* Only show the message if we are _not_ +w, because if we are the server
* will echo our WALLOPS back to us. */
if (!get_server_umode(from_server, 'w'))
put_it("!! %s", args);
add_last_type(&last_sent_wall[0], 1, get_server_nickname(from_server), NULL, "*", args);
reset_display_target();

View File

@@ -281,7 +281,7 @@ static int already_done = 0;
global_table[GET_SERVER_MOTD] = (Function_ptr) BX_get_server_motd;
global_table[GET_SERVER_OPERATOR] = (Function_ptr) BX_get_server_operator;
global_table[GET_SERVER_VERSION] = (Function_ptr) BX_get_server_version;
global_table[GET_SERVER_FLAG] = (Function_ptr) BX_get_server_flag;
global_table[GET_SERVER_UMODE] = (Function_ptr) BX_get_server_umode;
global_table[GET_SERVER_PORT] = (Function_ptr) BX_get_server_port;
global_table[GET_SERVER_LAG] = (Function_ptr) BX_get_server_lag;
global_table[GET_SERVER2_8] = (Function_ptr) BX_get_server2_8;

View File

@@ -57,7 +57,7 @@ CVS_REVISION(server_c)
static char * set_umode (int du_index);
const char * umodes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static const char umodes[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
/* server_list: the list of servers that the user can connect to,etc */
Server *server_list = NULL;
@@ -2007,53 +2007,68 @@ time_t get_server_awaytime(int server)
return server_list[server].awaytime;
}
static int umode_index(char mode)
{
const char *p = strchr(umodes, mode);
if (p)
return p - umodes;
else
return -1;
}
/* update_server_umode()
*
* Updates the client's idea of the status of a single umode flag.
*/
void BX_update_server_umode(int server, char mode, int value)
{
const char *p = strchr(umodes, mode);
const int flag = umode_index(mode);
if (server <= -1 || server > number_of_servers)
return;
if (p)
{
const int flag = p - umodes;
if (flag > 31)
{
if (value)
server_list[server].flags2 |= 0x1L << (flag - 32);
else
server_list[server].flags2 &= ~(0x1L << (flag - 32));
}
else
{
if (value)
server_list[server].flags |= 0x1L << flag;
else
server_list[server].flags &= ~(0x1L << flag);
}
set_umode(server);
}
else
if (flag < 0)
{
yell("Ignoring invalid user mode '%c' from server", mode);
return;
}
}
int BX_get_server_flag (int gsf_index, int flag)
{
if (gsf_index == -1)
gsf_index = primary_server;
else if (gsf_index >= number_of_servers)
return 0;
if (flag > 31)
return !!(server_list[gsf_index].flags2 & (0x1L << (flag - 32)));
{
if (value)
server_list[server].flags2 |= 0x1L << (flag - 32);
else
server_list[server].flags2 &= ~(0x1L << (flag - 32));
}
else
return !!(server_list[gsf_index].flags & (0x1L << flag));
{
if (value)
server_list[server].flags |= 0x1L << flag;
else
server_list[server].flags &= ~(0x1L << flag);
}
set_umode(server);
}
/* get_server_umode()
*
* Returns the status (set/unset) of a given umode flag.
*/
int BX_get_server_umode(int server, char mode)
{
const int flag = umode_index(mode);
if (server <= -1 || server > number_of_servers)
return 0;
if (flag < 0)
return 0;
if (flag > 31)
return !!(server_list[server].flags2 & (0x1L << (flag - 32)));
else
return !!(server_list[server].flags & (0x1L << flag));
}
/*