]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands/cmd_whowas.cpp
ThreadEngine: remove excessive mutex use on thread creation
[user/henk/code/inspircd.git] / src / commands / cmd_whowas.cpp
index fd9544853c5e560f70aec924121b7bf2cd15f5a2..e20dc1b5e6d15401b002b62a04ab9748816656bb 100644 (file)
@@ -2,8 +2,8 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
  *
  * This program is free but copyrighted software; see
  *            the file COPYING for details.
@@ -28,21 +28,21 @@ CommandWhowas::CommandWhowas(InspIRCd* Instance) : Command(Instance, "WHOWAS", 0
        Instance->Timers->AddTimer(timer);
 }
 
-CmdResult CommandWhowas::Handle (const char* const* parameters, int, User* user)
+CmdResult CommandWhowas::Handle (const std::vector<std::string>& parameters, User* user)
 {
        /* if whowas disabled in config */
        if (ServerInstance->Config->WhoWasGroupSize == 0 || ServerInstance->Config->WhoWasMaxGroups == 0)
        {
-               user->WriteServ("421 %s %s :This command has been disabled.",user->nick,command.c_str());
+               user->WriteNumeric(421, "%s %s :This command has been disabled.",user->nick.c_str(),command.c_str());
                return CMD_FAILURE;
        }
 
-       whowas_users::iterator i = whowas.find(parameters[0]);
+       whowas_users::iterator i = whowas.find(assign(parameters[0]));
 
        if (i == whowas.end())
        {
-               user->WriteServ("406 %s %s :There was no such nickname",user->nick,parameters[0]);
-               user->WriteServ("369 %s %s :End of WHOWAS",user->nick,parameters[0]);
+               user->WriteNumeric(406, "%s %s :There was no such nickname",user->nick.c_str(),parameters[0].c_str());
+               user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick.c_str(),parameters[0].c_str());
                return CMD_FAILURE;
        }
        else
@@ -56,33 +56,33 @@ CmdResult CommandWhowas::Handle (const char* const* parameters, int, User* user)
                                time_t rawtime = u->signon;
                                tm *timeinfo;
                                char b[MAXBUF];
-       
+
                                timeinfo = localtime(&rawtime);
-                               
+
                                /* XXX - 'b' could be only 25 chars long and then strlcpy() would terminate it for us too? */
                                strlcpy(b,asctime(timeinfo),MAXBUF);
                                b[24] = 0;
 
-                               user->WriteServ("314 %s %s %s %s * :%s",user->nick,parameters[0],u->ident,u->dhost,u->gecos);
-                               
-                               if (IS_OPER(user))
-                                       user->WriteServ("379 %s %s :was connecting from *@%s", user->nick, parameters[0], u->host);
-                               
-                               if (*ServerInstance->Config->HideWhoisServer && !IS_OPER(user))
-                                       user->WriteServ("312 %s %s %s :%s",user->nick,parameters[0], ServerInstance->Config->HideWhoisServer, b);
+                               user->WriteNumeric(314, "%s %s %s %s * :%s",user->nick.c_str(),parameters[0].c_str(),u->ident,u->dhost,u->gecos);
+
+                               if (user->HasPrivPermission("users/auspex"))
+                                       user->WriteNumeric(379, "%s %s :was connecting from *@%s", user->nick.c_str(), parameters[0].c_str(), u->host);
+
+                               if (*ServerInstance->Config->HideWhoisServer && !user->HasPrivPermission("servers/auspex"))
+                                       user->WriteNumeric(312, "%s %s %s :%s",user->nick.c_str(),parameters[0].c_str(), ServerInstance->Config->HideWhoisServer, b);
                                else
-                                       user->WriteServ("312 %s %s %s :%s",user->nick,parameters[0], u->server, b);
+                                       user->WriteNumeric(312, "%s %s %s :%s",user->nick.c_str(),parameters[0].c_str(), u->server, b);
                        }
                }
                else
                {
-                       user->WriteServ("406 %s %s :There was no such nickname",user->nick,parameters[0]);
-                       user->WriteServ("369 %s %s :End of WHOWAS",user->nick,parameters[0]);
+                       user->WriteNumeric(406, "%s %s :There was no such nickname",user->nick.c_str(),parameters[0].c_str());
+                       user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick.c_str(),parameters[0].c_str());
                        return CMD_FAILURE;
                }
        }
 
-       user->WriteServ("369 %s %s :End of WHOWAS",user->nick,parameters[0]);
+       user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick.c_str(),parameters[0].c_str());
        return CMD_SUCCESS;
 }
 
@@ -138,15 +138,15 @@ void CommandWhowas::AddToWhoWas(User* user)
                return;
        }
 
-       whowas_users::iterator iter = whowas.find(user->nick);
+       whowas_users::iterator iter = whowas.find(irc::string(user->nick.c_str()));
 
        if (iter == whowas.end())
        {
                whowas_set* n = new whowas_set;
                WhoWasGroup *a = new WhoWasGroup(user);
                n->push_back(a);
-               whowas[user->nick] = n;
-               whowas_fifo.push_back(std::make_pair(ServerInstance->Time(),user->nick));
+               whowas[user->nick.c_str()] = n;
+               whowas_fifo.push_back(std::make_pair(ServerInstance->Time(),user->nick.c_str()));
 
                if ((int)(whowas.size()) > ServerInstance->Config->WhoWasMaxGroups)
                {
@@ -207,7 +207,7 @@ void CommandWhowas::PruneWhoWas(time_t t)
                        if (iter == whowas.end())
                        {
                                /* this should never happen, if it does maps are corrupt */
-                               ServerInstance->Log(DEFAULT, "BUG: Whowas maps got corrupted! (1)");
+                               ServerInstance->Logs->Log("WHOWAS",DEFAULT, "BUG: Whowas maps got corrupted! (1)");
                                return;
                        }
 
@@ -240,7 +240,7 @@ void CommandWhowas::PruneWhoWas(time_t t)
                if (iter == whowas.end())
                {
                        /* this should never happen, if it does maps are corrupt */
-                       ServerInstance->Log(DEFAULT, "BUG: Whowas maps got corrupted! (2)");
+                       ServerInstance->Logs->Log("WHOWAS",DEFAULT, "BUG: Whowas maps got corrupted! (2)");
                        return;
                }
                whowas_set* n = (whowas_set*)iter->second;
@@ -293,7 +293,7 @@ CommandWhowas::~CommandWhowas()
                if (iter == whowas.end())
                {
                        /* this should never happen, if it does maps are corrupt */
-                       ServerInstance->Log(DEFAULT, "BUG: Whowas maps got corrupted! (3)");
+                       ServerInstance->Logs->Log("WHOWAS",DEFAULT, "BUG: Whowas maps got corrupted! (3)");
                        return;
                }
 
@@ -317,11 +317,11 @@ CommandWhowas::~CommandWhowas()
 
 WhoWasGroup::WhoWasGroup(User* user) : host(NULL), dhost(NULL), ident(NULL), server(NULL), gecos(NULL), signon(user->signon)
 {
-       this->host = strdup(user->host);
-       this->dhost = strdup(user->dhost);
-       this->ident = strdup(user->ident);
+       this->host = strdup(user->host.c_str());
+       this->dhost = strdup(user->dhost.c_str());
+       this->ident = strdup(user->ident.c_str());
        this->server = user->server;
-       this->gecos = strdup(user->fullname);
+       this->gecos = strdup(user->fullname.c_str());
 }
 
 WhoWasGroup::~WhoWasGroup()