X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommand_parse.cpp;h=5492e26b5d54717ca44799b40f4cb2d389ab47cd;hb=21f9acdb6c5c35b26d926f75845135f16c3c54e9;hp=f3ff69c9601e1c035f8272f4eebfd71f1149ac96;hpb=6856c87ae51d655870607c6e74e0eed6d338283a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/command_parse.cpp b/src/command_parse.cpp index f3ff69c96..5492e26b5 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -11,6 +11,8 @@ * --------------------------------------------------- */ +/* $Core: libIRCDcommand_parse */ + #include "inspircd.h" #include "wildcard.h" #include "xline.h" @@ -217,26 +219,29 @@ CmdResult CommandParser::CallHandler(const std::string &commandname,const char** void CommandParser::DoLines(User* current, bool one_only) { // while there are complete lines to process... - int floodlines = 0; + unsigned int floodlines = 0; while (current->BufferIsReady()) { - if (ServerInstance->Time() > current->reset_due) + if (current->MyClass) { - current->reset_due = ServerInstance->Time() + current->threshold; - current->lines_in = 0; - } + if (ServerInstance->Time() > current->reset_due) + { + current->reset_due = ServerInstance->Time() + current->MyClass->GetThreshold(); + current->lines_in = 0; + } - if (++current->lines_in > current->flood && current->flood) - { - ServerInstance->FloodQuitUser(current); - return; - } + if (++current->lines_in > current->MyClass->GetFlood() && current->MyClass->GetFlood()) + { + ServerInstance->FloodQuitUser(current); + return; + } - if ((++floodlines > current->flood) && (current->flood != 0)) - { - ServerInstance->FloodQuitUser(current); - return; + if ((++floodlines > current->MyClass->GetFlood()) && (current->MyClass->GetFlood() != 0)) + { + ServerInstance->FloodQuitUser(current); + return; + } } // use GetBuffer to copy single lines into the sanitized string @@ -282,16 +287,6 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) return true; } - if (!user) - { - /* - * before, we went and found the command even with no user.. seems nonsensical. - * I'm not entirely sure when we would be passed NULL, but let's handle it - * anyway, by dropping it like a hot potato. -- w00t - */ - return true; - } - /* find the command, check it exists */ Commandable::iterator cm = cmdlist.find(command); @@ -303,13 +298,19 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) } /* Modify the user's penalty */ - user->Penalty += cm->second->Penalty; - bool do_more = (user->Penalty < 10); - if (do_more) - user->OverPenalty = true; + bool do_more = true; + if (!user->ExemptFromPenalty) + { + user->IncreasePenalty(cm->second->Penalty); + do_more = (user->Penalty < 10); + if (!do_more) + user->OverPenalty = true; + } /* activity resets the ping pending timer */ - user->nping = ServerInstance->Time() + user->pingmax; + if (user->MyClass) + user->nping = ServerInstance->Time() + user->MyClass->GetPingTime(); + if (cm->second->flags_needed) { if (!user->IsModeSet(cm->second->flags_needed)) @@ -498,7 +499,7 @@ bool CommandParser::ReloadCommand(const char* cmd, User* user) return false; } -CmdResult cmd_reload::Handle(const char** parameters, int pcnt, User *user) +CmdResult cmd_reload::Handle(const char** parameters, int /* pcnt */, User *user) { user->WriteServ("NOTICE %s :*** Reloading command '%s'",user->nick, parameters[0]); if (ServerInstance->Parser->ReloadCommand(parameters[0], user))