aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2025-01-26 01:21:35 +0000
committerGravatar Sadie Powell2025-01-26 01:21:35 +0000
commitef4ae1d9ca70fb201f8e604ab5e67c7456af4fe4 (patch)
treef640c40c0ec12cd9fbcc626f92ed27595e20c808 /src
parentCache the number of global and local servers. (diff)
Implement RPL_STATSCONN for compatibility with ircu.
Diffstat (limited to 'src')
-rw-r--r--src/coremods/core_lusers.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/coremods/core_lusers.cpp b/src/coremods/core_lusers.cpp
index 957d2a6b6..f77164d9e 100644
--- a/src/coremods/core_lusers.cpp
+++ b/src/coremods/core_lusers.cpp
@@ -27,6 +27,9 @@
enum
{
+ // From ircu.
+ RPL_STATSCONN = 250,
+
// From RFC 1459.
RPL_LUSERCLIENT = 251,
RPL_LUSERUNKNOWN = 253,
@@ -42,6 +45,7 @@ struct LusersCounters final
{
size_t max_local;
size_t max_global;
+ size_t max_conns;
size_t invisible = 0;
size_t global_servers;
size_t local_servers;
@@ -56,6 +60,7 @@ struct LusersCounters final
invisible++;
}
UpdateServerCount();
+ max_conns = local_servers + max_local;
}
inline void UpdateMaxUsers()
@@ -67,6 +72,10 @@ struct LusersCounters final
current = ServerInstance->Users.GlobalUserCount();
if (current > max_global)
max_global = current;
+
+ current = local_servers + max_local;
+ if (current > max_conns)
+ max_conns = current;
}
inline void UpdateServerCount()
@@ -124,6 +133,7 @@ CmdResult CommandLusers::Handle(User* user, const Params& parameters)
user->WriteNumeric(RPL_LUSERME, INSP_FORMAT("I have {} clients and {} servers", ServerInstance->Users.LocalUserCount(), counters.local_servers));
user->WriteNumeric(RPL_LOCALUSERS, INSP_FORMAT("Current local users: {} Max: {}", ServerInstance->Users.LocalUserCount(), counters.max_local));
user->WriteNumeric(RPL_GLOBALUSERS, INSP_FORMAT("Current global users: {} Max: {}", ServerInstance->Users.GlobalUserCount(), counters.max_global));
+ user->WriteNumeric(RPL_STATSCONN, INSP_FORMAT("Highest connection count: {} ({} clients) ({} connections received)", counters.max_conns, counters.max_local, ServerInstance->Stats.Accept));
return CmdResult::SUCCESS;
}