summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2019-12-28 17:08:06 +0100
committerPeter Powell <petpow@saberuk.com>2019-12-28 17:33:49 +0100
commit4cc992f6c20354eef88b7652f268591daccb1b20 (patch)
tree102fdf339c718a964634fd6ef9484bcdece564b4
parent52df21f646a803b85417a4b699b1be48c25fa566 (diff)
Ignore clients on ulined servers when reporting stats in LUSERS.
-rw-r--r--include/usermanager.h10
-rw-r--r--src/usermanager.cpp1
-rw-r--r--src/users.cpp6
3 files changed, 16 insertions, 1 deletions
diff --git a/include/usermanager.h b/include/usermanager.h
index c013e59ae..4b675f9d3 100644
--- a/include/usermanager.h
+++ b/include/usermanager.h
@@ -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
*/
diff --git a/src/usermanager.cpp b/src/usermanager.cpp
index bcb831858..92f94f960 100644
--- a/src/usermanager.cpp
+++ b/src/usermanager.cpp
@@ -112,6 +112,7 @@ namespace
UserManager::UserManager()
: already_sent_id(0)
, unregistered_count(0)
+ , uline_count(0)
{
}
diff --git a/src/users.cpp b/src/users.cpp
index 6c58f0617..82f2545f4 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -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();
}