Change send_msg_to_channels() to remove 'channels' argument and always use PRIVMSG

The 'channels' argument was unnecessary because the channel list passed to it would
always be from get_server_channels(server) anyway.

Changing the message argument from a protocol message format string to a plain payload
string for PRIVMSG means printf-escaping of the argument is avoided in the caller.
This simplifies the callers and means we can remove the last use of quote_it().

This change also switches set_server_away() to use send_msg_to_channels() instead of
open-coding the equivalent, which simplifies that function a lot.

We are changing the signature of a function exported to modules here; however none
of the in-tree modules use this function so it should be OK.
This commit is contained in:
Kevin Easton
2016-10-13 01:36:19 +11:00
parent 08e3c99720
commit 04cf832604
4 changed files with 27 additions and 45 deletions

View File

@@ -569,7 +569,7 @@ extern Function_ptr *global;
#define set_server_trace_kill (*(void (*)(int , int ))global[SET_SERVER_TRACE_KILL]) #define set_server_trace_kill (*(void (*)(int , int ))global[SET_SERVER_TRACE_KILL])
#define add_server_channels (*(void (*)(int, ChannelList *))global[ADD_SERVER_CHANNELS]) #define add_server_channels (*(void (*)(int, ChannelList *))global[ADD_SERVER_CHANNELS])
#define set_server_channels (*(void (*)(int, ChannelList *))global[SET_SERVER_CHANNELS]) #define set_server_channels (*(void (*)(int, ChannelList *))global[SET_SERVER_CHANNELS])
#define send_msg_to_channels (*(void (*)(ChannelList *, int, char *))global[SEND_MSG_TO_CHANNELS]) #define send_msg_to_channels (*(void (*)(int, const char *))global[SEND_MSG_TO_CHANNELS])
#define send_msg_to_nicks (*(void (*)(ChannelList *, int, char *))global[SEND_MSG_TO_NICKS]) #define send_msg_to_nicks (*(void (*)(ChannelList *, int, char *))global[SEND_MSG_TO_NICKS])
#define is_server_queue (*(int (*)(void ))global[IS_SERVER_QUEUE]) #define is_server_queue (*(int (*)(void ))global[IS_SERVER_QUEUE])

View File

@@ -375,7 +375,7 @@ struct sockaddr_foobar get_server_local_addr (int);
struct sockaddr_foobar get_server_uh_addr (int); struct sockaddr_foobar get_server_uh_addr (int);
NotifyItem *get_server_notify_list (int); NotifyItem *get_server_notify_list (int);
void BX_send_msg_to_nicks (ChannelList *, int, char *); void BX_send_msg_to_nicks (ChannelList *, int, char *);
void BX_send_msg_to_channels (ChannelList *, int, char *); void BX_send_msg_to_channels (int, const char *);
int BX_is_server_queue (void); int BX_is_server_queue (void);
int save_servers (FILE *); int save_servers (FILE *);
void add_split_server (char *, char *, int); void add_split_server (char *, char *, int);

View File

@@ -3159,21 +3159,18 @@ int silent = 0;
bitchsay("You were /away for %i hours %i minutes and %i seconds. [\002BX\002-MsgLog %s]", bitchsay("You were /away for %i hours %i minutes and %i seconds. [\002BX\002-MsgLog %s]",
hours, minutes, seconds, hours, minutes, seconds,
on_off(get_int_var(MSGLOG_VAR))); on_off(get_int_var(MSGLOG_VAR)));
{
char str[BIG_BUFFER_SIZE+1];
char reason[BIG_BUFFER_SIZE+1];
char fset[BIG_BUFFER_SIZE+1];
*reason = 0;
quote_it(args ? args : get_server_away(from_server), NULL, reason);
if (fget_string_var(FORMAT_BACK_FSET)) if (fget_string_var(FORMAT_BACK_FSET))
{ {
quote_it(stripansicodes(convert_output_format(fget_string_var(FORMAT_BACK_FSET), "%s %d %d %d %d %s", char str[BIG_BUFFER_SIZE+1];
char *fset;
char *reason = args ? args : get_server_away(from_server);
fset = stripansicodes(convert_output_format(
fget_string_var(FORMAT_BACK_FSET), "%s %d %d %d %d %s",
update_clock(GET_TIME), hours, minutes, seconds, update_clock(GET_TIME), hours, minutes, seconds,
get_int_var(MSGCOUNT_VAR), reason)), NULL, fset); get_int_var(MSGCOUNT_VAR), reason));
snprintf(str, BIG_BUFFER_SIZE, snprintf(str, BIG_BUFFER_SIZE, "ACTION %s", fset);
"PRIVMSG %%s :ACTION %s", fset); send_msg_to_channels(from_server, str);
send_msg_to_channels(get_server_channels(from_server), from_server, str);
}
} }
} }
set_server_away(from_server, NULL, silent); set_server_away(from_server, NULL, silent);

View File

@@ -1919,23 +1919,11 @@ void BX_set_server_away (int ssa_index, char *message, int silent)
char buffer[BIG_BUFFER_SIZE+1]; char buffer[BIG_BUFFER_SIZE+1];
if (get_int_var(SEND_AWAY_MSG_VAR)) if (get_int_var(SEND_AWAY_MSG_VAR))
{ {
char *p = NULL; snprintf(buffer, BIG_BUFFER_SIZE, "ACTION %s",
ChannelList *chan; stripansicodes(convert_output_format(
if (get_server_version(ssa_index) == Server2_8hybrid6) fget_string_var(FORMAT_AWAY_FSET), "%s [\002BX\002-MsgLog %s] %s",
{ update_clock(GET_TIME), get_int_var(MSGLOG_VAR)? "On" : "Off", message)));
for (chan = server_list[ssa_index].chan_list; chan; chan = chan->next) send_msg_to_channels(ssa_index, buffer);
send_to_server("PRIVMSG %s :ACTION %s", chan->channel,
stripansicodes(convert_output_format(fget_string_var(FORMAT_AWAY_FSET), "%s [\002BX\002-MsgLog %s] %s",update_clock(GET_TIME), get_int_var(MSGLOG_VAR)?"On":"Off", message)));
}
else
{
for (chan = server_list[ssa_index].chan_list; chan; chan = chan->next)
m_s3cat(&p, ",", chan->channel);
if (p)
send_to_server("PRIVMSG %s :ACTION %s", p,
stripansicodes(convert_output_format(fget_string_var(FORMAT_AWAY_FSET), "%s [\002BX\002-MsgLog %s] %s",update_clock(GET_TIME), get_int_var(MSGLOG_VAR)?"On":"Off", message)));
new_free(&p);
}
} }
send_to_server("%s :%s", "AWAY", stripansicodes(convert_output_format(fget_string_var(FORMAT_AWAY_FSET), "%s [\002BX\002-MsgLog %s] %s", update_clock(GET_TIME), get_int_var(MSGLOG_VAR)?"On":"Off",message))); send_to_server("%s :%s", "AWAY", stripansicodes(convert_output_format(fget_string_var(FORMAT_AWAY_FSET), "%s [\002BX\002-MsgLog %s] %s", update_clock(GET_TIME), get_int_var(MSGLOG_VAR)?"On":"Off",message)));
strncpy(buffer, convert_output_format(fget_string_var(FORMAT_SEND_ACTION_FSET), "%s %s $C ", update_clock(GET_TIME), server_list[ssa_index].nickname), BIG_BUFFER_SIZE); strncpy(buffer, convert_output_format(fget_string_var(FORMAT_SEND_ACTION_FSET), "%s %s $C ", update_clock(GET_TIME), server_list[ssa_index].nickname), BIG_BUFFER_SIZE);
@@ -3712,10 +3700,8 @@ struct sockaddr_foobar get_server_uh_addr (int servnum)
return server_list[servnum].uh_addr; return server_list[servnum].uh_addr;
} }
void BX_send_msg_to_channels(int server, const char *msg)
void BX_send_msg_to_channels(ChannelList *channel, int server, char *msg)
{ {
int serv_version;
char *p = NULL; char *p = NULL;
ChannelList *chan = NULL; ChannelList *chan = NULL;
int count; int count;
@@ -3723,29 +3709,28 @@ int count;
* Because of hybrid and it's removal of , targets * Because of hybrid and it's removal of , targets
* we need to detect this and get around it.. * we need to detect this and get around it..
*/ */
serv_version = get_server_version(server); if (get_server_version(server) == Server2_8hybrid6)
if (serv_version == Server2_8hybrid6)
{ {
/* this might be a cause for some flooding however. /* this might be a cause for some flooding however.
* so we use the server queue. Which will help alleviate * so we use the server queue. Which will help alleviate
* some flooding from the client. * some flooding from the client.
*/ */
for (chan = channel; chan; chan = chan->next) for (chan = get_server_channels(server); chan; chan = chan->next)
queue_send_to_server(server, msg, chan->channel); queue_send_to_server(server, "PRIVMSG %s :%s", chan->channel, msg);
return; return;
} }
for (chan = channel, count = 1; chan; chan = chan->next, count++) for (chan = get_server_channels(server), count = 1; chan; chan = chan->next, count++)
{ {
m_s3cat(&p, ",", chan->channel); m_s3cat(&p, ",", chan->channel);
if (count > 3) if (count > 3)
{ {
send_to_server(msg, p); my_send_to_server(server, "PRIVMSG %s :%s", p, msg);
new_free(&p); new_free(&p);
count = 0; count = 0;
} }
} }
if (p) if (p)
send_to_server(msg, p); my_send_to_server(server, "PRIVMSG %s :%s", p, msg);
new_free(&p); new_free(&p);
} }