From: HelenMamontova <44774239+HelenMamontova@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:37:18 +0000 (+0300) Subject: Radiusю (#12) X-Git-Url: https://git.stg.codes/stg.git/commitdiff_plain/21ba4dfad49d2d489a9399d36d078eab8c44e0d6 Radiusю (#12) * Radius. Header file , added. Functions start, stop declaration changed. Class members m_thread, m_mutex added. Function Run declaration added. * Radius. Header files added. Functions Start, Stop, Run definition added. * Radius. New files server.h, server.cpp added. * Radius. Definition of functions startReceive, makeResponse, handleSend, handleReceive added. * The Run function name fixed. Definition of secret variable sdded. * The file server.cpp added to add_library command, command find_package(OpenSSL 1.0.0 Required) added, OpenSSL::Crypto added to target_link_libraries command in the block if(BUILD_MOD_RADIUS). * Parameter token added to function Run() declaration. * Radius. Method Start: variable isRunning=true removed, m_thread definition changed. Method Stop: variable isRunning=false removed, m_thread.joinable check added, isRunning check added, request_stop call added. Method Run: parameter token added, variables secret, port removed, object lock and isRunning=true added before cycle while, cycle while added, isRunning=false added after cycle while. * Radius. Hold the mutex removed,extra conditions for m_thread.join() removed in the Stop function. * Radius. Cycle while removed in function Run. * Radius. The variables isRunning, errorStr replaced by m_running, m_errorStr in class Radius. * Radius. The variable isRunning replaced by m_running in function Run. * Radius. Object name io_service changed to ioService in the function Run. * Method SetRunning declaration added to the class RADIUS. * Method SetRunning definition added. Method SetRunning call added to function Run. * Radius. Namespace STG added. * Radius. Declaration using STG::Server added. * Radius. Header file "stg/logger.h" added. RADIUS class member m_loger added. * Radius. Header file "stg/common.h" added. Initialization of m_logger added to constructor RADIUS. Output cerr replaced by logger and printfd(). * Radius. Variable except added, messages fixed in the function Run. * Radius. Thread join logic fixed in the function Stop. * Keyword const added to std::lock_guard in the function SetRunning. * Radius. Class member m_mutex moved to the top of list. * Radius. Class member m_logger put after the m_running. * Radius. Unnecessary variable except removed in the function Run. * Radius. Extra whitespace removed in the function Stop. Function IsRunning definition added. * Radius. Function IsRunning declaration changed. * Radius. Formatting fixed. * Radius. Extra symbols '//' removed. * Radius. Class member m_running initialization added to constructor RADIUS. * Radius.Header file "stg/module_settings.h" added. Class members variable m_settings and method SetSettings added to class RADIUS. * Radius. The parameters Secret, Dictionaries added, parameter Port changed, other parameters removed. * Radius. Header files added. Class RAD_SETTINGS added. Methods SetSettings, copy constructor RADIUS, assignment operator added. Method ParseSettings changed. Formatting fixed. * Radius. Parameter default changed to optional and parameters value commented out for the parameters dictionaries, port. * Radius. Description of parameters secret, port, dictionaries changed. * Radius. Copy constructor RADIUS and assignment operator declaration changed and moved to public section. * Radius. Class member m_mutex moved to the top of section private. * Radius. The m_port variable value initialization changed to 1812, m_dictionaries variable initialization added to constructor RAD_SETTINGS. * Radius. Check for missing parameters port and dictionaries removed in function ParseSettings. * Radius. The dist directory added. * Radius. The methods declaration stop and start added. * Radius. The methods stop, start definition added. Method start call added to Server constructor. * Radius. The header files "server.h", , added. The class members m_ioService, m_server added. * Radius. The header files "server", , removed. The method m_server->stop() call added to method Stop. * Radius. Header files and added. Parameter token added to constructor Server. Class member m_token added. * Radius. Parameter token and m_token class member initialization added to Server constructor definition. The check m_token.stop_requested() added to method handleSend before startReceive method call. * Radius. The m_server class member initialization removed. * Radius. The m_server->stop() call adnd m_thread.request_stop() call reodered, the m_server check added before m_server->stop call in the method Stop. Parameter token added to constructor Server in the function Run. * Radius. Header file "stg/logger.h" added. Class member m_logger added to class Server. * Radius. Header file "stg/common.h" added, header file removed. Class member m_logger initialization added to constructor Server. Object std::cout replaced by function printfd and m_logger. * Radius. Class member m_logger initialization changed in the constructor Server. Check token moved before checking the error code in the handleSend method. * Radius. Check token added to handleReceive method. * Radius. Header file replaced by , header file removed. * Radius. Parameter m_logger added to constructor Server call in the method Run. * Radius. Parameter logger added to constructor Server declaration. Class member m_logger added to class Server. * Radius. Parameter logger added to constructor Server definition. Class member m_logger initialization changed in the constructor Server. * Radius. Extra whitespace removed ib the method Run. * Radius. The order of operations changed in the method handleSend. * Radius. The order of operations changed in the method handleReceive. * Radius. Operator return removed when checking ec, operator else removed when checking packet in the handleReceive method. * Radius. Parameter token replaced by std::move(token) in the constructor Server in method Run. * Radius. Class member m_token initialization value changed to std::move(token) in the constructor Server. * Radius. The c_str() function added to message when checking error in the handleSend and handleReceive methods. * Radius. Header file added. * Radius. Header files "stg/users.h", "stg/user.h", "stg/user_property.h" added. The using statements added. The findUser, SetUsers functions declaration added. Class member m_users added. * Radius. Header files "radproto/attribute_types.h", added. The m_users class member initialization added to constructor Server. The findUser function definition added. The findUser function call added to makeResponse function. * Radius. Getting the values of login and password fixed in the function findUser. Extra functions printfd call added. * Radius. Using statements added. Method SetUsers added, variable class member m_users added to class RADIUS. * Radius. The class member variable m_users initialization added to constructor Radius. Parameter m_users added to constructor Server call in the method Run. * Radius. Parameter users added to constructir Server declaration. Function SetUsers removed fron class Server. * Radius. Parameter users added to constructor Server definition. Variable class member m_users initialization added to constructor Server. * Radius. Function c_str added to login and password in m_logger and printfd function in the function findUser. * Radius. Extra functions printfd removed. * Radius. The using declaration for UserPtr, ConstUserPtr removed. * Radius. Looking for user moved after check request type in the makeResponse function. * Radius. The using declaration for UserPtr, ConstUserPtr removed. Header files "stg/user.h", "stg/users.h", "stg/user.property.h" removed. * Radius. Header files "stg/user.h", "stg/users.h" added. * Radius. Function findUser moved to private. * Radius. Return type of function findUser changed to bool. * Radius. Return type of function findUser definition and call changed to bool. * Radius. Variables attributesEmpty, vendorSpecificEmpty added for packet ACCESS_REJECT in the function makeResponse. * Radius. Type STG::Users* replaced by Users* in parameter users in the constructor Server definition. * Radius. Condition and code order changed when packet is returned in makeResponse function. * Radius. Unnecessary variables attributeEmpty, vendorSpecificEmpty replaced by {} when ACCESS_REJECT packet is returned in makeResponse function. * Radius. Prefix STG of user object removed, user is initialized by nullptr and moved to the point before call FindByName function in the findUser function. * Radius. Extra printfd function call removed in the function findUser. * Radius. The way of initializing the object user changed in the findUser function. Error log removed in the makeResponse function. * Radius. Prefix STG of class member m_users and of parameter u in SetUsers function removed. * Radius. Prefix STG of class member m_users and of parameter users in the constructor Server declaration removed. * Radius. The messages of m_logger and printfd changed in function findUser. * Radius. Search for parameters auth and send added to the ParseSettings function. * Radius. Extra whitespace removed, unnecessary variables sendValue and sectionsParams removed in ParseSettings function. * Radius. The struct AttrValue added. * Radius. Header files , , added. Parsing attributes of field send in section auth of mod_radius.conf added to the function ParseSettings. * Radius. Filling vector of pairs attrSend added. Extra printfd function removed. * Radius. The Sign enumeration elements names changed in the struct AttrValue. * Radius. Using declaration for struct AttrValue added. Function ParseSendAttr definition added and call in the function ParseSettings added. * Radius. The enum class Sign renamed to Type, object sign renamed to type. * Radius. The enum class Sign renamed to Type, object sign renamed to type in ParseSendAttr function and ParseSettings function. * Radius. The enumerator names NOT_VALUE changed to PARAN_NAME, IS_VALUE changed to VALUE in enum Type. * Radius. Radius. The enumerator names NOT_VALUE changed to PARAM_NAME, IS_VALUE changed to VALUE in ParseSendAttr function. * Radius. The AttrValue struct moved into the RAD_SETTINGS class. * Radius. The using statement for struct AttrValue removed. The using alias for struct AttrValue added. * Radius. The vector parsedSendAttr check added to the function ParseSendAttr. * Radius. The ParseSendAttr method added, m_logger variable class member added to RAD_SETTINGS class. * Radius. ParseSendAttr function changed to method of RAD_SETTINGS class. Vector parsedSendAttr check for emptiness and check vector size added to the ParseSendAttr method. Class member m_logger initialization added to initialization list to RAD_SETTINGS constructor. * Radius. Quotes check for the ValueName added to the ParseSendAttr method. * Radius. Extra variables attrValue.value and attrValue.type removed in the ParseSendAttr method. * Radius. Extra variable attrValue removed in ParseSendAttr method. * Radius. Send attributes parsing changed in method ParseSendAttr. * Radius. Argument fieldSendAttr name changed to value and argument type changed to const std::string& in ParseSendAttr method. Vector keyValuePairs name changed to res. * Radius. Argument fieldSendAttr name changed to value and argument type changed to const std::string& in ParseSendAttr method. * Radius. Vector name parsedSendAttr changed to keyValue in ParseSendAttr method. * Radius. Functions front() and back() are used to get the first and last characters of string valueName in ParseSendAttr method. * Radius. Method declaration ParseSendAttr moved to private in class RAD_SETTINGS. * Radius. Formatting fixed. Class member m_res and public function GetRes added to class RAD_SETTINGS. * Radius. Extra variable res removed. Class member m_res definition added to ParseSendAttr function and ParseSettings function. * Radius. Vector res added, variable m_res replaced by res in ParseSendAttr function. * Radius. Function name GetRes changed to GetSendPairs, class member vaiable name m_res changed to m_sendPairs in class RAD_SETTINGS. * Radius. Class member vaiable name m_res changed to m_sendPairs in the ParseSettings function. * Radius. Parameter auth added to mod_radius.conf. * Radius. The ParseMatchAttr method declaration and m_matchPairs class member added to RAD_SETTINGS class. * Radius. The ParseMatchAttr function definition added. Match attributes parsing added to ParseSetting function. * Radius. The ParseMatchAttr method removed, the ParseSendAttr method renamed to ParseAuthAttr in the class RAD_SETTINGS. * Radius. The ParseSendAttr method definition and call renamed to ParseAuthAttr. Parameter paramName added to ParseAuthAttr method. The ParseMatchAttr method definition removed. ParseMatchAttr method call replaced by ParseAuthAttr. * Radius. Attribute for parameter auth/match changed. * Radius. Parameter autz added. * Radius. ParseAuthAttr function renamed to ParseAuthAutzAttr. * Radius. ParseAuthAttr function renamed to ParseAuthAutzAttr. The autz attributes parsing added, m_logger and printfd messages changed in the ParseAuthAutzAttr function. * Radius. ParseAuthAutzAttr function renamed to ParseSectionsAttr. The MakeKeyValuePairs function definition added. * Radius. ParseAuthAutzAttr function renamed to ParseSectionsAttr. The messages of m_logger and printfd changed in the ParseSectionsAttr function. The MakeKeyValuePairs function definition and call added. * Radius. Attributes of auth/send, autz/send, autz/match changed. * Radius. ParseSectionsAttr function name changed to ParseRyles. * Radius. ParseSectionsAttr function name definition and call changed to ParseRyles. * Radius. Extra printfd function call removed in MakeKeyValuePairs functions. * Radius. The ShowRules, GetSendPairsAuth, GetMatchPairsAuth, GetSendPairsAutz, GetMatchPairsAutz functions declaration added. The m_sendPairs, m_matchPairs class members removed. The m_sendPairsAuth, m_matchPairsAuth, m_sendPairsAutz, m_matchPairsAutz class members added. * Radius. The ShowRules function definition added and its call in MakeKeyValuePairs function added. * Radius. The strRules string creating fixed and strRules string renamed to result in the ShowRules function. * Radius. Parameter name changed to attributes and & added to parameter in the ParseRules function. * Radius. The ShowRules function definition changed. Parameter name changed to attributes and & added to parameter in the ShowRules function. * Radius. The struct ASection added. The getAuth, getAutz, parseASection function declaration added. Class member m_auth, m_autz added. Unnecessary code removed. * Radius. The using ASection for alias added. The parseASection function definition and call added, MakeKeyValuePairs function removed, ParseSettings function changed. Extra printfd function added. * Radius. The return added to parseASection function. Extra printfd functions removed. * Radius. GIT_TAG changed to 1.1.3 in the ExternalProject_Add for async-radius. * Radius. The m_ioService class member replaced by m_ioContext in class Radius. * Radius. The m_ioService class member replaced by m_ioContext in the function Run. * Radius. Parameter io_service replaced by io_context in the constructor Server. * Radius. Parameter io_service replaced by io_context in the constructor Server definition. * Radius. Parameters msg, ip commented out in the SendMessage function. * Radius. Variable 'sep' declared 'const' in ParseRules function. * Radius. Variables 'tokens', 'sp', 'tok' declared 'const' in ParseRules function. * Radius. ShowRules function declaration removed from class RAD_SETTINGS. * Radius. ShowRules function definition is made as a free function. * Radius. ShowRules function definition is placed in the anonymous namespace. * Radius. The code for determining the first element of vector changed in the function ShowRules. * Radius. Function SetUsers declaration is made as override in the class Radius. * Radius. Header file added. --- diff --git a/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/mod_radius.conf b/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/mod_radius.conf index d4cf6c4c..7373af21 100644 --- a/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/mod_radius.conf +++ b/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/mod_radius.conf @@ -17,4 +17,13 @@ # Default: 1812 # Port = 1812 + + send = "Framed-IP-Address = currip, Service-Type = \'Framed-User\'" + match = "Calling-Station-Id = userdata0" + + + + send = "Framed-IP-Address = currip, Service-Type = \'Login-User\'" + match = "User-Name = login, User-Password = password" + diff --git a/projects/stargazer/plugins/CMakeLists.txt b/projects/stargazer/plugins/CMakeLists.txt index c8dd8f50..fc030b67 100644 --- a/projects/stargazer/plugins/CMakeLists.txt +++ b/projects/stargazer/plugins/CMakeLists.txt @@ -23,7 +23,7 @@ if ( BUILD_MOD_RADIUS ) ExternalProject_Add ( async-radius GIT_REPOSITORY https://github.com/madf/async-radius.git - GIT_TAG 1.1.2 + GIT_TAG 1.1.3 GIT_SHALLOW true INSTALL_COMMAND "" CMAKE_ARGS -DCMAKE_CXX_FLAGS=-fPIC ) diff --git a/projects/stargazer/plugins/other/radius/radius.cpp b/projects/stargazer/plugins/other/radius/radius.cpp index c93c4ddf..68291dcf 100644 --- a/projects/stargazer/plugins/other/radius/radius.cpp +++ b/projects/stargazer/plugins/other/radius/radius.cpp @@ -1,12 +1,18 @@ #include "radius.h" #include "radproto/error.h" #include "stg/common.h" +#include +#include +#include #include +#include #include using STG::RADIUS; using STG::RAD_SETTINGS; +using AttrValue = RAD_SETTINGS::AttrValue; +using ASection = RAD_SETTINGS::ASection; extern "C" STG::Plugin* GetPlugin() { @@ -14,9 +20,86 @@ extern "C" STG::Plugin* GetPlugin() return &plugin; } +namespace +{ + std::string ShowRules(const std::vector>& attributes) + { + std::string result; + for (const auto& at : attributes) + { + if (!result.empty()) + result += ", "; + + if (at.second.type == AttrValue::Type::PARAM_NAME) + result.append(at.first + " = " + at.second.value); + else + result.append(at.first + " = '" + at.second.value + "'"); + } + return result; + } +} + +std::vector> RAD_SETTINGS::ParseRules(const std::string& value, const std::string& paramName) +{ + using tokenizer = boost::tokenizer>; + const boost::char_separator sep(","); + + const tokenizer tokens(value, sep); + + std::vector> res; + for (const auto& token : tokens) + { + const boost::char_separator sp(" ="); + const tokenizer tok(token, sp); + + std::vector keyValue; + for (const auto& t : tok) + keyValue.push_back(t); + + if (keyValue.size() != 2) + { + m_logger("The '%s' attribute specification has an incorrect format: '%s'.", paramName.c_str(), token.c_str()); + printfd(__FILE__, "The '%s' attribute specification has an incorrect format: '%s'.", paramName.c_str(), token.c_str()); + return {}; + } + + auto type = AttrValue::Type::PARAM_NAME; + std::string valueName = keyValue[1]; + if (valueName.front() == '\'' && valueName.back() == '\'') + { + type = AttrValue::Type::VALUE; + valueName.erase(0, 1); + valueName.erase(valueName.length() - 1, 1); + } + else if ((valueName.front() == '\'' && valueName.back() != '\'') || (valueName.front() != '\'' && valueName.back() == '\'')) + { + m_logger("Error ParseRules: '%s' attribute parameter value is invalid.\n", paramName.c_str()); + printfd(__FILE__, "Error ParseRules: '%s' attribute parameter value is invalid.\n", paramName.c_str()); + return {}; + } + res.emplace_back(keyValue[0], AttrValue{valueName, type}); + } + return res; +} + +ASection RAD_SETTINGS::parseASection(const std::vector& conf) +{ + ASection res; + const auto mit = std::find(conf.begin(), conf.end(), ParamValue("match", {})); + if (mit != conf.end()) + res.match = ParseRules(mit->value[0], mit->param); + + const auto sit = std::find(conf.begin(), conf.end(), ParamValue("send", {})); + if (sit != conf.end()) + res.send = ParseRules(sit->value[0], sit->param); + + return res; +} + RAD_SETTINGS::RAD_SETTINGS() : m_port(1812), - m_dictionaries("/usr/share/freeradius/dictionary") + m_dictionaries("/usr/share/freeradius/dictionary"), + m_logger(PluginLogger::get("radius")) {} int RAD_SETTINGS::ParseSettings(const ModuleSettings & s) @@ -46,14 +129,26 @@ int RAD_SETTINGS::ParseSettings(const ModuleSettings & s) m_secret = ""; } else - { m_secret = pvi->value[0]; - } pv.param = "Dictionaries"; pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv); if (pvi != s.moduleParams.end() && !pvi->value.empty()) m_dictionaries = pvi->value[0]; + + const auto authIt = std::find(s.moduleParams.begin(), s.moduleParams.end(), ParamValue("auth", {})); + if (authIt != s.moduleParams.end()) + m_auth = parseASection(authIt->sections); + + const auto autzIt = std::find(s.moduleParams.begin(), s.moduleParams.end(), ParamValue("autz", {})); + if (autzIt != s.moduleParams.end()) + m_autz = parseASection(autzIt->sections); + + printfd(__FILE__, " auth.match = \"%s\"\n", ShowRules(m_auth.match).c_str()); + printfd(__FILE__, " auth.send = \"%s\"\n", ShowRules(m_auth.send).c_str()); + printfd(__FILE__, " autz.match = \"%s\"\n", ShowRules(m_autz.match).c_str()); + printfd(__FILE__, " autz.send = \"%s\"\n", ShowRules(m_autz.send).c_str()); + return 0; } @@ -117,8 +212,8 @@ int RADIUS::Run(std::stop_token token) try { if (!m_server) - m_server = std::make_unique(m_ioService, m_radSettings.GetSecret(), m_radSettings.GetPort(), m_radSettings.GetDictionaries(), std::move(token), m_logger, m_users); - m_ioService.run(); + m_server = std::make_unique(m_ioContext, m_radSettings.GetSecret(), m_radSettings.GetPort(), m_radSettings.GetDictionaries(), std::move(token), m_logger, m_users); + m_ioContext.run(); } catch (const std::exception& e) { diff --git a/projects/stargazer/plugins/other/radius/radius.h b/projects/stargazer/plugins/other/radius/radius.h index 17f8ea4e..80e032a8 100644 --- a/projects/stargazer/plugins/other/radius/radius.h +++ b/projects/stargazer/plugins/other/radius/radius.h @@ -25,18 +25,47 @@ namespace STG public: RAD_SETTINGS(); virtual ~RAD_SETTINGS() {} - const std::string & GetStrError() const { return m_errorStr; } - int ParseSettings(const ModuleSettings & s); + + struct AttrValue + { + enum class Type + { + PARAM_NAME, + VALUE + }; + std::string value; + Type type; + }; + + struct ASection + { + using Pairs = std::vector>; + Pairs match; + Pairs send; + }; + + const std::string& GetStrError() const { return m_errorStr; } + int ParseSettings(const ModuleSettings& s); uint16_t GetPort() const { return m_port; } - const std::string & GetDictionaries() const { return m_dictionaries; } - const std::string & GetSecret() const { return m_secret; } + const std::string& GetDictionaries() const { return m_dictionaries; } + const std::string& GetSecret() const { return m_secret; } + const ASection& getAuth() const { return m_auth; } + const ASection& getAutz() const { return m_autz; } private: + std::vector> ParseRules(const std::string& value, const std::string& paramName); + ASection parseASection(const std::vector& conf); + std::string m_errorStr; uint16_t m_port; std::string m_dictionaries; std::string m_secret; + + ASection m_auth; + ASection m_autz; + + PluginLogger m_logger; }; class RADIUS : public Auth @@ -46,28 +75,28 @@ namespace STG RADIUS(const RADIUS&) = delete; RADIUS& operator=(const RADIUS&) = delete; - void SetUsers(Users* u) { m_users = u; } - void SetSettings(const ModuleSettings & s) override { m_settings = s; } + void SetUsers(Users* u) override { m_users = u; } + void SetSettings(const ModuleSettings& s) override { m_settings = s; } int ParseSettings() override; int Start() override; int Stop() override; - int Reload(const ModuleSettings & /*ms*/) override { return 0; } + int Reload(const ModuleSettings& /*ms*/) override { return 0; } bool IsRunning() override; void SetRunning(bool val); - const std::string & GetStrError() const override { return m_errorStr; } + const std::string& GetStrError() const override { return m_errorStr; } std::string GetVersion() const override; uint16_t GetStartPosition() const override { return 0; } uint16_t GetStopPosition() const override { return 0; } - int SendMessage(const Message & msg, uint32_t ip) const override { return 0; } + int SendMessage(const Message& /*msg*/, uint32_t /*ip*/) const override { return 0; } private: std::mutex m_mutex; - boost::asio::io_service m_ioService; + boost::asio::io_context m_ioContext; int Run(std::stop_token token); mutable std::string m_errorStr; diff --git a/projects/stargazer/plugins/other/radius/server.cpp b/projects/stargazer/plugins/other/radius/server.cpp index 375fcd69..9e6766d5 100644 --- a/projects/stargazer/plugins/other/radius/server.cpp +++ b/projects/stargazer/plugins/other/radius/server.cpp @@ -11,8 +11,8 @@ using STG::Server; using boost::system::error_code; -Server::Server(boost::asio::io_service& io_service, const std::string& secret, uint16_t port, const std::string& filePath, std::stop_token token, PluginLogger& logger, Users* users) - : m_radius(io_service, secret, port), +Server::Server(boost::asio::io_context& io_context, const std::string& secret, uint16_t port, const std::string& filePath, std::stop_token token, PluginLogger& logger, Users* users) + : m_radius(io_context, secret, port), m_dictionaries(filePath), m_users(users), m_token(std::move(token)), diff --git a/projects/stargazer/plugins/other/radius/server.h b/projects/stargazer/plugins/other/radius/server.h index 7abcff3d..d4efef98 100644 --- a/projects/stargazer/plugins/other/radius/server.h +++ b/projects/stargazer/plugins/other/radius/server.h @@ -16,7 +16,7 @@ namespace STG class Server { public: - Server(boost::asio::io_service& io_service, const std::string& secret, uint16_t port, const std::string& filePath, std::stop_token token, PluginLogger& logger, Users* users); + Server(boost::asio::io_context& io_context, const std::string& secret, uint16_t port, const std::string& filePath, std::stop_token token, PluginLogger& logger, Users* users); void stop(); private: RadProto::Packet makeResponse(const RadProto::Packet& request);