* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2008 InspIRCd Development Team
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
* ---------------------------------------------------
*/
+/* $Core: libIRCDuserprocess */
+
#include "inspircd.h"
#include "wildcard.h"
#include "xline.h"
void FloodQuitUserHandler::Call(User* current)
{
- Server->Log(DEFAULT,"Excess flood from: %s@%s", current->ident, current->host);
+ Server->Logs->Log("USERS",DEFAULT,"Excess flood from: %s@%s", current->ident, current->host);
Server->SNO->WriteToSnoMask('f',"Excess flood from: %s%s%s@%s",
current->registered == REG_ALL ? current->nick : "",
current->registered == REG_ALL ? "!" : "", current->ident, current->host);
User::QuitUser(Server, current, "Excess flood");
+
if (current->registered != REG_ALL)
{
- Server->XLines->add_zline(120, Server->Config->ServerName, "Flood from unregistered connection", current->GetIPString());
- Server->XLines->apply_lines(APPLY_ZLINES);
+ ZLine* zl = new ZLine(Server, Server->Time(), 0, Server->Config->ServerName, "Flood from unregistered connection", current->GetIPString());
+ if (Server->XLines->AddLine(zl,NULL))
+ Server->XLines->ApplyLines();
+ else
+ delete zl;
}
}
}
catch (CoreException& modexcept)
{
- Server->Log(DEBUG, "%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
+ Server->Logs->Log("USERS",DEBUG, "%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
}
if (MOD_RESULT < 0)
// AddBuffer returned false, theres too much data in the user's buffer and theyre up to no good.
if (current->registered == REG_ALL)
{
- // Make sure they arn't flooding long lines.
- if (Server->Time() > current->reset_due)
- {
- current->reset_due = Server->Time() + current->threshold;
- current->lines_in = 0;
- }
-
- current->lines_in++;
-
- if (current->flood && current->lines_in > current->flood)
- Server->FloodQuitUser(current);
- else
+ if (current->MyClass)
{
- current->WriteServ("NOTICE %s :Your previous line was too long and was not delivered (Over %d chars) Please shorten it.", current->nick, MAXBUF-2);
- current->recvq.clear();
+ // Make sure they arn't flooding long lines.
+ if (Server->Time() > current->reset_due)
+ {
+ current->reset_due = Server->Time() + current->MyClass->GetThreshold();
+ current->lines_in = 0;
+ }
+
+ current->lines_in++;
+
+ if (current->MyClass->GetFlood() && current->lines_in > current->MyClass->GetFlood())
+ Server->FloodQuitUser(current);
+ else
+ {
+ current->WriteServ("NOTICE %s :Your previous line was too long and was not delivered (Over %d chars) Please shorten it.", current->nick, MAXBUF-2);
+ current->recvq.clear();
+ }
}
}
else
/*
* loop over all local users..
*/
- for (std::vector<User*>::iterator count2 = local_users.begin(); count2 != local_users.end(); count2++)
+ for (std::vector<User*>::iterator count2 = this->Users->local_users.begin(); count2 != this->Users->local_users.end(); count2++)
{
User *curr = *count2;
* registration timeout -- didnt send USER/NICK/HOST
* in the time specified in their connection class.
*/
- curr->muted = true;
User::QuitUser(this, curr, "Registration timeout");
continue;
}
// This user didn't answer the last ping, remove them
if (!curr->lastping)
{
- time_t time = this->Time(false) - (curr->nping - curr->pingmax);
+ time_t time = this->Time() - (curr->nping - curr->MyClass->GetPingTime());
char message[MAXBUF];
snprintf(message, MAXBUF, "Ping timeout: %ld second%s", (long)time, time > 1 ? "s" : "");
- curr->muted = true;
curr->lastping = 1;
- curr->nping = TIME+curr->pingmax;
+ curr->nping = TIME + curr->MyClass->GetPingTime();
User::QuitUser(this, curr, message);
continue;
}
curr->Write("PING :%s",this->Config->ServerName);
curr->lastping = 0;
- curr->nping = TIME+curr->pingmax;
+ curr->nping = TIME +curr->MyClass->GetPingTime();
}
}
}