X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmode.cpp;h=66ce313f4006a34f9f44cc397a47728f885d0fef;hb=8d066e557eeabaea40634dec8d6f5cd4d39cfe60;hp=3fcfcbd51464552e794272be870b833386f66d63;hpb=51da1d3b59c25af4931b998cc23e2066392e548e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/mode.cpp b/src/mode.cpp index 3fcfcbd51..66ce313f4 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -375,6 +375,7 @@ void ModeParser::Process(const std::vector& parameters, User* user, LastParse.clear(); LastParseParams.clear(); LastParseTranslate.clear(); + LastChangeList.clear(); if ((!targetchannel) && ((!targetuser) || (IS_SERVER(targetuser)))) { @@ -403,10 +404,10 @@ void ModeParser::Process(const std::vector& parameters, User* user, return; } - std::string mode_sequence = parameters[1]; + const std::string& mode_sequence = parameters[1]; std::string output_mode; - std::ostringstream output_parameters; + std::string output_parameters; LastParseParams.push_back(output_mode); LastParseTranslate.push_back(TR_TEXT); @@ -469,12 +470,14 @@ void ModeParser::Process(const std::vector& parameters, User* user, if (pcnt) { - output_parameters << " " << parameter; + output_parameters.push_back(' '); + output_parameters.append(parameter); LastParseParams.push_back(parameter); LastParseTranslate.push_back(mh->GetTranslateType()); } + LastChangeList.push(mh, adding, parameter); - if ( (output_mode.length() + output_parameters.str().length() > 450) + if ((output_mode.length() + output_parameters.length() > 450) || (output_mode.length() > 100) || (LastParseParams.size() > ServerInstance->Config->Limits.MaxModes)) { @@ -490,7 +493,7 @@ void ModeParser::Process(const std::vector& parameters, User* user, LastParse = targetchannel ? targetchannel->name : targetuser->nick; LastParse.append(" "); LastParse.append(output_mode); - LastParse.append(output_parameters.str()); + LastParse.append(output_parameters); if (!(flags & MODE_LOCALONLY)) ServerInstance->PI->SendMode(user, targetuser, targetchannel, LastParseParams, LastParseTranslate); @@ -500,7 +503,7 @@ void ModeParser::Process(const std::vector& parameters, User* user, else targetuser->WriteFrom(user, "MODE " + LastParse); - FOREACH_MOD(OnMode, (user, targetuser, targetchannel, LastParseParams, LastParseTranslate)); + FOREACH_MOD(OnMode, (user, targetuser, targetchannel, LastChangeList, flags, output_mode)); } else if (targetchannel && parameters.size() == 2) { @@ -511,7 +514,7 @@ void ModeParser::Process(const std::vector& parameters, User* user, } } -void ModeParser::DisplayListModes(User* user, Channel* chan, std::string &mode_sequence) +void ModeParser::DisplayListModes(User* user, Channel* chan, const std::string& mode_sequence) { seq++;