summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2008-05-06 15:30:29 +0200
committerAlexander Barton <alex@barton.de>2009-09-30 16:00:05 +0200
commiteaaf0c3bd5ce4f48205ca928fba994d0c44e59b2 (patch)
tree18437ce49c408c5144fb0eb8362d20ce7fd5df82
parent9a7499af8bb3c4b781492fef216c86cf7ab04134 (diff)
downloadngircd-eaaf0c3bd5ce4f48205ca928fba994d0c44e59b2.tar.gz
ngircd-eaaf0c3bd5ce4f48205ca928fba994d0c44e59b2.zip
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.
-rw-r--r--src/ngircd/irc-oper.c26
-rw-r--r--src/ngircd/irc-write.c30
-rw-r--r--src/ngircd/irc-write.h3
3 files changed, 36 insertions, 23 deletions
diff --git a/src/ngircd/irc-oper.c b/src/ngircd/irc-oper.c
index 868d0ad4..aae071bf 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 ea0f5f8a..dae78e58 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 51c8f0c2..5bac0de7 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