New function IRC_SendWallops().

Implement new global function IRC_SendWallops() that can be called by
other functions to generate WALLOPS messages to users with +w mode.
This commit is contained in:
Alexander Barton 2008-05-06 15:30:29 +02:00
parent 9a7499af8b
commit eaaf0c3bd5
3 changed files with 36 additions and 23 deletions

View File

@ -298,8 +298,7 @@ IRC_DISCONNECT(CLIENT * Client, REQUEST * Req)
GLOBAL bool
IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
{
CLIENT *to, *from;
int client_type;
CLIENT *from;
assert( Client != NULL );
assert( Req != NULL );
@ -307,8 +306,7 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
if (Req->argc != 1)
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command);
client_type = Client_Type(Client);
switch (client_type) {
switch (Client_Type(Client)) {
case CLIENT_USER:
if (!Client_OperByMe(Client))
return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG, Client_ID(Client));
@ -324,25 +322,9 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
if (!from)
return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID(Client), Req->prefix);
for (to=Client_First(); to != NULL; to=Client_Next(to)) {
if (Client_Conn(to) < 0) /* no local connection or WALLOPS origin */
continue;
client_type = Client_Type(to);
switch (client_type) {
case CLIENT_USER:
if (Client_HasMode(to, 'w'))
IRC_WriteStrClientPrefix(to, from, "WALLOPS :%s", Req->argv[0]);
break;
case CLIENT_SERVER:
if (to != Client)
IRC_WriteStrClientPrefix(to, from, "WALLOPS :%s", Req->argv[0]);
break;
}
}
IRC_SendWallops(Client, from, Req->argv[0]);
return CONNECTED;
}
} /* IRC_WALLOPS */
/* -eof- */

View File

@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2005 by Alexander Barton (alex@barton.de)
* Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -405,6 +405,34 @@ va_dcl
} /* IRC_WriteStrRelatedPrefix */
/**
* Send WALLOPS message.
*/
GLOBAL void
IRC_SendWallops(CLIENT *Client, CLIENT *From, const char *Message)
{
CLIENT *to;
for (to=Client_First(); to != NULL; to=Client_Next(to)) {
if (Client_Conn(to) == NONE) /* no local connection */
continue;
switch (Client_Type(to)) {
case CLIENT_USER:
if (Client_HasMode(to, 'w'))
IRC_WriteStrClientPrefix(to, From,
"WALLOPS :%s", Message);
break;
case CLIENT_SERVER:
if (to != Client)
IRC_WriteStrClientPrefix(to, From,
"WALLOPS :%s", Message);
break;
}
}
} /* IRC_SendWallops */
GLOBAL void
IRC_SetPenalty( CLIENT *Client, time_t Seconds )
{

View File

@ -35,6 +35,9 @@ GLOBAL void IRC_WriteStrServersPrefixFlag_CB PARAMS((CLIENT *ExceptOf,
GLOBAL bool IRC_WriteStrRelatedPrefix PARAMS((CLIENT *Client, CLIENT *Prefix,
bool Remote, char *Format, ...));
GLOBAL void IRC_SendWallops PARAMS((CLIENT *Client, CLIENT *From,
const char *Message));
GLOBAL void IRC_SetPenalty PARAMS((CLIENT *Client, time_t Seconds));
#endif