From bd3fc1e1553014881413bbc787d7f8d37f0e06cc Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 17 May 2022 20:53:18 +0100 Subject: Precache the version numerics in the VERSION command class. --- src/coremods/core_info/cmd_version.cpp | 31 ++++++++++++++++--------------- src/coremods/core_info/core_info.cpp | 1 + src/coremods/core_info/core_info.h | 3 +++ 3 files changed, 20 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/coremods/core_info/cmd_version.cpp b/src/coremods/core_info/cmd_version.cpp index aec5b5f95..6ba604e56 100644 --- a/src/coremods/core_info/cmd_version.cpp +++ b/src/coremods/core_info/cmd_version.cpp @@ -29,27 +29,28 @@ CommandVersion::CommandVersion(Module* parent, ISupportManager& isupportmgr) : Command(parent, "VERSION", 0, 0) , isupport(isupportmgr) + , operversion(RPL_VERSION) + , version(RPL_VERSION) { syntax = { "[]" }; } -CmdResult CommandVersion::Handle(User* user, const Params& parameters) +void CommandVersion::BuildNumerics() { - Numeric::Numeric numeric(RPL_VERSION); - if (user->IsOper()) - { - numeric.push(INSPIRCD_VERSION "."); - numeric.push(ServerInstance->Config->ServerName); - numeric.push("[" + ServerInstance->Config->GetSID() + "] " + ServerInstance->Config->CustomVersion); - } - else - { - numeric.push(INSPIRCD_BRANCH "."); - numeric.push(ServerInstance->Config->GetServerName()); - numeric.push(ServerInstance->Config->CustomVersion); - } - user->WriteNumeric(numeric); + version.GetParams().clear(); + version.push(INSPIRCD_BRANCH "."); + version.push(ServerInstance->Config->GetServerName()); + version.push(ServerInstance->Config->CustomVersion); + + operversion.GetParams().clear(); + operversion.push(INSPIRCD_VERSION "."); + operversion.push(ServerInstance->Config->ServerName); + operversion.push("[" + ServerInstance->Config->GetSID() + "] " + ServerInstance->Config->CustomVersion); +} +CmdResult CommandVersion::Handle(User* user, const Params& parameters) +{ + user->WriteNumeric(user->IsOper() ? operversion : version); LocalUser* luser = IS_LOCAL(user); if (luser) isupport.SendTo(luser); diff --git a/src/coremods/core_info/core_info.cpp b/src/coremods/core_info/core_info.cpp index 09247b805..0583ddac3 100644 --- a/src/coremods/core_info/core_info.cpp +++ b/src/coremods/core_info/core_info.cpp @@ -149,6 +149,7 @@ public: cmdadmin.admindesc = tag->getString("description"); cmdadmin.adminemail = tag->getString("email", "noreply@" + ServerInstance->Config->GetServerName(), 1); + cmdversion.BuildNumerics(); ServerInstance->AtomicActions.AddAction(new ISupportAction(isupport)); } diff --git a/src/coremods/core_info/core_info.h b/src/coremods/core_info/core_info.h index 8c3308e01..64c8df426 100644 --- a/src/coremods/core_info/core_info.h +++ b/src/coremods/core_info/core_info.h @@ -148,8 +148,11 @@ class CommandVersion final { private: ISupportManager& isupport; + Numeric::Numeric operversion; + Numeric::Numeric version; public: CommandVersion(Module* parent, ISupportManager& isupportmgr); + void BuildNumerics(); CmdResult Handle(User* user, const Params& parameters) override; }; -- cgit v1.3.1-10-gc9f91