* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
- *
- * $Id: packet.c 3446 2007-05-14 22:21:16Z jilles $
*/
#include "stdinc.h"
#include "s_conf.h"
#include "s_serv.h"
#include "client.h"
-#include "common.h"
#include "ircd.h"
#include "parse.h"
#include "packet.h"
else
allow_read = ConfigFileEntry.client_flood_burst_rate;
allow_read *= ConfigFileEntry.client_flood_message_time;
-
/* allow opers 4 times the amount of messages as users. why 4?
* why not. :) --fl_
*/
if(IsOper(client_p) && ConfigFileEntry.no_oper_flood)
allow_read *= 4;
- else
- {
- /*
- * If a client's sendq is greater than the soft limit, do not allow any
- * more messages to be read. This allows us to safely handle commands like
- * LIST without harming the server. --kaniini
- */
- if (rb_linebuf_len(&client_p->localClient->buf_sendq) > (get_sendq(client_p)))
- allow_read = 0;
- }
-
/*
* Handle flood protection here - if we exceed our flood limit on
* messages in this loop, we simply drop out of the loop prematurely.
{
struct Client *client_p = data;
int length = 0;
-
int binary = 0;
-#ifdef USE_IODEBUG_HOOKS
- hook_data_int hdata;
-#endif
while(1)
{
return;
}
-#ifdef USE_IODEBUG_HOOKS
- hdata.client = client_p;
- hdata.arg1 = readBuf;
- hdata.arg2 = length;
- call_hook(h_iorecv_id, &hdata);
-#endif
-
if(client_p->localClient->lasttime < rb_current_time())
client_p->localClient->lasttime = rb_current_time();
client_p->flags &= ~FLAGS_PINGSENT;
}
}
- /* bail if short read */
- if(length < READBUF_SIZE)
- {
+ /* bail if short read, but not for SCTP as it returns data in packets */
+ if (length < READBUF_SIZE && !(rb_get_type(client_p->localClient->F) & RB_FD_SCTP)) {
rb_setselect(client_p->localClient->F, RB_SELECT_READ, read_packet, client_p);
return;
}