]> git.stg.codes - stg.git/blobdiff - projects/stargazer/settings_impl.cpp
Full month stats patches added (derived from GTS version)
[stg.git] / projects / stargazer / settings_impl.cpp
index 0ee78fa84165467d1748e651c5744d407e8d2693..f9135a1ae8f959b1a362ca85e22bc8b524406083 100644 (file)
@@ -32,17 +32,23 @@ $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()
-    : confDir("/etc/stargazer"),
+    : strError(),
+      modulesPath("/usr/lib/stg"),
+      dirName(DIR_NUM),
+      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),
@@ -57,13 +63,24 @@ SETTINGS_IMPL::SETTINGS_IMPL()
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
+      feeChargeType(0),
+      reconnectOnTariffChange(false),
+      modulesSettings(),
+      storeModuleSettings(),
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
 SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
-    : confDir(cd),
+    : strError(),
+      modulesPath("/usr/lib/stg"),
+      dirName(DIR_NUM),
+      confDir(cd),
       scriptsDir(cd),
+      rules(cd + "/rules"),
+      logFile("/var/log/stargazer.log"),
+      pidFile("/var/run/stargazer.pid"),
+      monitorDir("/var/stargazer/monitoring"),
       monitoring(false),
       detailStatWritePeriod(dsPeriod_1_6),
       statWritePeriod(10),
@@ -78,28 +95,42 @@ SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
+      feeChargeType(0),
+      reconnectOnTariffChange(false),
+      modulesSettings(),
+      storeModuleSettings(),
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
 SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
-    : confDir(rval.confDir),
+    : strError(),
+      modulesPath(rval.modulesPath),
+      dirName(rval.dirName),
+      confDir(rval.confDir),
       scriptsDir(rval.scriptsDir),
+      rules(rval.rules),
+      logFile(rval.logFile),
       pidFile(rval.pidFile),
+      monitorDir(rval.monitorDir),
       monitoring(rval.monitoring),
-      detailStatWritePeriod(dsPeriod_1_6),
-      statWritePeriod(10),
+      detailStatWritePeriod(rval.detailStatWritePeriod),
+      statWritePeriod(rval.statWritePeriod),
       stgExecMsgKey(rval.stgExecMsgKey),
       executersNum(rval.executersNum),
       fullFee(rval.fullFee),
-      dayFee(0),
-      dayResetTraff(0),
+      dayFee(rval.dayFee),
+      dayResetTraff(rval.dayResetTraff),
       spreadFee(rval.spreadFee),
-      freeMbAllowInet(false),
-      dayFeeIsLastDay(false),
-      writeFreeMbTraffCost(false),
+      freeMbAllowInet(rval.freeMbAllowInet),
+      dayFeeIsLastDay(rval.dayFeeIsLastDay),
+      writeFreeMbTraffCost(rval.writeFreeMbTraffCost),
       showFeeInCash(rval.showFeeInCash),
       messageTimeout(rval.messageTimeout),
+      feeChargeType(rval.feeChargeType),
+      reconnectOnTariffChange(rval.reconnectOnTariffChange),
+      modulesSettings(rval.modulesSettings),
+      storeModuleSettings(rval.storeModuleSettings),
       logger(GetStgLogger())
 {
 }
@@ -210,9 +241,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()
@@ -404,12 +435,31 @@ while (node)
             }
         }
 
+    if (strcasecmp(node->getName(), "FeeChargeType") == 0)
+        {
+        if (ParseUnsignedInRange(node->getValue(0), 0, 2, &feeChargeType) != 0)
+            {
+            strError = "Incorrect FeeChargeType value: \'" + string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
+    if (strcasecmp(node->getName(), "ReconnectOnTariffChange") == 0)
+        {
+        if (ParseYesNo(node->getValue(0), &reconnectOnTariffChange) != 0)
+            {
+            strError = "Incorrect ReconnectOnTariffChange value: \'" + string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
     if (strcasecmp(node->getName(), "DirNames") == 0)
         {
         const DOTCONFDocumentNode * child = node->getChildNode();
         if (child)
             {
             const DOTCONFDocumentNode * dirNameNode;
+            dirName.reserve(DIR_NUM);
             for (int i = 0; i < DIR_NUM; i++)
                 {
                 char strDirName[12];