3 #include "radproto/error.h"
5 #include "stg/common.h"
7 #include <boost/asio.hpp>
13 using STG::RAD_SETTINGS;
15 extern "C" STG::Plugin* GetPlugin()
21 RAD_SETTINGS::RAD_SETTINGS()
23 m_dictionaries("/usr/share/freeradius/dictionary")
26 int RAD_SETTINGS::ParseSettings(const ModuleSettings & s)
32 auto pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
33 if (pvi != s.moduleParams.end() && !pvi->value.empty())
35 if (ParseIntInRange(pvi->value[0], 2, 65535, &p) != 0)
37 m_errorStr = "Cannot parse parameter \'Port\': " + m_errorStr;
38 printfd(__FILE__, "Cannot parse parameter 'Port'\n");
41 m_port = static_cast<uint16_t>(p);
45 pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
46 if (pvi == s.moduleParams.end() || pvi->value.empty())
48 m_errorStr = "Parameter \'Secret\' not found.";
49 printfd(__FILE__, "Parameter 'Secret' not found\n");
54 m_secret = pvi->value[0];
57 pv.param = "Dictionaries";
58 pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
59 if (pvi != s.moduleParams.end() && !pvi->value.empty())
60 m_dictionaries = pvi->value[0];
66 m_logger(PluginLogger::get("radius"))
70 int RADIUS::Run(std::stop_token token)
76 boost::asio::io_service ioService;
77 Server server(ioService, m_radSettings.GetSecret(), m_radSettings.GetPort(), m_radSettings.GetDictionaries());
80 catch (const std::exception& e)
82 m_errorStr = "Exception in RADIUS::Run(): " + std::string(e.what());
83 m_logger("Exception in RADIUS:: Run(): %s", e.what());
84 printfd(__FILE__, "Exception in RADIUS:: Run(). Message: '%s'\n", e.what());
91 int RADIUS::ParseSettings()
93 auto ret = m_radSettings.ParseSettings(m_settings);
95 m_errorStr = m_radSettings.GetStrError();
100 std::string RADIUS::GetVersion() const
102 return "Radius v.1.0";
107 m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
113 if (!m_thread.joinable())
116 m_thread.request_stop();
122 bool RADIUS::IsRunning()
124 const std::lock_guard lock(m_mutex);
128 void RADIUS::SetRunning(bool val)
130 const std::lock_guard lock(m_mutex);