]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/helperfuncs.cpp
Move and rename typedef LocalUserList to UserManager::LocalList
[user/henk/code/inspircd.git] / src / helperfuncs.cpp
index f70e04d958f087ec57e853d6da322bb227ae9064..55a1b9f8341306903b2d17fc067874b874062a6f 100644 (file)
 #include "exitcodes.h"
 #include <iostream>
 
-std::string InspIRCd::GetServerDescription(const std::string& servername)
-{
-       std::string description;
-
-       FOREACH_MOD(I_OnGetServerDescription,OnGetServerDescription(servername,description));
-
-       if (!description.empty())
-       {
-               return description;
-       }
-       else
-       {
-               // not a remote server that can be found, it must be me.
-               return Config->ServerDesc;
-       }
-}
-
 /* Find a user record by nickname and return a pointer to it */
 User* InspIRCd::FindNick(const std::string &nick)
 {
        if (!nick.empty() && isdigit(*nick.begin()))
                return FindUUID(nick);
 
-       user_hash::iterator iter = this->Users->clientlist->find(nick);
+       user_hash::iterator iter = this->Users->clientlist.find(nick);
 
-       if (iter == this->Users->clientlist->end())
+       if (iter == this->Users->clientlist.end())
                /* Couldn't find it */
                return NULL;
 
@@ -66,9 +49,9 @@ User* InspIRCd::FindNick(const std::string &nick)
 
 User* InspIRCd::FindNickOnly(const std::string &nick)
 {
-       user_hash::iterator iter = this->Users->clientlist->find(nick);
+       user_hash::iterator iter = this->Users->clientlist.find(nick);
 
-       if (iter == this->Users->clientlist->end())
+       if (iter == this->Users->clientlist.end())
                return NULL;
 
        return iter->second;
@@ -76,9 +59,9 @@ User* InspIRCd::FindNickOnly(const std::string &nick)
 
 User *InspIRCd::FindUUID(const std::string &uid)
 {
-       user_hash::iterator finduuid = this->Users->uuidlist->find(uid);
+       user_hash::iterator finduuid = this->Users->uuidlist.find(uid);
 
-       if (finduuid == this->Users->uuidlist->end())
+       if (finduuid == this->Users->uuidlist.end())
                return NULL;
 
        return finduuid->second;
@@ -87,9 +70,9 @@ User *InspIRCd::FindUUID(const std::string &uid)
 
 Channel* InspIRCd::FindChan(const std::string &chan)
 {
-       chan_hash::iterator iter = chanlist->find(chan);
+       chan_hash::iterator iter = chanlist.find(chan);
 
-       if (iter == chanlist->end())
+       if (iter == chanlist.end())
                /* Couldn't find it */
                return NULL;
 
@@ -99,7 +82,7 @@ Channel* InspIRCd::FindChan(const std::string &chan)
 /* Send an error notice to all users, registered or not */
 void InspIRCd::SendError(const std::string &s)
 {
-       for (LocalUserList::const_iterator i = this->Users->local_users.begin(); i != this->Users->local_users.end(); i++)
+       for (UserManager::LocalList::const_iterator i = this->Users->local_users.begin(); i != this->Users->local_users.end(); ++i)
        {
                User* u = *i;
                if (u->registered == REG_ALL)
@@ -337,7 +320,7 @@ void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const std::str
        FIRST_MOD_RESULT(OnWhoisLine, MOD_RESULT, (user, dest, numeric, copy_text));
 
        if (MOD_RESULT != MOD_RES_DENY)
-               user->WriteServ("%d %s", numeric, copy_text.c_str());
+               user->WriteNumeric(numeric, copy_text);
 }
 
 void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const char* format, ...)
@@ -400,15 +383,17 @@ const char* InspIRCd::Format(va_list &vaList, const char* formatString)
                va_copy(dst, vaList);
 
                int vsnret = vsnprintf(&formatBuffer[0], formatBuffer.size(), formatString, dst);
+               va_end(dst);
+
                if (vsnret > 0 && static_cast<unsigned>(vsnret) < formatBuffer.size())
                {
-                       return &formatBuffer[0];
+                       break;
                }
 
                formatBuffer.resize(formatBuffer.size() * 2);
        }
 
-       throw CoreException();
+       return &formatBuffer[0];
 }
 
 const char* InspIRCd::Format(const char* formatString, ...)
@@ -418,26 +403,36 @@ const char* InspIRCd::Format(const char* formatString, ...)
        return ret;
 }
 
-bool InspIRCd::ULine(const std::string& sserver)
+std::string InspIRCd::TimeString(time_t curtime, const char* format, bool utc)
 {
-       if (sserver.empty())
-               return true;
+#ifdef _WIN32
+       if (curtime < 0)
+               curtime = 0;
+#endif
 
-       return (Config->ulines.find(sserver.c_str()) != Config->ulines.end());
-}
+       struct tm* timeinfo = utc ? gmtime(&curtime) : localtime(&curtime);
+       if (!timeinfo)
+       {
+               curtime = 0;
+               timeinfo = localtime(&curtime);
+       }
 
-bool InspIRCd::SilentULine(const std::string& sserver)
-{
-       std::map<irc::string,bool>::iterator n = Config->ulines.find(sserver.c_str());
-       if (n != Config->ulines.end())
-               return n->second;
-       else
-               return false;
-}
+       // If the calculated year exceeds four digits or is less than the year 1000,
+       // the behavior of asctime() is undefined
+       if (timeinfo->tm_year + 1900 > 9999)
+               timeinfo->tm_year = 9999 - 1900;
+       else if (timeinfo->tm_year + 1900 < 1000)
+               timeinfo->tm_year = 0;
 
-std::string InspIRCd::TimeString(time_t curtime)
-{
-       return std::string(ctime(&curtime),24);
+       // This is the default format used by asctime without the terminating new line.
+       if (!format)
+               format = "%a %b %d %H:%M:%S %Y";
+
+       char buffer[512];
+       if (!strftime(buffer, sizeof(buffer), format, timeinfo))
+               buffer[0] = '\0';
+
+       return buffer;
 }
 
 std::string InspIRCd::GenRandomStr(int length, bool printable)
@@ -491,11 +486,11 @@ ModResult OnCheckExemptionHandler::Call(User* user, Channel* chan, const std::st
                std::string::size_type pos = current.find(':');
                if (pos == std::string::npos)
                        continue;
-               if (current.substr(0,pos) == restriction)
+               if (!current.compare(0, pos, restriction))
                        minmode = current[pos+1];
        }
 
-       ModeHandler* mh = ServerInstance->Modes->FindMode(minmode, MODETYPE_CHANNEL);
+       PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(minmode);
        if (mh && mypfx >= mh->GetPrefixRank())
                return MOD_RES_ALLOW;
        if (mh || minmode == '*')