diff options
-rw-r--r-- | include/usermanager.h | 10 | ||||
-rw-r--r-- | src/usermanager.cpp | 1 | ||||
-rw-r--r-- | src/users.cpp | 6 |
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(); } |