diff --git a/include/funny.h b/include/funny.h index f0688c3..584e086 100644 --- a/include/funny.h +++ b/include/funny.h @@ -24,11 +24,9 @@ int funny_is_ignore_channel (void); void funny_set_ignore_channel (char *); void funny_match (char *); - void reinstate_user_modes (void); void funny_print_widelist (void); void funny_list (char *, char **); void funny_mode (char *, char **); void funny_namreply (char *, char **); - void update_user_mode (int, const char *); #endif /* FUNNY_H_ */ diff --git a/include/server.h b/include/server.h index 3ed9f22..30e5a2b 100644 --- a/include/server.h +++ b/include/server.h @@ -249,6 +249,7 @@ extern SGroup *server_group_list; void disconnectcmd (char *, char *, char *, char *); char *BX_get_umode (int); int BX_server_list_size (void); + void reinstate_user_modes (int); void BX_set_server_away (int, char *, int); char * BX_get_server_away (int); diff --git a/source/funny.c b/source/funny.c index dc054be..b0a479e 100644 --- a/source/funny.c +++ b/source/funny.c @@ -408,41 +408,3 @@ void funny_mode(char *from, char **ArgList) } } -void update_user_mode(int server, const char *modes) -{ - int onoff = 1; - const char *p_umodes = get_possible_umodes(server); - const char *p; - - for (; *modes; modes++) - { - char c = *modes; - - switch (c) - { - case '-': - onoff = 0; - break; - case '+': - onoff = 1; - break; - case 'o': - case 'O': - set_server_operator(server, onoff); - /* fallthrough */ - default: - p = strchr(p_umodes, c); - if (p) - set_server_flag(server, p - p_umodes, onoff); - else - yell("Ignoring invalid user mode '%c' from server", c); - } - } -} - -void reinstate_user_modes (void) -{ - char *modes = get_umode(from_server); - if (modes && *modes) - send_to_server("MODE %s +%s", get_server_nickname(from_server), modes); -} diff --git a/source/numbers.c b/source/numbers.c index bea8e2a..22a9980 100644 --- a/source/numbers.c +++ b/source/numbers.c @@ -581,7 +581,7 @@ static void got_initial_version_28(char *server, char *sversion, char *channel_m reconnect_all_channels(from_server); reset_display_target(); - reinstate_user_modes(); + reinstate_user_modes(from_server); if (use_nat_address == 1) userhostbase(get_server_nickname(from_server), get_nat_address, 1, "%s", get_server_nickname(from_server)); update_all_status(current_window, NULL, 0); diff --git a/source/parse.c b/source/parse.c index 692387b..d6d0e00 100644 --- a/source/parse.c +++ b/source/parse.c @@ -1462,6 +1462,38 @@ static void check_bitch_mode(char *from, char *uh, char *channel, char *line, Ch reset_display_target(); } +static void update_user_mode(int server, const char *modes) +{ + int onoff = 1; + const char *p_umodes = get_possible_umodes(server); + const char *p; + + for (; *modes; modes++) + { + char c = *modes; + + switch (c) + { + case '-': + onoff = 0; + break; + case '+': + onoff = 1; + break; + case 'o': + case 'O': + set_server_operator(server, onoff); + /* fallthrough */ + default: + p = strchr(p_umodes, c); + if (p) + set_server_flag(server, p - p_umodes, onoff); + else + yell("Ignoring invalid user mode '%c' from server", c); + } + } +} + static void p_mode(char *from, char **ArgList) { char *target; diff --git a/source/server.c b/source/server.c index 33ae9c1..058be16 100644 --- a/source/server.c +++ b/source/server.c @@ -1918,6 +1918,13 @@ void clear_user_modes (int gindex) set_umode(gindex); } +void reinstate_user_modes(int server) +{ + char *modes = get_umode(server); + if (modes && *modes) + my_send_to_server(server, "MODE %s +%s", get_server_nickname(server), modes); +} + /* * Encapsulates everything we need to change our AWAY status. * This improves greatly on having everyone peek into that member.