Module: ngircd.git Branch: master Commit: eaaf0c3bd5ce4f48205ca928fba994d0c44e59b2 URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=eaaf0...
Author: Alexander Barton alex@barton.de Date: Tue May 6 15:30:29 2008 +0200
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.
---
src/ngircd/irc-oper.c | 26 ++++---------------------- src/ngircd/irc-write.c | 30 +++++++++++++++++++++++++++++- src/ngircd/irc-write.h | 3 +++ 3 files changed, 36 insertions(+), 23 deletions(-)
diff --git a/src/ngircd/irc-oper.c b/src/ngircd/irc-oper.c index 868d0ad..aae071b 100644 --- a/src/ngircd/irc-oper.c +++ b/src/ngircd/irc-oper.c @@ -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- */ diff --git a/src/ngircd/irc-write.c b/src/ngircd/irc-write.c index ea0f5f8..dae78e5 100644 --- a/src/ngircd/irc-write.c +++ b/src/ngircd/irc-write.c @@ -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 ) { diff --git a/src/ngircd/irc-write.h b/src/ngircd/irc-write.h index 51c8f0c..5bac0de 100644 --- a/src/ngircd/irc-write.h +++ b/src/ngircd/irc-write.h @@ -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