diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-12-30 14:34:49 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-12-30 14:34:49 +0000 |
commit | fce2d243c023660a9afbf01143cde6eda2ec7a88 (patch) | |
tree | fcf7276b29c2b546780e4626d4cdccdd1b08ea8a | |
parent | 81c26039d5b27f039cbaae53f56fe6eca4123467 (diff) |
Add unregistered user counter, this may also fix the (minor) m_conn_lusers shows current connection as unregged
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6170 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/inspircd.h | 6 | ||||
-rw-r--r-- | src/cmd_quit.cpp | 4 | ||||
-rw-r--r-- | src/helperfuncs.cpp | 25 | ||||
-rw-r--r-- | src/inspircd.cpp | 2 | ||||
-rw-r--r-- | src/users.cpp | 12 |
5 files changed, 27 insertions, 22 deletions
diff --git a/include/inspircd.h b/include/inspircd.h index 006e8092e..47ce9d971 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -385,6 +385,12 @@ class InspIRCd : public classbase int time_delta; public: + + /** Number of unregistered users online right now. + * (Unregistered means before USER/NICK/dns) + */ + int unregistered_count; + /** List of server names we've seen. */ servernamelist servernames; diff --git a/src/cmd_quit.cpp b/src/cmd_quit.cpp index db71bbdb1..32bfff0fa 100644 --- a/src/cmd_quit.cpp +++ b/src/cmd_quit.cpp @@ -106,6 +106,10 @@ CmdResult cmd_quit::Handle (const char** parameters, int pcnt, userrec *user) FOREACH_MOD(I_OnPostCommand,OnPostCommand("QUIT", parameters, pcnt, user, CMD_SUCCESS, original_command)); } + if (user->registered != REG_ALL) + if (ServerInstance->unregistered_count) + ServerInstance->unregistered_count--; + DELETE(user); return CMD_USER_DELETED; } diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index ff6d6035a..5662c6914 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -330,16 +330,7 @@ int InspIRCd::OperCount() int InspIRCd::UnregisteredUserCount() { - int c = 0; - - for (std::vector<userrec*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) - { - userrec* t = (userrec*)(*i); - if (t->registered != REG_ALL) - c++; - } - - return c; + return this->unregistered_count; } long InspIRCd::ChannelCount() @@ -349,18 +340,10 @@ long InspIRCd::ChannelCount() long InspIRCd::LocalUserCount() { - int c = 0; - - for (std::vector<userrec*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) - { - userrec* t = (userrec*)(*i); - if (t->registered == REG_ALL) - c++; - } - - return c; + /* Doesnt count unregistered clients */ + return (local_users.size() - this->UnregisteredUserCount()); } - + bool InspIRCd::IsChannel(const char *chname) { char *c; diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 497da8ff2..4b86d3816 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -267,6 +267,8 @@ InspIRCd::InspIRCd(int argc, char** argv) modules.resize(255); factory.resize(255); + this->unregistered_count = 0; + this->clientlist = new user_hash(); this->chanlist = new chan_hash(); diff --git a/src/users.cpp b/src/users.cpp index 44947fa6c..e4f63e3ba 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -766,7 +766,11 @@ void userrec::QuitUser(InspIRCd* Instance, userrec *user, const std::string &qui if (reason.length() > MAXQUIT - 1) reason.resize(MAXQUIT - 1); - + + if (user->registered != REG_ALL) + if (Instance->unregistered_count) + Instance->unregistered_count--; + if (IS_LOCAL(user)) { user->Write("ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,reason.c_str()); @@ -983,6 +987,8 @@ void userrec::AddClient(InspIRCd* Instance, int socket, int port, bool iscached, userrec* New; int j = 0; + Instance->unregistered_count++; + /* * fix by brain. * as these nicknames are 'RFC impossible', we can be sure nobody is going to be @@ -1177,6 +1183,10 @@ void userrec::FullConnect(CullList* Goners) this->ShowMOTD(); + /* Now registered */ + if (ServerInstance->unregistered_count) + ServerInstance->unregistered_count--; + /* * fix 3 by brain, move registered = 7 below these so that spurious modes and host * changes dont go out onto the network and produce 'fake direction'. |