X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommand_parse.cpp;h=9fc8f85bb449999643d1d90b1f7d5e6cbbad44c4;hb=ff3eef491aa9e107d09d9dd9560ef7715b37b3b3;hp=92d4b8c24be46452faa0723c3f9a903d19fe60e5;hpb=6a4b9410c9d4b6ab243bee4cc4ed6380baf948d3;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/command_parse.cpp b/src/command_parse.cpp index 92d4b8c24..9fc8f85bb 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -11,8 +11,6 @@ * --------------------------------------------------- */ -/* $Core */ - #include "inspircd.h" #include "xline.h" #include "socketengine.h" @@ -29,7 +27,7 @@ int InspIRCd::PassCompare(Extensible* ex, const std::string &data, const std::string &input, const std::string &hashtype) { ModResult res; - FIRST_MOD_RESULT(this, OnPassCompare, res, (ex, data, input, hashtype)); + FIRST_MOD_RESULT(OnPassCompare, res, (ex, data, input, hashtype)); /* Module matched */ if (res == MOD_RES_ALLOW) @@ -226,23 +224,6 @@ CmdResult CommandParser::CallHandler(const std::string &commandname, const std:: return CMD_INVALID; } -void CommandParser::DoLines(User* current, bool one_only) -{ - while (current->BufferIsReady()) - { - // use GetBuffer to copy single lines into the sanitized string - std::string single_line = current->GetBuffer(); - current->bytes_in += single_line.length(); - current->cmds_in++; - if (single_line.length() > MAXBUF - 2) // MAXBUF is 514 to allow for neccessary line terminators - single_line.resize(MAXBUF - 2); // So to trim to 512 here, we use MAXBUF - 2 - - // ProcessBuffer returns false if the user has gone over penalty - if (!ServerInstance->Parser->ProcessBuffer(single_line, current) || one_only) - break; - } -} - bool CommandParser::ProcessCommand(User *user, std::string &cmd) { std::vector command_p; @@ -268,18 +249,17 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) /* Modify the user's penalty regardless of whether or not the command exists */ bool do_more = true; - if (!user->HasPrivPermission("users/flood/no-throttle")) + if (IS_LOCAL(user) && !user->HasPrivPermission("users/flood/no-throttle")) { // If it *doesn't* exist, give it a slightly heftier penalty than normal to deter flooding us crap - user->IncreasePenalty(cm != cmdlist.end() ? cm->second->Penalty : 2); - do_more = (user->Penalty < 10); + IS_LOCAL(user)->Penalty += cm != cmdlist.end() ? cm->second->Penalty : 2; } if (cm == cmdlist.end()) { ModResult MOD_RESULT; - FIRST_MOD_RESULT(ServerInstance, OnPreCommand, MOD_RESULT, (command, command_p, user, false, cmd)); + FIRST_MOD_RESULT(OnPreCommand, MOD_RESULT, (command, command_p, user, false, cmd)); if (MOD_RESULT == MOD_RES_DENY) return true; @@ -342,13 +322,14 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) * truncate to max_params if necessary. -- w00t */ ModResult MOD_RESULT; - FIRST_MOD_RESULT(ServerInstance, OnPreCommand, MOD_RESULT, (command, command_p, user, false, cmd)); + FIRST_MOD_RESULT(OnPreCommand, MOD_RESULT, (command, command_p, user, false, cmd)); if (MOD_RESULT == MOD_RES_DENY) return true; /* activity resets the ping pending timer */ - if (user->MyClass) - user->nping = ServerInstance->Time() + user->MyClass->GetPingTime(); + LocalUser* luser = IS_LOCAL(user); + if (luser) + luser->nping = ServerInstance->Time() + luser->MyClass->GetPingTime(); if (cm->second->flags_needed) { @@ -399,7 +380,7 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) cm->second->total_bytes += cmd.length(); /* module calls too */ - FIRST_MOD_RESULT(ServerInstance, OnPreCommand, MOD_RESULT, (command, command_p, user, true, cmd)); + FIRST_MOD_RESULT(OnPreCommand, MOD_RESULT, (command, command_p, user, true, cmd)); if (MOD_RESULT == MOD_RES_DENY) return do_more; @@ -413,48 +394,29 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) } } -void CommandParser::RemoveCommands(Module* source) +void CommandParser::RemoveCommand(Command* x) { - Commandtable::iterator i,safei; - for (i = cmdlist.begin(); i != cmdlist.end();) - { - safei = i; - i++; - RemoveCommand(safei, source); - } + Commandtable::iterator n = cmdlist.find(x->command); + if (n != cmdlist.end() && n->second == x) + cmdlist.erase(n); } -void CommandParser::RemoveCommand(Commandtable::iterator safei, Module* source) +Command::~Command() { - Command* x = safei->second; - if (x->creator == source) - { - cmdlist.erase(safei); - } + ServerInstance->Parser->RemoveCommand(this); } bool CommandParser::ProcessBuffer(std::string &buffer,User *user) { - std::string::size_type a; - - if (!user) + if (!user || buffer.empty()) return true; - while ((a = buffer.rfind("\n")) != std::string::npos) - buffer.erase(a); - while ((a = buffer.rfind("\r")) != std::string::npos) - buffer.erase(a); - - if (buffer.length()) - { - ServerInstance->Logs->Log("USERINPUT", DEBUG,"C[%d] I :%s %s",user->GetFd(), user->nick.c_str(), buffer.c_str()); - return this->ProcessCommand(user,buffer); - } - - return true; + ServerInstance->Logs->Log("USERINPUT", DEBUG, "C[%d] I :%s %s", + user->GetFd(), user->nick.c_str(), buffer.c_str()); + return ProcessCommand(user,buffer); } -bool CommandParser::CreateCommand(Command *f) +bool CommandParser::AddCommand(Command *f) { /* create the command and push it onto the table */ if (cmdlist.find(f->command) == cmdlist.end()) @@ -465,7 +427,7 @@ bool CommandParser::CreateCommand(Command *f) return false; } -CommandParser::CommandParser(InspIRCd* Instance) : ServerInstance(Instance) +CommandParser::CommandParser() { para.resize(128); }