]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_svshold.cpp
Same fixes to make this module scale much better. Dont connect on each query, keep...
[user/henk/code/inspircd.git] / src / modules / m_svshold.cpp
index 4701a717b336b055e4865cba7e55fb0692029566..ed4fa86cf2e17ed98d1d0eb4ae038484948cd8ee 100644 (file)
@@ -57,7 +57,7 @@ class CommandSvshold : public Command
                TRANSLATE4(TR_NICK, TR_TEXT, TR_TEXT, TR_END);
        }
 
-       CmdResult Handle(const char* const* parameters, int pcnt, User *user)
+       CmdResult Handle(const std::vector<std::string> &parameters, User *user)
        {
                /* syntax: svshold nickname time :reason goes here */
                /* 'time' is a human-readable timestring, like 2d3h2s. */
@@ -68,9 +68,9 @@ class CommandSvshold : public Command
                        return CMD_FAILURE;
                }
 
-               if (pcnt == 1)
+               if (parameters.size() == 1)
                {
-                       SVSHoldMap::iterator n = HoldMap.find(parameters[0]);
+                       SVSHoldMap::iterator n = HoldMap.find(parameters[0].c_str());
                        if (n != HoldMap.end())
                        {
                                /* form: svshold nickname removes a hold. */
@@ -82,7 +82,7 @@ class CommandSvshold : public Command
                                                if ((*iter)->length)
                                                {
                                                        remaining = ((*iter)->set_on + (*iter)->length) - ServerInstance->Time();
-                                                       user->WriteServ( "386 %s %s :Removed SVSHOLD with %lu seconds left before expiry (%s)", user->nick, (*iter)->nickname.c_str(), remaining, (*iter)->reason.c_str());
+                                                       user->WriteServ( "386 %s %s :Removed SVSHOLD with %lu seconds left before expiry (%s)", user->nick, (*iter)->nickname.c_str(), (unsigned long)remaining, (*iter)->reason.c_str());
                                                }
                                                else
                                                {
@@ -97,40 +97,40 @@ class CommandSvshold : public Command
                                delete n->second;
                        }
                }
-               else if (pcnt >= 2)
+               else if (parameters.size() >= 2)
                {
                        /* full form to add a SVSHold */
-                       if (ServerInstance->IsNick(parameters[0]))
+                       if (ServerInstance->IsNick(parameters[0].c_str()))
                        {
                                // parameters[0] = w00t
                                // parameters[1] = 1h3m2s
                                // parameters[2] = Registered nickname
                                
                                /* Already exists? */
-                               if (HoldMap.find(parameters[0]) != HoldMap.end())
+                               if (HoldMap.find(parameters[0].c_str()) != HoldMap.end())
                                {
-                                       user->WriteServ( "385 %s %s :SVSHOLD already exists", user->nick, parameters[0]);
+                                       user->WriteServ( "385 %s %s :SVSHOLD already exists", user->nick, parameters[0].c_str());
                                        return CMD_FAILURE;
                                }
 
-                               long length = ServerInstance->Duration(parameters[1]);
-                               std::string reason = (pcnt > 2) ? parameters[2] : "No reason supplied";
+                               unsigned long length = ServerInstance->Duration(parameters[1]);
+                               std::string reason = (parameters.size() > 2) ? parameters[2] : "No reason supplied";
                                
                                SVSHold* S = new SVSHold(parameters[0], user->nick, ServerInstance->Time(), length, reason);
                                SVSHolds.push_back(S);
-                               HoldMap[parameters[0]] = S;
+                               HoldMap[parameters[0].c_str()] = S;
 
                                std::sort(SVSHolds.begin(), SVSHolds.end(), SVSHoldComp);
 
                                if(length > 0)
                                {
-                                       user->WriteServ( "385 %s %s :Added %lu second SVSHOLD (%s)", user->nick, parameters[0], length, reason.c_str());
-                                       ServerInstance->SNO->WriteToSnoMask('A', "%s added %lu second SVSHOLD on %s (%s)", user->nick, length, parameters[0], reason.c_str());
+                                       user->WriteServ( "385 %s %s :Added %lu second SVSHOLD (%s)", user->nick, parameters[0].c_str(), length, reason.c_str());
+                                       ServerInstance->SNO->WriteToSnoMask('A', "%s added %lu second SVSHOLD on %s (%s)", user->nick, length, parameters[0].c_str(), reason.c_str());
                                }
                                else
                                {
-                                       user->WriteServ( "385 %s %s :Added permanent SVSHOLD on %s (%s)", user->nick, parameters[0], parameters[0], reason.c_str());
-                                       ServerInstance->SNO->WriteToSnoMask('A', "%s added permanent SVSHOLD on %s (%s)", user->nick, parameters[0], reason.c_str());
+                                       user->WriteServ( "385 %s %s :Added permanent SVSHOLD on %s (%s)", user->nick, parameters[0].c_str(), parameters[0].c_str(), reason.c_str());
+                                       ServerInstance->SNO->WriteToSnoMask('A', "%s added permanent SVSHOLD on %s (%s)", user->nick, parameters[0].c_str(), reason.c_str());
                                }
                        }
                        else
@@ -226,7 +226,7 @@ class ModuleSVSHold : public Module
        
        virtual Version GetVersion()
        {
-               return Version(1, 1, 0, 1, VF_COMMON | VF_VENDOR, API_VERSION);
+               return Version(1, 2, 0, 1, VF_COMMON | VF_VENDOR, API_VERSION);
        }
 
        std::string EncodeSVSHold(const SVSHold* ban)
@@ -260,8 +260,8 @@ class ModuleSVSHold : public Module
                        {
                                if ((*iter)->set_on + (*iter)->length <= ServerInstance->Time())
                                {
-                                       ServerInstance->Log(DEBUG, "m_svshold.so: hold on %s expired, removing...", (*iter)->nickname.c_str());
-                                       ServerInstance->SNO->WriteToSnoMask('A',"%li second SVSHOLD on %s (%s) set %u seconds ago expired", (*iter)->length, (*iter)->nickname.c_str(), (*iter)->reason.c_str(), ServerInstance->Time() - (*iter)->set_on);
+                                       ServerInstance->Logs->Log("m_svshold",DEBUG, "m_svshold.so: hold on %s expired, removing...", (*iter)->nickname.c_str());
+                                       ServerInstance->SNO->WriteToSnoMask('A',"%lu second SVSHOLD on %s (%s) set %lu seconds ago expired", (unsigned long) (*iter)->length, (*iter)->nickname.c_str(), (*iter)->reason.c_str(), (unsigned long) ServerInstance->Time() - (*iter)->set_on);
                                        HoldMap.erase(assign((*iter)->nickname));
                                        delete *iter;
                                        safeiter = iter;