2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 * Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
21 #include "stgconfig.h"
23 #include "stg/common.h"
30 //-----------------------------------------------------------------------------
31 //-----------------------------------------------------------------------------
32 //-----------------------------------------------------------------------------
33 bool STG_CONFIG_SETTINGS::ParseSettings(const STG::ModuleSettings & s)
36 std::vector<STG::ParamValue>::const_iterator pvi;
37 ///////////////////////////
39 pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
40 if (pvi == s.moduleParams.end() || pvi->value.empty())
42 errorStr = "Parameter \'Port\' is not found.";
43 printfd(__FILE__, "%s\n", errorStr.c_str());
47 if (ParseIntInRange(pvi->value[0], 2, 65535, &p))
49 errorStr = "Parameter \'Port\' should be an integral value in range (2, 65535). Actual value: '" + pvi->value[0] + "'.";
50 printfd(__FILE__, "%s\n", errorStr.c_str());
53 m_port = static_cast<uint16_t>(p);
55 pv.param = "BindAddress";
56 pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
57 if (pvi != s.moduleParams.end() && !pvi->value.empty())
58 m_bindAddress = pvi->value[0];
62 //-----------------------------------------------------------------------------
63 //-----------------------------------------------------------------------------
64 //-----------------------------------------------------------------------------
65 extern "C" STG::Plugin * GetPlugin()
67 static STG_CONFIG plugin;
70 //-----------------------------------------------------------------------------
71 //-----------------------------------------------------------------------------
72 //-----------------------------------------------------------------------------
73 STG_CONFIG::STG_CONFIG()
76 logger(STG::PluginLogger::get("conf_sg")),
80 //-----------------------------------------------------------------------------
81 int STG_CONFIG::ParseSettings()
83 if (stgConfigSettings.ParseSettings(settings))
85 errorStr = stgConfigSettings.GetStrError();
88 //-----------------------------------------------------------------------------
89 int STG_CONFIG::Start()
96 config.SetPort(stgConfigSettings.GetPort());
97 config.SetBindAddress(stgConfigSettings.GetBindAddress());
101 errorStr = config.GetStrError();
105 m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
109 //-----------------------------------------------------------------------------
110 int STG_CONFIG::Stop()
116 m_thread.request_stop();
118 //5 seconds to thread stops itself
119 for (size_t i = 0; i < 25; ++i)
124 struct timespec ts = {0, 200000000};
125 nanosleep(&ts, NULL);
135 //-----------------------------------------------------------------------------
136 void STG_CONFIG::Run(std::stop_token token)
139 sigfillset(&signalSet);
140 pthread_sigmask(SIG_BLOCK, &signalSet, NULL);