]> git.stg.codes - stg.git/blobdiff - projects/stargazer/settings_impl.cpp
Add iconv for 'note', 'email', 'address' and 'group'
[stg.git] / projects / stargazer / settings_impl.cpp
index 8af7f7aa80ba9e58125b4c7e9417cc5a2bd629bc..e0eb46399b79dd2eafeaf4538e4aa29e3ede36ec 100644 (file)
@@ -32,17 +32,23 @@ $Author: faust $
 #include <cerrno>
 #include <string>
 
 #include <cerrno>
 #include <string>
 
-#include "settings.h"
-#include "stg_logger.h"
-#include "dotconfpp.h"
+#include "stg/logger.h"
+#include "stg/dotconfpp.h"
+#include "settings_impl.h"
 
 using namespace std;
 
 //-----------------------------------------------------------------------------
 
 using namespace std;
 
 //-----------------------------------------------------------------------------
-SETTINGS::SETTINGS()
-    : confDir("/etc/stargazer"),
+SETTINGS_IMPL::SETTINGS_IMPL()
+    : strError(),
+      modulesPath("/usr/lib/stg"),
+      dirName(DIR_NUM),
+      confDir("/etc/stargazer"),
       scriptsDir("/etc/stargazer"),
       scriptsDir("/etc/stargazer"),
+      rules("/etc/stargazer/rules"),
+      logFile("/var/log/stargazer.log"),
       pidFile("/var/run/stargazer.pid"),
       pidFile("/var/run/stargazer.pid"),
+      monitorDir("/var/stargazer/monitoring"),
       monitoring(false),
       detailStatWritePeriod(dsPeriod_1_6),
       statWritePeriod(10),
       monitoring(false),
       detailStatWritePeriod(dsPeriod_1_6),
       statWritePeriod(10),
@@ -57,13 +63,22 @@ SETTINGS::SETTINGS()
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
+      modulesSettings(),
+      storeModuleSettings(),
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
-SETTINGS::SETTINGS(const std::string & cd)
-    : confDir(cd),
+SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
+    : strError(),
+      modulesPath("/usr/lib/stg"),
+      dirName(DIR_NUM),
+      confDir(cd),
       scriptsDir(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),
       monitoring(false),
       detailStatWritePeriod(dsPeriod_1_6),
       statWritePeriod(10),
@@ -78,37 +93,43 @@ SETTINGS::SETTINGS(const std::string & cd)
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
+      modulesSettings(),
+      storeModuleSettings(),
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
-SETTINGS::SETTINGS(const SETTINGS & rval)
-    : confDir(rval.confDir),
+SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
+    : strError(),
+      modulesPath(rval.modulesPath),
+      dirName(rval.dirName),
+      confDir(rval.confDir),
       scriptsDir(rval.scriptsDir),
       scriptsDir(rval.scriptsDir),
+      rules(rval.rules),
+      logFile(rval.logFile),
       pidFile(rval.pidFile),
       pidFile(rval.pidFile),
+      monitorDir(rval.monitorDir),
       monitoring(rval.monitoring),
       monitoring(rval.monitoring),
-      detailStatWritePeriod(dsPeriod_1_6),
-      statWritePeriod(10),
+      detailStatWritePeriod(rval.detailStatWritePeriod),
+      statWritePeriod(rval.statWritePeriod),
       stgExecMsgKey(rval.stgExecMsgKey),
       executersNum(rval.executersNum),
       fullFee(rval.fullFee),
       stgExecMsgKey(rval.stgExecMsgKey),
       executersNum(rval.executersNum),
       fullFee(rval.fullFee),
-      dayFee(0),
-      dayResetTraff(0),
+      dayFee(rval.dayFee),
+      dayResetTraff(rval.dayResetTraff),
       spreadFee(rval.spreadFee),
       spreadFee(rval.spreadFee),
-      freeMbAllowInet(false),
-      dayFeeIsLastDay(false),
-      writeFreeMbTraffCost(false),
+      freeMbAllowInet(rval.freeMbAllowInet),
+      dayFeeIsLastDay(rval.dayFeeIsLastDay),
+      writeFreeMbTraffCost(rval.writeFreeMbTraffCost),
       showFeeInCash(rval.showFeeInCash),
       messageTimeout(rval.messageTimeout),
       showFeeInCash(rval.showFeeInCash),
       messageTimeout(rval.messageTimeout),
+      modulesSettings(rval.modulesSettings),
+      storeModuleSettings(rval.storeModuleSettings),
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
       logger(GetStgLogger())
 {
 }
 //-----------------------------------------------------------------------------
-SETTINGS::~SETTINGS()
-{
-}
-//-----------------------------------------------------------------------------
-int SETTINGS::ParseYesNo(const string & value, bool * val)
+int SETTINGS_IMPL::ParseYesNo(const string & value, bool * val)
 {
 if (0 == strcasecmp(value.c_str(), "yes"))
     {
 {
 if (0 == strcasecmp(value.c_str(), "yes"))
     {
@@ -125,7 +146,7 @@ strError = "Incorrect value \'" + value + "\'.";
 return -1;
 }
 //-----------------------------------------------------------------------------
 return -1;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS::ParseInt(const string & value, int * val)
+int SETTINGS_IMPL::ParseInt(const string & value, int * val)
 {
 if (str2x<int>(value, *val))
     {
 {
 if (str2x<int>(value, *val))
     {
@@ -135,7 +156,7 @@ if (str2x<int>(value, *val))
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS::ParseUnsigned(const string & value, unsigned * val)
+int SETTINGS_IMPL::ParseUnsigned(const string & value, unsigned * val)
 {
 if (str2x<unsigned>(value, *val))
     {
 {
 if (str2x<unsigned>(value, *val))
     {
@@ -145,7 +166,7 @@ if (str2x<unsigned>(value, *val))
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS::ParseIntInRange(const string & value, int min, int max, int * val)
+int SETTINGS_IMPL::ParseIntInRange(const string & value, int min, int max, int * val)
 {
 if (ParseInt(value, val) != 0)
     return -1;
 {
 if (ParseInt(value, val) != 0)
     return -1;
@@ -159,7 +180,7 @@ if (*val < min || *val > max)
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS::ParseUnsignedInRange(const string & value, unsigned min, unsigned max, unsigned * val)
+int SETTINGS_IMPL::ParseUnsignedInRange(const string & value, unsigned min, unsigned max, unsigned * val)
 {
 if (ParseUnsigned(value, val) != 0)
     return -1;
 {
 if (ParseUnsigned(value, val) != 0)
     return -1;
@@ -173,7 +194,7 @@ if (*val < min || *val > max)
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS::ParseModuleSettings(const DOTCONFDocumentNode * node, vector<PARAM_VALUE> * params)
+int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, vector<PARAM_VALUE> * params)
 {
 const DOTCONFDocumentNode * childNode;
 PARAM_VALUE pv;
 {
 const DOTCONFDocumentNode * childNode;
 PARAM_VALUE pv;
@@ -212,14 +233,14 @@ while (childNode)
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
-void SETTINGS::ErrorCallback(void * data, const char * buf)
+void SETTINGS_IMPL::ErrorCallback(void * data, const char * buf)
 {
     printfd(__FILE__, buf);
 {
     printfd(__FILE__, buf);
-    SETTINGS * settings = static_cast<SETTINGS *>(data);
+    SETTINGS_IMPL * settings = static_cast<SETTINGS_IMPL *>(data);
     settings->logger(buf);
 }
 //-----------------------------------------------------------------------------
     settings->logger(buf);
 }
 //-----------------------------------------------------------------------------
-int SETTINGS::ReadSettings()
+int SETTINGS_IMPL::ReadSettings()
 {
 const char * requiredOptions[] = {
     "ModulesPath",
 {
 const char * requiredOptions[] = {
     "ModulesPath",
@@ -240,7 +261,7 @@ int storeModulesCount = 0;
 modulesSettings.clear();
 
 DOTCONFDocument conf(DOTCONFDocument::CASEINSENSITIVE);
 modulesSettings.clear();
 
 DOTCONFDocument conf(DOTCONFDocument::CASEINSENSITIVE);
-conf.setErrorCallback(SETTINGS::ErrorCallback, this);
+conf.setErrorCallback(SETTINGS_IMPL::ErrorCallback, this);
 conf.setRequiredOptionNames(requiredOptions);
 string confFile = confDir + "/stargazer.conf";
 
 conf.setRequiredOptionNames(requiredOptions);
 string confFile = confDir + "/stargazer.conf";
 
@@ -414,6 +435,7 @@ while (node)
         if (child)
             {
             const DOTCONFDocumentNode * dirNameNode;
         if (child)
             {
             const DOTCONFDocumentNode * dirNameNode;
+            dirName.reserve(DIR_NUM);
             for (int i = 0; i < DIR_NUM; i++)
                 {
                 char strDirName[12];
             for (int i = 0; i < DIR_NUM; i++)
                 {
                 char strDirName[12];
@@ -479,7 +501,7 @@ while (node)
 return 0;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS::ParseDetailStatWritePeriod(const string & detailStatPeriodStr)
+int SETTINGS_IMPL::ParseDetailStatWritePeriod(const string & detailStatPeriodStr)
 {
 if (detailStatPeriodStr == "1")
     {
 {
 if (detailStatPeriodStr == "1")
     {