]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/usermanager.cpp
Merge pull request #1004 from SaberUK/insp20+fix-various-warnings
[user/henk/code/inspircd.git] / src / usermanager.cpp
index e3ddfc9f2b1c07e84783719ab12d82cd9695ca18..76446c5b57fb07371adaa9b6730e6f335d7e0805 100644 (file)
 #include "xline.h"
 #include "bancache.h"
 
+UserManager::UserManager()
+       : unregistered_count(0), local_count(0)
+{
+}
+
 /* add a client connection to the sockets list */
 void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server)
 {
@@ -67,13 +72,14 @@ void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs
        (*(this->clientlist))[New->nick] = New;
 
        New->registered = REG_NONE;
-       New->signon = ServerInstance->Time() + ServerInstance->Config->dns_timeout;
+       New->signon = ServerInstance->Time();
        New->lastping = 1;
 
        ServerInstance->Users->AddLocalClone(New);
        ServerInstance->Users->AddGlobalClone(New);
 
        New->localuseriter = this->local_users.insert(local_users.end(), New);
+       local_count++;
 
        if ((this->local_users.size() > ServerInstance->Config->SoftLimit) || (this->local_users.size() >= (unsigned int)ServerInstance->SE->GetMaxFds()))
        {
@@ -281,6 +287,22 @@ void UserManager::RemoveCloneCounts(User *user)
        }
 }
 
+void UserManager::RehashCloneCounts()
+{
+       local_clones.clear();
+       global_clones.clear();
+
+       const user_hash& hash = *ServerInstance->Users->clientlist;
+       for (user_hash::const_iterator i = hash.begin(); i != hash.end(); ++i)
+       {
+               User* u = i->second;
+
+               if (IS_LOCAL(u))
+                       AddLocalClone(u);
+               AddGlobalClone(u);
+       }
+}
+
 unsigned long UserManager::GlobalCloneCount(User *user)
 {
        clonemap::iterator x = global_clones.find(user->GetCIDRMask());
@@ -332,7 +354,7 @@ unsigned int UserManager::UnregisteredUserCount()
 unsigned int UserManager::LocalUserCount()
 {
        /* Doesnt count unregistered clients */
-       return (this->local_users.size() - this->UnregisteredUserCount());
+       return (this->local_count - this->UnregisteredUserCount());
 }
 
 void UserManager::ServerNoticeAll(const char* text, ...)