]> git.stg.codes - stg.git/commitdiff
Merge remote-tracking branch 'origin/stg-2.409' into ticket26
authorElena Mamontova <helenh463@gmail.com>
Thu, 17 Mar 2016 07:39:43 +0000 (09:39 +0200)
committerElena Mamontova <helenh463@gmail.com>
Thu, 17 Mar 2016 07:39:43 +0000 (09:39 +0200)
27 files changed:
include/stg/plugin.h
projects/stargazer/main.cpp
projects/stargazer/plugin_mgr.cpp
projects/stargazer/plugin_mgr.h
projects/stargazer/plugin_runner.cpp
projects/stargazer/plugin_runner.h
projects/stargazer/plugins/authorization/ao/ao.h
projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp
projects/stargazer/plugins/authorization/inetaccess/inetaccess.h
projects/stargazer/plugins/authorization/stress/stress.h
projects/stargazer/plugins/capture/cap_debug/debug_cap.h
projects/stargazer/plugins/capture/cap_nf/cap_nf.h
projects/stargazer/plugins/capture/divert_freebsd/divert_cap.h
projects/stargazer/plugins/capture/ether_freebsd/ether_cap.h
projects/stargazer/plugins/capture/ether_linux/ether_cap.h
projects/stargazer/plugins/capture/ipq_linux/ipq_cap.h
projects/stargazer/plugins/capture/nfqueue/nfqueue.h
projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.h
projects/stargazer/plugins/configuration/sgconfig/stgconfig.h
projects/stargazer/plugins/other/ping/ping.h
projects/stargazer/plugins/other/radius/radius.h
projects/stargazer/plugins/other/rscript/rscript.cpp
projects/stargazer/plugins/other/rscript/rscript.h
projects/stargazer/plugins/other/smux/smux.cpp
projects/stargazer/plugins/other/smux/smux.h
projects/stargazer/settings_impl.cpp
projects/stargazer/settings_impl.h

index 114ffc8bc61e58f67ed0e1fb05868007df6f1b0e..2deabcc3c853b7fab16d52808cd8973be056fbcc 100644 (file)
@@ -59,7 +59,7 @@ public:
 
     virtual int                 Start() = 0;
     virtual int                 Stop() = 0;
-    virtual int                 Reload() = 0;
+    virtual int                 Reload(const MODULE_SETTINGS &) = 0;
     virtual bool                IsRunning() = 0;
     virtual const std::string & GetStrError() const = 0;
     virtual std::string         GetVersion() const = 0;
index 3c216977b8725adc961712688157125481e3f0f1..34fc4bd00dcd515d51abbf113af422efba003ca5 100644 (file)
@@ -338,8 +338,22 @@ while (running)
     switch (sig)
         {
         case SIGHUP:
+            {
+            SETTINGS_IMPL newSettings(settings);
+            if (newSettings.ReadSettings())
+                {
+                STG_LOGGER & WriteServLog = GetStgLogger();
+
+                if (newSettings.GetLogFileName() != "")
+                    WriteServLog.SetLogFileName(newSettings.GetLogFileName());
+
+                WriteServLog("ReadSettings error. %s", newSettings.GetStrError().c_str());
+                return -1;
+                }
+            settings = newSettings;
             traffCnt.Reload();
-            manager.reload();
+            manager.reload(settings);
+            }
             break;
         case SIGTERM:
             running = false;
index b87ab2770828f46affa73638954e2858dcb3a5a0..10911b97e2995759736e2a663efcbe1cc12bed9f 100644 (file)
@@ -60,11 +60,12 @@ PluginManager::PluginManager(const SETTINGS_IMPL& settings,
     for (size_t i = 0; i < modSettings.size(); i++)
     {
         std::string modulePath = basePath + "/mod_" + modSettings[i].moduleName + ".so";
+        std::string moduleName = modSettings[i].moduleName;
         printfd(__FILE__, "Module: %s\n", modulePath.c_str());
         try
         {
             m_modules.push_back(
-                new PLUGIN_RUNNER(modulePath, modSettings[i], admins, tariffs,
+                new PLUGIN_RUNNER(modulePath, moduleName, modSettings[i], admins, tariffs,
                                   users, services, corporations, traffcounter,
                                   store, settings)
             );
@@ -102,17 +103,24 @@ PluginManager::~PluginManager()
         delete m_modules[i];
 }
 
-void PluginManager::reload()
+void PluginManager::reload(const SETTINGS_IMPL& settings)
 {
+    const std::vector<MODULE_SETTINGS> & modSettings(settings.GetModulesSettings());
     for (size_t i = 0; i < m_modules.size(); ++i)
     {
-        PLUGIN & plugin = m_modules[i]->GetPlugin();
-        if (m_modules[i]->Reload())
+        for (size_t j = 0; j < modSettings.size(); j++)
         {
-            m_log("Error reloading module '%s': '%s'", plugin.GetVersion().c_str(),
-                                                       plugin.GetStrError().c_str());
-            printfd(__FILE__, "Error reloading module '%s': '%s'\n", plugin.GetVersion().c_str(),
-                                                                     plugin.GetStrError().c_str());
+            if (modSettings[j].moduleName == m_modules[i]->GetName())
+            {
+                PLUGIN & plugin = m_modules[i]->GetPlugin();
+                if (m_modules[i]->Reload(modSettings[j]))
+                {
+                    m_log("Error reloading module '%s': '%s'", plugin.GetVersion().c_str(),
+                                                               plugin.GetStrError().c_str());
+                    printfd(__FILE__, "Error reloading module '%s': '%s'\n", plugin.GetVersion().c_str(),
+                                                                             plugin.GetStrError().c_str());
+                }
+            }
         }
     }
 }
index c9ec8dff3c63412e805677c22d232bbab947b197..a37052d5d1ab8397dde03d2fb043159b10b9fe88 100644 (file)
@@ -48,7 +48,7 @@ class PluginManager
                       USERS_IMPL& users, TRAFFCOUNTER_IMPL& traffcounter);
         ~PluginManager();
 
-        void reload();
+        void reload(const SETTINGS_IMPL& settings);
         void stop();
 
     private:
index eaf51058ccedc97a0999c8fee211142632edc8c1..e57a421ef245d955d6c0dfbd9945cf9e404d6cae 100644 (file)
@@ -28,6 +28,7 @@
 
 //-----------------------------------------------------------------------------
 PLUGIN_RUNNER::PLUGIN_RUNNER(const std::string & fileName,
+                             const std::string & name,
                              const MODULE_SETTINGS & ms,
                              ADMINS & admins,
                              TARIFFS & tariffs,
@@ -38,6 +39,7 @@ PLUGIN_RUNNER::PLUGIN_RUNNER(const std::string & fileName,
                              STORE & store,
                              const SETTINGS & settings)
     : pluginFileName(fileName),
+      pluginName(name),
       libHandle(NULL),
       m_plugin(Load(ms, admins, tariffs, users, services, corporations,
                     traffcounter, store, settings))
@@ -67,9 +69,9 @@ errorStr = m_plugin.GetStrError();
 return res;
 }
 //-----------------------------------------------------------------------------
-int PLUGIN_RUNNER::Reload()
+int PLUGIN_RUNNER::Reload(const MODULE_SETTINGS & ms)
 {
-int res = m_plugin.Reload();
+int res = m_plugin.Reload(ms);
 errorStr = m_plugin.GetStrError();
 return res;
 }
index 1402d2ef48a63fa2b97c6360363f513cd62274ed..2d0c22c4e069145cbc0f6adf35be40aa4b8c1eea 100644 (file)
@@ -46,6 +46,7 @@ public:
     };
 
     PLUGIN_RUNNER(const std::string & pluginFileName,
+                  const std::string & pluginName,
                   const MODULE_SETTINGS & ms,
                   ADMINS & admins,
                   TARIFFS & tariffs,
@@ -59,13 +60,14 @@ public:
 
     int             Start();
     int             Stop();
-    int             Reload();
+    int             Reload(const MODULE_SETTINGS & ms);
     int             Restart();
     bool            IsRunning() { return m_plugin.IsRunning(); }
 
     const std::string & GetStrError() const { return errorStr; }
     PLUGIN &        GetPlugin() { return m_plugin; }
     const std::string & GetFileName() const { return pluginFileName; }
+    const std::string & GetName() const { return pluginName; }
 
     uint16_t        GetStartPosition() const { return m_plugin.GetStartPosition(); }
     uint16_t        GetStopPosition() const { return m_plugin.GetStopPosition(); }
@@ -85,6 +87,7 @@ private:
                   const SETTINGS & settings);
 
     std::string     pluginFileName;
+    std::string     pluginName;
     void *          libHandle;
 
     PLUGIN &        m_plugin;
index d8b6dc88bf48719a7504a9f08328bdfb08c25973..34c15d918c36c577ab0c7002c90d9052adf509c5 100644 (file)
@@ -89,7 +89,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning() { return isRunning; }
     void                SetSettings(const MODULE_SETTINGS &) {}
     int                 ParseSettings() { return 0; }
index 8be662e913457bf32b982f8dd578b380aa960fb4..6b34618f5f3235f136ff869e3522eef97ae61c07 100644 (file)
@@ -524,6 +524,23 @@ if (ret)
 return ret;
 }
 //-----------------------------------------------------------------------------
+int AUTH_IA::Reload(const MODULE_SETTINGS & ms)
+{
+AUTH_IA_SETTINGS newIaSettings;
+if (newIaSettings.ParseSettings(ms))
+    {
+    STG_LOGGER & WriteServLog = GetStgLogger();
+    printfd(__FILE__, "AUTH_IA::Reload() - Failed to reload InetAccess.\n");
+    WriteServLog("AUTH_IA: Cannot reload InetAccess. Errors found.");
+    return -1;
+    }
+
+STG_LOGGER & WriteServLog = GetStgLogger();
+printfd(__FILE__, "AUTH_IA::Reload() -  Reloaded InetAccess successfully.\n");
+WriteServLog("AUTH_IA: Reloaded InetAccess successfully.");
+return 0;
+}
+//-----------------------------------------------------------------------------
 int AUTH_IA::PrepareNet()
 {
 struct sockaddr_in listenAddr;
index 5e454124227d3fe113f137a04db6d9551d86c49a..2b527076edbf607d1bb78272d7a9cdc04673da07 100644 (file)
@@ -247,7 +247,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms);
     bool                IsRunning() { return isRunningRunTimeouter || isRunningRun; }
 
     const std::string & GetStrError() const { return errorStr; }
index 83ab3231d5c75fc9b2a5e0fb1d823bdda6d2680d..8ab8122a6611a00eae51117a67f6cc7ac28f72e2 100644 (file)
@@ -93,7 +93,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning();
     void                SetSettings(const MODULE_SETTINGS & s);
     int                 ParseSettings();
index 6bea457fbe79d4d4a41944aba10b5e933bda02ff..c9a629c6c08d41edf36994fc3f2ff2d2ef831fc0 100644 (file)
@@ -69,7 +69,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     int                 ParseSettings() { return 0; }
     bool                IsRunning();
     const std::string & GetStrError() const;
index bcb8b743619ac4658a49bb130a6b50bd5909a188..ae0b3763cd58947827547294954e4781a8a81211 100644 (file)
@@ -99,7 +99,7 @@ public:
 
     int             Start();
     int             Stop();
-    int             Reload() { return 0; }
+    int             Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool            IsRunning() { return runningTCP || runningUDP; }
     const std::string & GetStrError() const { return errorStr; }
     std::string     GetVersion() const { return VERSION; }
index b34f832e5ea5b7706a762edb7ba92b38aeb3b84c..3c52701d0a4cf5e1517798f0838e6b461441ea04 100644 (file)
@@ -51,7 +51,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning() { return isRunning; }
 
     void                SetSettings(const MODULE_SETTINGS & s) { settings = s; }
index 76785ed293ebb55f2116cf2549920371cc21ed39..2a9840aefb078c45d3b9ef52a337820bdffd90d2 100644 (file)
@@ -98,7 +98,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning() { return isRunning; }
 
     void                SetSettings(const MODULE_SETTINGS & s) { settings = s; }
index 8dfb6c043e741dd7dbbb80ee2ff661becbfdce1c..73455658ec2050912654bb870794d250d6e834eb 100644 (file)
@@ -52,7 +52,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning() { return isRunning; }
 
     int                 ParseSettings() { return 0; }
index 39ed5766401bac4228c48dea191f096f4082100a..7144d177dc82a42e72a9ed9c30c20622a92df7d2 100644 (file)
@@ -47,7 +47,7 @@ public:
 
     int Start();
     int Stop();
-    int Reload() { return 0; }
+    int Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool IsRunning() { return isRunning; }
 
     int  ParseSettings() { return 0; }
index 871247848e0c1fef4c762493b925c50744f79438..60829626e091f04bfd770642215ff1e2d51018fe 100644 (file)
@@ -51,7 +51,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning() { return isRunning; }
 
     void                SetSettings(const MODULE_SETTINGS & s) { settings = s; }
index 72a14f21e028238c558657b2e70c8932aa81e4fc..593f346d7b10ad25964f40e2e84d827869c04df5 100644 (file)
@@ -70,7 +70,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning() { return running && !stopped; }
 
     const std::string & GetStrError() const { return errorStr; }
index 287c3813a87a109473aa7c21565eb4888b7d6906..87756b4a228d31d7181fb4fa91629e712f74ac3e 100644 (file)
@@ -60,7 +60,7 @@ class STG_CONFIG : public PLUGIN
 
         int                 Start();
         int                 Stop();
-        int                 Reload() { return 0; }
+        int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
         bool                IsRunning() { return isRunning; }
 
         const std::string & GetStrError() const { return errorStr; }
index 29e4974ef4be2779c286ff36dfd82dcc2661e328..1a7e1b9735b5dda98c215d8aba0f5b613780bdba 100644 (file)
@@ -112,7 +112,7 @@ public:
 
     int Start();
     int Stop();
-    int Reload() { return 0; }
+    int Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool IsRunning();
 
     const std::string & GetStrError() const { return errorStr; }
index 8f5ba2a451ad8ad3d88dcb88fd0ae7f5013ffe3c..77dde0d55e99e18d566a4a9c63dcc95d1d3a35aa 100644 (file)
@@ -98,7 +98,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload() { return 0; }
+    int                 Reload(const MODULE_SETTINGS & ms) { return 0; }
     bool                IsRunning() { return isRunning; }
 
     const std::string & GetStrError() const { return errorStr; }
index 928629ad8b007f48bde0e7b4644cb46208e9fc7a..74bf87a1ae90e9ffa6aa7685e52ae6a3de285609 100644 (file)
@@ -296,7 +296,7 @@ if (isRunning)
 return 0;
 }
 //-----------------------------------------------------------------------------
-int REMOTE_SCRIPT::Reload()
+int REMOTE_SCRIPT::Reload(const MODULE_SETTINGS & ms)
 {
 NRMapParser nrMapParser;
 
index e0412fb07501cdc2d2e70da2b269100f41a49ee3..0de1ea2e201a8702bd386aca651bf008da72cb84 100644 (file)
@@ -185,7 +185,7 @@ public:
 
     int                 Start();
     int                 Stop();
-    int                 Reload();
+    int                 Reload(const MODULE_SETTINGS & ms);
     bool                IsRunning() { return isRunning; }
 
     const std::string & GetStrError() const { return errorStr; }
index 9ff739cb0fa43468f8268fb238d0016ecccc29fe..5a20d495636078ff7f9adb4ced246df6f3c82411 100644 (file)
@@ -269,7 +269,7 @@ printfd(__FILE__, "SMUX::Stop() - After\n");
 return 0;
 }
 
-int SMUX::Reload()
+int SMUX::Reload(const MODULE_SETTINGS & ms)
 {
 if (Stop())
     return -1;
index e379ea7f7f06261e4cfe64bc2612b83796c2c94b..3b217eb72878cafba22aa532bb129c7e8bbb75e0 100644 (file)
@@ -116,7 +116,7 @@ public:
 
     int Start();
     int Stop();
-    int Reload();
+    int Reload(const MODULE_SETTINGS & ms);
     bool IsRunning() { return running && !stopped; }
 
     const std::string & GetStrError() const { return errorStr; }
index d115919d0e096142bee210b917eaa0ea7e2a4879..a50a0a657ec708f37accbc0d5adfa7ab1d3ad218 100644 (file)
@@ -99,6 +99,39 @@ SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
 {
 }
 //-----------------------------------------------------------------------------
+SETTINGS_IMPL & SETTINGS_IMPL::operator=(const SETTINGS_IMPL & set)
+{
+    modulesPath = set.modulesPath;
+    dirName = set.dirName;
+    confDir = set.confDir;
+    scriptsDir = set.scriptsDir;
+    rules = set.rules;
+    logFile = set.logFile;
+    pidFile = set.pidFile;
+    monitorDir = set.monitorDir;
+    scriptParams = set.scriptParams;
+    monitoring = set.monitoring;
+    detailStatWritePeriod = set.detailStatWritePeriod;
+    statWritePeriod = set.statWritePeriod;
+    stgExecMsgKey = set.stgExecMsgKey;
+    executersNum = set.executersNum;
+    fullFee = set.fullFee;
+    dayFee = set.dayFee;
+    dayResetTraff = set.dayResetTraff;
+    spreadFee = set.spreadFee;
+    freeMbAllowInet = set.freeMbAllowInet;
+    dayFeeIsLastDay = set.dayFeeIsLastDay;
+    writeFreeMbTraffCost = set.writeFreeMbTraffCost;
+    showFeeInCash = set.showFeeInCash;
+    messageTimeout = set.messageTimeout;
+    feeChargeType = set.feeChargeType;
+    reconnectOnTariffChange = set.reconnectOnTariffChange;
+
+    modulesSettings = set.modulesSettings;
+    storeModuleSettings = set.storeModuleSettings;
+    return *this;
+}
+//-----------------------------------------------------------------------------
 int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector<PARAM_VALUE> * params)
 {
 const DOTCONFDocumentNode * childNode;
index 690137643bbe272e3e9089f51c22f5f0802c3ebc..253b8bbccbcc70c0a41d4b09e464780b60c32b90 100644 (file)
@@ -42,7 +42,6 @@
 
 #include "stg/settings.h"
 #include "stg/common.h"
-#include "stg/logger.h"
 #include "stg/module_settings.h"
 
 //-----------------------------------------------------------------------------
@@ -61,6 +60,8 @@ public:
     SETTINGS_IMPL(const std::string &);
     SETTINGS_IMPL(const SETTINGS_IMPL &);
     virtual ~SETTINGS_IMPL() {}
+    SETTINGS_IMPL & operator=(const SETTINGS_IMPL &);
+
     int Reload() { return ReadSettings(); }
     int ReadSettings();