New function IRC_CheckListTooBig() to check size of list replies
authorAlexander Barton <alex@barton.de>
Fri, 6 Jan 2012 19:05:07 +0000 (20:05 +0100)
committerAlexander Barton <alex@barton.de>
Fri, 6 Jan 2012 19:05:07 +0000 (20:05 +0100)
It the limit is reached, a NOTICE is sent to the client and list
processing should stop.

src/ngircd/irc.c
src/ngircd/irc.h

index 7a871379a422543c416a111e6d2eeaafdd661dc5..10e3e45656bdb1cc996ef0d92ad2c0a1cd8fab2f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2004 Alexander Barton <alex@barton.de>
+ * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
  *
  * 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
@@ -45,6 +45,35 @@ static bool Send_Message_Mask PARAMS((CLIENT *from, char *command,
                                      bool SendErrors));
 
 
+/**
+ * Check if a list limit is reached and inform client accordingly.
+ *
+ * @param From The client.
+ * @param Count Reply item count.
+ * @param Limit Reply limit.
+ * @param Name Name of the list.
+ * @return true if list limit has been reached; false otherwise.
+ */
+GLOBAL bool
+IRC_CheckListTooBig(CLIENT *From, const int Count, const int Limit,
+                   const char *Name)
+{
+       assert(From != NULL);
+       assert(Count >= 0);
+       assert(Limit > 0);
+       assert(Name != NULL);
+
+       if (Count < Limit)
+               return false;
+
+       (void)IRC_WriteStrClient(From,
+                                "NOTICE %s :%s list limit (%d) reached!",
+                                Client_ID(From), Name, Limit);
+       IRC_SetPenalty(From, 2);
+       return true;
+}
+
+
 GLOBAL bool
 IRC_ERROR( CLIENT *Client, REQUEST *Req )
 {
index cdeb74580984c2fee70198d83cb81e6e05c67649..c2f9b66244eba0c3fc84db90f1104cd60b4d3758 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
  *
  * 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
@@ -17,6 +17,9 @@
  * IRC commands (header)
  */
 
+GLOBAL bool IRC_CheckListTooBig PARAMS((CLIENT *From, const int Count,
+                                       const int Limit, const char *Name));
+
 GLOBAL bool IRC_ERROR PARAMS((CLIENT *Client, REQUEST *Req));
 GLOBAL bool IRC_KILL PARAMS((CLIENT *Client, REQUEST *Req));
 GLOBAL bool IRC_NOTICE PARAMS((CLIENT *Client, REQUEST *Req));