New function IRC_CheckListTooBig() to check size of list replies

It the limit is reached, a NOTICE is sent to the client and list
processing should stop.
This commit is contained in:
Alexander Barton 2012-01-06 20:05:07 +01:00
parent fdfc27265e
commit f8405b1a4f
2 changed files with 34 additions and 2 deletions

View 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 )
{

View 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));