]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Ignore clients on ulined servers when reporting stats in LUSERS.
authorPeter Powell <petpow@saberuk.com>
Sat, 28 Dec 2019 16:08:06 +0000 (17:08 +0100)
committerPeter Powell <petpow@saberuk.com>
Sat, 28 Dec 2019 16:33:49 +0000 (17:33 +0100)
include/usermanager.h
src/usermanager.cpp
src/users.cpp

index c013e59aeab343463bfef2ac374021471fd639de..4b675f9d3056f3fd5a300a2d41255cb9ccbb3d41 100644 (file)
@@ -87,6 +87,9 @@ class CoreExport UserManager : public fakederef<UserManager>
         */
        unsigned int unregistered_count;
 
+       /** The number of users on U-lined servers. */
+       unsigned int uline_count;
+
        /** Perform background user events for all local users such as PING checks, registration timeouts,
         * penalty management and recvq processing for users who have data in their recvq due to throttling.
         */
@@ -150,7 +153,7 @@ class CoreExport UserManager : public fakederef<UserManager>
        /** Return a count of fully registered connections on the network
         * @return The number of registered users on the network
         */
-       unsigned int RegisteredUserCount() { return this->clientlist.size() - this->UnregisteredUserCount(); }
+       unsigned int RegisteredUserCount() { return this->clientlist.size() - this->UnregisteredUserCount() - this->ULineCount(); }
 
        /** Return a count of opered (umode +o) users on the network
         * @return The number of opers on the network
@@ -162,6 +165,11 @@ class CoreExport UserManager : public fakederef<UserManager>
         */
        unsigned int UnregisteredUserCount() const { return this->unregistered_count; }
 
+       /** Return a count of users on a u-lined servers.
+        * @return The number of users on u-lined servers.
+        */
+       unsigned int ULineCount() const { return this->uline_count; }
+
        /** Return a count of local registered users
         * @return The number of registered local users
         */
index bcb831858300a15be917184632684a1aa4b32c64..92f94f960142621ec6945d4a1cc8fe58c5a5e118 100644 (file)
@@ -112,6 +112,7 @@ namespace
 UserManager::UserManager()
        : already_sent_id(0)
        , unregistered_count(0)
+       , uline_count(0)
 {
 }
 
index 6c58f0617d500c52624336a4e427a2aa2cd7c6fe..82f2545f4df730b043c92d722eeeaccaa0314566 100644 (file)
@@ -78,6 +78,9 @@ User::User(const std::string& uid, Server* srv, UserType type)
 
        ServerInstance->Logs->Log("USERS", LOG_DEBUG, "New UUID for user: %s", uuid.c_str());
 
+       if (srv->IsULine())
+               ServerInstance->Users->uline_count++;
+
        // Do not insert FakeUsers into the uuidlist so FindUUID() won't return them which is the desired behavior
        if (type != USERTYPE_SERVER)
        {
@@ -339,6 +342,9 @@ CullResult User::cull()
        if (client_sa.family() != AF_UNSPEC)
                ServerInstance->Users->RemoveCloneCounts(this);
 
+       if (server->IsULine() && ServerInstance->Users->uline_count)
+               ServerInstance->Users->uline_count--;
+
        return Extensible::cull();
 }