]> git.stg.codes - stg.git/blobdiff - projects/stargazer/settings_impl.cpp
Ticket 37. In 'case' where TARIFF::TO_EXPENSIVE, operation '>' changed to '>=' in
[stg.git] / projects / stargazer / settings_impl.cpp
index b547c4a78225cec6d8de56e9e17d448c6f069a9e..0cf9501bced5db222ec6413721f9cf70f1b51a6d 100644 (file)
@@ -32,49 +32,17 @@ $Author: faust $
 #include <cerrno>
 #include <string>
 
+#include "stg/logger.h"
+#include "stg/dotconfpp.h"
 #include "settings_impl.h"
-#include "stg_logger.h"
-#include "dotconfpp.h"
 
-using namespace std;
-
-//-----------------------------------------------------------------------------
-SETTINGS_IMPL::SETTINGS_IMPL()
-    : strError(),
-      modulesPath("/usr/lib/stg"),
-      confDir("/etc/stargazer"),
-      scriptsDir("/etc/stargazer"),
-      rules("/etc/stargazer/rules"),
-      logFile("/var/log/stargazer.log"),
-      pidFile("/var/run/stargazer.pid"),
-      monitorDir("/var/stargazer/monitoring"),
-      monitoring(false),
-      detailStatWritePeriod(dsPeriod_1_6),
-      statWritePeriod(10),
-      stgExecMsgKey(5555),
-      executersNum(1),
-      fullFee(false),
-      dayFee(0),
-      dayResetTraff(0),
-      spreadFee(false),
-      freeMbAllowInet(false),
-      dayFeeIsLastDay(false),
-      writeFreeMbTraffCost(false),
-      showFeeInCash(true),
-      messageTimeout(0),
-      modulesSettings(),
-      storeModuleSettings(),
-      logger(GetStgLogger())
-{
-}
 //-----------------------------------------------------------------------------
 SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
-    : strError(),
-      modulesPath("/usr/lib/stg"),
+    : modulesPath("/usr/lib/stg"),
       dirName(DIR_NUM),
-      confDir(cd),
-      scriptsDir(cd),
-      rules(cd + "/rules"),
+      confDir(cd.empty() ? "/etc/stargazer" : cd),
+      scriptsDir(confDir),
+      rules(confDir + "/rules"),
       logFile("/var/log/stargazer.log"),
       pidFile("/var/run/stargazer.pid"),
       monitorDir("/var/stargazer/monitoring"),
@@ -92,14 +60,17 @@ SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
-      modulesSettings(),
-      storeModuleSettings(),
+      feeChargeType(0),
+      reconnectOnTariffChange(false),
+      disableSessionLog(false),
       logger(GetStgLogger())
 {
+    filterParamsLog.push_back("*");
 }
 //-----------------------------------------------------------------------------
 SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
-    : strError(),
+    : SETTINGS(),
+      strError(),
       modulesPath(rval.modulesPath),
       dirName(rval.dirName),
       confDir(rval.confDir),
@@ -122,78 +93,52 @@ SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
       writeFreeMbTraffCost(rval.writeFreeMbTraffCost),
       showFeeInCash(rval.showFeeInCash),
       messageTimeout(rval.messageTimeout),
+      feeChargeType(rval.feeChargeType),
+      reconnectOnTariffChange(rval.reconnectOnTariffChange),
+      disableSessionLog(rval.disableSessionLog),
+      filterParamsLog(rval.filterParamsLog),
       modulesSettings(rval.modulesSettings),
       storeModuleSettings(rval.storeModuleSettings),
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseYesNo(const string & value, bool * val)
+SETTINGS_IMPL & SETTINGS_IMPL::operator=(const SETTINGS_IMPL & rhs)
 {
-if (0 == strcasecmp(value.c_str(), "yes"))
-    {
-    *val = true;
-    return 0;
-    }
-if (0 == strcasecmp(value.c_str(), "no"))
-    {
-    *val = false;
-    return 0;
-    }
-
-strError = "Incorrect value \'" + value + "\'.";
-return -1;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseInt(const string & value, int * val)
-{
-if (str2x<int>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to integer.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsigned(const string & value, unsigned * val)
-{
-if (str2x<unsigned>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to unsigned integer.";
-    return -1;
-    }
-return 0;
+    modulesPath = rhs.modulesPath;
+    dirName = rhs.dirName;
+    confDir = rhs.confDir;
+    scriptsDir = rhs.scriptsDir;
+    rules = rhs.rules;
+    logFile = rhs.logFile;
+    pidFile = rhs.pidFile;
+    monitorDir = rhs.monitorDir;
+    scriptParams = rhs.scriptParams;
+    monitoring = rhs.monitoring;
+    detailStatWritePeriod = rhs.detailStatWritePeriod;
+    statWritePeriod = rhs.statWritePeriod;
+    stgExecMsgKey = rhs.stgExecMsgKey;
+    executersNum = rhs.executersNum;
+    fullFee = rhs.fullFee;
+    dayFee = rhs.dayFee;
+    dayResetTraff = rhs.dayResetTraff;
+    spreadFee = rhs.spreadFee;
+    freeMbAllowInet = rhs.freeMbAllowInet;
+    dayFeeIsLastDay = rhs.dayFeeIsLastDay;
+    writeFreeMbTraffCost = rhs.writeFreeMbTraffCost;
+    showFeeInCash = rhs.showFeeInCash;
+    messageTimeout = rhs.messageTimeout;
+    feeChargeType = rhs.feeChargeType;
+    reconnectOnTariffChange = rhs.reconnectOnTariffChange;
+    disableSessionLog = rhs.disableSessionLog;
+    filterParamsLog = rhs.filterParamsLog;
+
+    modulesSettings = rhs.modulesSettings;
+    storeModuleSettings = rhs.storeModuleSettings;
+    return *this;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseIntInRange(const string & value, int min, int max, int * val)
-{
-if (ParseInt(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsignedInRange(const string & value, unsigned min, unsigned max, unsigned * val)
-{
-if (ParseUnsigned(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, vector<PARAM_VALUE> * params)
+int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector<PARAM_VALUE> * params)
 {
 const DOTCONFDocumentNode * childNode;
 PARAM_VALUE pv;
@@ -203,7 +148,7 @@ pv.param = node->getName();
 
 if (node->getValue(1))
     {
-    strError = "Unexpected value \'" + string(node->getValue(1)) + "\'.";
+    strError = "Unexpected value \'" + std::string(node->getValue(1)) + "\'.";
     return -1;
     }
 
@@ -234,9 +179,9 @@ return 0;
 //-----------------------------------------------------------------------------
 void SETTINGS_IMPL::ErrorCallback(void * data, const char * buf)
 {
-    printfd(__FILE__, buf);
+    printfd(__FILE__, "SETTINGS_IMPL::ErrorCallback() - %s\n", buf);
     SETTINGS_IMPL * settings = static_cast<SETTINGS_IMPL *>(data);
-    settings->logger(buf);
+    settings->logger("%s", buf);
 }
 //-----------------------------------------------------------------------------
 int SETTINGS_IMPL::ReadSettings()
@@ -262,7 +207,7 @@ modulesSettings.clear();
 DOTCONFDocument conf(DOTCONFDocument::CASEINSENSITIVE);
 conf.setErrorCallback(SETTINGS_IMPL::ErrorCallback, this);
 conf.setRequiredOptionNames(requiredOptions);
-string confFile = confDir + "/stargazer.conf";
+std::string confFile = confDir + "/stargazer.conf";
 
 if(conf.setContent(confFile.c_str()) != 0)
     {
@@ -303,7 +248,7 @@ while (node)
         {
         if (ParseDetailStatWritePeriod(node->getValue(0)) != 0)
             {
-            strError = "Incorrect DetailStatWritePeriod value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DetailStatWritePeriod value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -312,7 +257,7 @@ while (node)
         {
         if (ParseUnsignedInRange(node->getValue(0), 1, 1440, &statWritePeriod) != 0)
             {
-            strError = "Incorrect StatWritePeriod value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect StatWritePeriod value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -321,7 +266,7 @@ while (node)
         {
         if (ParseInt(node->getValue(0), &stgExecMsgKey) != 0)
             {
-            strError = "Incorrect ExecMsgKey value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect ExecMsgKey value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -330,7 +275,7 @@ while (node)
         {
         if (ParseUnsignedInRange(node->getValue(0), 1, 1024, &executersNum) != 0)
             {
-            strError = "Incorrect ExecutersNum value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect ExecutersNum value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -339,7 +284,7 @@ while (node)
         {
         if (ParseUnsignedInRange(node->getValue(0), 0, 31, &dayFee) != 0)
             {
-            strError = "Incorrect DayFee value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DayFee value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -348,7 +293,7 @@ while (node)
         {
         if (ParseYesNo(node->getValue(0), &fullFee) != 0)
             {
-            strError = "Incorrect FullFee value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect FullFee value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -357,7 +302,7 @@ while (node)
         {
         if (ParseUnsignedInRange(node->getValue(0), 0, 31, &dayResetTraff) != 0)
             {
-            strError = "Incorrect DayResetTraff value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DayResetTraff value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -366,7 +311,7 @@ while (node)
         {
         if (ParseYesNo(node->getValue(0), &spreadFee) != 0)
             {
-            strError = "Incorrect SpreadFee value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect SpreadFee value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -375,7 +320,7 @@ while (node)
         {
         if (ParseYesNo(node->getValue(0), &freeMbAllowInet) != 0)
             {
-            strError = "Incorrect FreeMbAllowInet value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect FreeMbAllowInet value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -384,7 +329,7 @@ while (node)
         {
         if (ParseYesNo(node->getValue(0), &dayFeeIsLastDay) != 0)
             {
-            strError = "Incorrect DayFeeIsLastDay value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DayFeeIsLastDay value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -393,7 +338,7 @@ while (node)
         {
         if (ParseYesNo(node->getValue(0), &writeFreeMbTraffCost) != 0)
             {
-            strError = "Incorrect WriteFreeMbTraffCost value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect WriteFreeMbTraffCost value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -402,7 +347,7 @@ while (node)
         {
         if (ParseYesNo(node->getValue(0), &showFeeInCash) != 0)
             {
-            strError = "Incorrect ShowFeeInCash value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect ShowFeeInCash value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
@@ -423,11 +368,45 @@ while (node)
         {
         if (ParseUnsigned(node->getValue(0), &messageTimeout) != 0)
             {
-            strError = "Incorrect MessageTimeout value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect MessageTimeout value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
 
+    if (strcasecmp(node->getName(), "FeeChargeType") == 0)
+        {
+        if (ParseUnsignedInRange(node->getValue(0), 0, 3, &feeChargeType) != 0)
+            {
+            strError = "Incorrect FeeChargeType value: \'" + std::string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
+    if (strcasecmp(node->getName(), "ReconnectOnTariffChange") == 0)
+        {
+        if (ParseYesNo(node->getValue(0), &reconnectOnTariffChange) != 0)
+            {
+            strError = "Incorrect ReconnectOnTariffChange value: \'" + std::string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
+    if (strcasecmp(node->getName(), "DisableSessionLog") == 0)
+        {
+        if (ParseYesNo(node->getValue(0), &disableSessionLog) != 0)
+            {
+            strError = "Incorrect DisableSessionLog value: \'" + std::string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
+    if (strcasecmp(node->getName(), "FilterParamsLog") == 0)
+        {
+        filterParamsLog.clear();
+        for (int i = 0; node->getValue(i) != NULL; ++i)
+            filterParamsLog.push_back(node->getValue(i));
+        }
+
     if (strcasecmp(node->getName(), "DirNames") == 0)
         {
         const DOTCONFDocumentNode * child = node->getChildNode();
@@ -452,7 +431,7 @@ while (node)
         {
         if (node->getValue(1))
             {
-            strError = "Unexpected \'" + string(node->getValue(1)) + "\'.";
+            strError = "Unexpected \'" + std::string(node->getValue(1)) + "\'.";
             return -1;
             }
 
@@ -471,7 +450,7 @@ while (node)
         {
         if (node->getValue(0))
             {
-            strError = "Unexpected \'" + string(node->getValue(0)) + "\'.";
+            strError = "Unexpected \'" + std::string(node->getValue(0)) + "\'.";
             return -1;
             }
         const DOTCONFDocumentNode * child = node->getChildNode();
@@ -494,13 +473,18 @@ while (node)
             }
         }
 
+    if (strcasecmp(node->getName(), "ScriptParams") == 0)
+        {
+        for (int i = 0; node->getValue(i) != NULL; ++i)
+            scriptParams.push_back(node->getValue(i));
+        }
     node = node->getNextNode();
     }
 
 return 0;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseDetailStatWritePeriod(const string & detailStatPeriodStr)
+int SETTINGS_IMPL::ParseDetailStatWritePeriod(const std::string & detailStatPeriodStr)
 {
 if (detailStatPeriodStr == "1")
     {