#include "s_conf.h"
#include "s_serv.h"
#include "client.h"
-#include "common.h"
#include "ircd.h"
#include "parse.h"
#include "packet.h"
#include "hook.h"
#include "send.h"
#include "s_assert.h"
+#include "s_newconf.h"
static char readBuf[READBUF_SIZE];
static void client_dopacket(struct Client *client_p, char *buffer, size_t length);
/* allow opers 4 times the amount of messages as users. why 4?
* why not. :) --fl_
*/
- if(IsOper(client_p) && ConfigFileEntry.no_oper_flood)
+ if(IsOperGeneral(client_p) && ConfigFileEntry.no_oper_flood)
allow_read *= 4;
/*
* Handle flood protection here - if we exceed our flood limit on
if(client_p->localClient->sent_parsed >= allow_read)
break;
+ /* post_registration_delay hack. Don't process any messages from a new client for $n seconds,
+ * to allow network bots to do their thing before channels can be joined.
+ */
+ if (rb_current_time() < client_p->localClient->firsttime + ConfigFileEntry.post_registration_delay)
+ break;
+
dolen = rb_linebuf_get(&client_p->localClient->
buf_recvq, readBuf, READBUF_SIZE,
LINEBUF_COMPLETE, LINEBUF_PARSED);
if(!IsAnyServer(client_p) &&
(rb_linebuf_alloclen(&client_p->localClient->buf_recvq) > ConfigFileEntry.client_flood_max_lines))
{
- if(!(ConfigFileEntry.no_oper_flood && IsOper(client_p)))
+ if(!(ConfigFileEntry.no_oper_flood && IsOperGeneral(client_p)))
{
exit_client(client_p, client_p, client_p, "Excess Flood");
return;
}
}
- /* 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;
}
* with client_p of "local" variation, which contains all the
* necessary fields (buffer etc..)
*/
-void
+static void
client_dopacket(struct Client *client_p, char *buffer, size_t length)
{
s_assert(client_p != NULL);