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:
@@ -569,7 +569,7 @@ extern Function_ptr *global;
|
||||
#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 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 is_server_queue (*(int (*)(void ))global[IS_SERVER_QUEUE])
|
||||
|
||||
|
||||
@@ -375,7 +375,7 @@ struct sockaddr_foobar get_server_local_addr (int);
|
||||
struct sockaddr_foobar get_server_uh_addr (int);
|
||||
NotifyItem *get_server_notify_list (int);
|
||||
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 save_servers (FILE *);
|
||||
void add_split_server (char *, char *, int);
|
||||
|
||||
@@ -3159,21 +3159,18 @@ int silent = 0;
|
||||
bitchsay("You were /away for %i hours %i minutes and %i seconds. [\002BX\002-MsgLog %s]",
|
||||
hours, minutes, seconds,
|
||||
on_off(get_int_var(MSGLOG_VAR)));
|
||||
if (fget_string_var(FORMAT_BACK_FSET))
|
||||
{
|
||||
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))
|
||||
{
|
||||
quote_it(stripansicodes(convert_output_format(fget_string_var(FORMAT_BACK_FSET), "%s %d %d %d %d %s",
|
||||
update_clock(GET_TIME), hours, minutes, seconds,
|
||||
get_int_var(MSGCOUNT_VAR), reason)), NULL, fset);
|
||||
snprintf(str, BIG_BUFFER_SIZE,
|
||||
"PRIVMSG %%s :ACTION %s", fset);
|
||||
send_msg_to_channels(get_server_channels(from_server), from_server, str);
|
||||
}
|
||||
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,
|
||||
get_int_var(MSGCOUNT_VAR), reason));
|
||||
snprintf(str, BIG_BUFFER_SIZE, "ACTION %s", fset);
|
||||
send_msg_to_channels(from_server, str);
|
||||
}
|
||||
}
|
||||
set_server_away(from_server, NULL, silent);
|
||||
|
||||
@@ -1919,23 +1919,11 @@ void BX_set_server_away (int ssa_index, char *message, int silent)
|
||||
char buffer[BIG_BUFFER_SIZE+1];
|
||||
if (get_int_var(SEND_AWAY_MSG_VAR))
|
||||
{
|
||||
char *p = NULL;
|
||||
ChannelList *chan;
|
||||
if (get_server_version(ssa_index) == Server2_8hybrid6)
|
||||
{
|
||||
for (chan = server_list[ssa_index].chan_list; chan; chan = chan->next)
|
||||
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);
|
||||
}
|
||||
snprintf(buffer, BIG_BUFFER_SIZE, "ACTION %s",
|
||||
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_msg_to_channels(ssa_index, buffer);
|
||||
}
|
||||
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);
|
||||
@@ -3712,40 +3700,37 @@ struct sockaddr_foobar get_server_uh_addr (int servnum)
|
||||
return server_list[servnum].uh_addr;
|
||||
}
|
||||
|
||||
|
||||
void BX_send_msg_to_channels(ChannelList *channel, int server, char *msg)
|
||||
void BX_send_msg_to_channels(int server, const char *msg)
|
||||
{
|
||||
int serv_version;
|
||||
char *p = NULL;
|
||||
ChannelList *chan = NULL;
|
||||
int count;
|
||||
char *p = NULL;
|
||||
ChannelList *chan = NULL;
|
||||
int count;
|
||||
/*
|
||||
* Because of hybrid and it's removal of , targets
|
||||
* we need to detect this and get around it..
|
||||
*/
|
||||
serv_version = get_server_version(server);
|
||||
if (serv_version == Server2_8hybrid6)
|
||||
if (get_server_version(server) == Server2_8hybrid6)
|
||||
{
|
||||
/* this might be a cause for some flooding however.
|
||||
* so we use the server queue. Which will help alleviate
|
||||
* some flooding from the client.
|
||||
*/
|
||||
for (chan = channel; chan; chan = chan->next)
|
||||
queue_send_to_server(server, msg, chan->channel);
|
||||
for (chan = get_server_channels(server); chan; chan = chan->next)
|
||||
queue_send_to_server(server, "PRIVMSG %s :%s", chan->channel, msg);
|
||||
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);
|
||||
if (count > 3)
|
||||
{
|
||||
send_to_server(msg, p);
|
||||
my_send_to_server(server, "PRIVMSG %s :%s", p, msg);
|
||||
new_free(&p);
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
if (p)
|
||||
send_to_server(msg, p);
|
||||
my_send_to_server(server, "PRIVMSG %s :%s", p, msg);
|
||||
new_free(&p);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user