X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/641204dfbdb9fc870cdd2e7f9e3169a44693e7bf..722a4fd38336dab14e00cb60c9e0c17867a0240e:/projects/stargazer/settings.cpp?ds=inline diff --git a/projects/stargazer/settings.cpp b/projects/stargazer/settings.cpp index 9fcacc01..8af7f7aa 100644 --- a/projects/stargazer/settings.cpp +++ b/projects/stargazer/settings.cpp @@ -28,21 +28,20 @@ $Date: 2010/08/19 13:42:30 $ $Author: faust $ */ -#include -#include -#include -#include +#include +#include #include -using namespace std; - #include "settings.h" -#include "common.h" +#include "stg_logger.h" +#include "dotconfpp.h" + +using namespace std; //----------------------------------------------------------------------------- SETTINGS::SETTINGS() : confDir("/etc/stargazer"), - scriptDir("/etc/stargazer"), + scriptsDir("/etc/stargazer"), pidFile("/var/run/stargazer.pid"), monitoring(false), detailStatWritePeriod(dsPeriod_1_6), @@ -57,14 +56,14 @@ SETTINGS::SETTINGS() dayFeeIsLastDay(false), writeFreeMbTraffCost(false), showFeeInCash(true), + messageTimeout(0), logger(GetStgLogger()) { } //----------------------------------------------------------------------------- SETTINGS::SETTINGS(const std::string & cd) : confDir(cd), - scriptDir(cd), - pidFile(), + scriptsDir(cd), monitoring(false), detailStatWritePeriod(dsPeriod_1_6), statWritePeriod(10), @@ -78,29 +77,31 @@ SETTINGS::SETTINGS(const std::string & cd) dayFeeIsLastDay(false), writeFreeMbTraffCost(false), showFeeInCash(true), + messageTimeout(0), logger(GetStgLogger()) { } //----------------------------------------------------------------------------- SETTINGS::SETTINGS(const SETTINGS & rval) : confDir(rval.confDir), - scriptDir(rval.scriptDir), + scriptsDir(rval.scriptsDir), + pidFile(rval.pidFile), + monitoring(rval.monitoring), detailStatWritePeriod(dsPeriod_1_6), statWritePeriod(10), + stgExecMsgKey(rval.stgExecMsgKey), + executersNum(rval.executersNum), + fullFee(rval.fullFee), dayFee(0), dayResetTraff(0), + spreadFee(rval.spreadFee), freeMbAllowInet(false), dayFeeIsLastDay(false), writeFreeMbTraffCost(false), + showFeeInCash(rval.showFeeInCash), + messageTimeout(rval.messageTimeout), logger(GetStgLogger()) { -spreadFee = rval.spreadFee; -pidFile = rval.pidFile; -stgExecMsgKey = rval.stgExecMsgKey; -executersNum = rval.executersNum; -showFeeInCash = rval.showFeeInCash; -fullFee = rval.fullFee; -monitoring = rval.monitoring; } //----------------------------------------------------------------------------- SETTINGS::~SETTINGS() @@ -126,8 +127,6 @@ return -1; //----------------------------------------------------------------------------- int SETTINGS::ParseInt(const string & value, int * val) { -/*char *res; -*val = strtol(value.c_str(), &res, 10);*/ if (str2x(value, *val)) { strError = "Cannot convert \'" + value + "\' to integer."; @@ -136,6 +135,16 @@ if (str2x(value, *val)) return 0; } //----------------------------------------------------------------------------- +int SETTINGS::ParseUnsigned(const string & value, unsigned * val) +{ +if (str2x(value, *val)) + { + strError = "Cannot convert \'" + value + "\' to unsigned integer."; + return -1; + } +return 0; +} +//----------------------------------------------------------------------------- int SETTINGS::ParseIntInRange(const string & value, int min, int max, int * val) { if (ParseInt(value, val) != 0) @@ -147,13 +156,25 @@ if (*val < min || *val > max) return -1; } +return 0; +} +//----------------------------------------------------------------------------- +int SETTINGS::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::ParseModuleSettings(const DOTCONFDocumentNode * node, vector * params) { -/*if (!node) - return 0;*/ const DOTCONFDocumentNode * childNode; PARAM_VALUE pv; const char * value; @@ -179,34 +200,18 @@ while (childNode) { pv.param = childNode->getName(); int i = 0; - while ((value = childNode->getValue(i)) != NULL) + while ((value = childNode->getValue(i++)) != NULL) { - //printfd(__FILE__, "--> param=\'%s\' value=\'%s\'\n", childNode->getName(), value); pv.value.push_back(value); - i++; } params->push_back(pv); pv.value.clear(); childNode = childNode->getNextNode(); } -/*for (unsigned i = 0; i < params->size(); i++) - { - printfd(__FILE__, "param \'%s\'\n", (*params)[i].param.c_str()); - for (unsigned j = 0; j < (*params)[i].value.size(); j++) - { - printfd(__FILE__, "value \'%s\'\n", (*params)[i].value[j].c_str()); - } - }*/ - return 0; } //----------------------------------------------------------------------------- -string SETTINGS::GetStrError() const -{ -return strError; -} -//----------------------------------------------------------------------------- void SETTINGS::ErrorCallback(void * data, const char * buf) { printfd(__FILE__, buf); @@ -239,8 +244,6 @@ conf.setErrorCallback(SETTINGS::ErrorCallback, this); conf.setRequiredOptionNames(requiredOptions); string confFile = confDir + "/stargazer.conf"; -//printfd(__FILE__, "Conffile: %s\n", confFile.c_str()); - if(conf.setContent(confFile.c_str()) != 0) { strError = "Cannot read file " + confFile; @@ -253,32 +256,27 @@ while (node) { if (strcasecmp(node->getName(), "ScriptDir") == 0) { - scriptDir = node->getValue(0); - //printfd(__FILE__, "LogFile: %s\n", logFile.c_str()); + scriptsDir = node->getValue(0); } if (strcasecmp(node->getName(), "LogFile") == 0) { logFile = node->getValue(0); - //printfd(__FILE__, "LogFile: %s\n", logFile.c_str()); } if (strcasecmp(node->getName(), "PIDFile") == 0) { pidFile = node->getValue(0); - //printfd(__FILE__, "PIDFile: %s\n", pidFile.c_str()); } if (strcasecmp(node->getName(), "ModulesPath") == 0) { modulesPath = node->getValue(0); - //printfd(__FILE__, "ModulesPath: %s\n", logFile.c_str()); } if (strcasecmp(node->getName(), "Rules") == 0) { rules = node->getValue(0); - //printfd(__FILE__, "Rules: %s\n", rules.c_str()); } if (strcasecmp(node->getName(), "DetailStatWritePeriod") == 0) @@ -288,17 +286,15 @@ while (node) strError = "Incorrect DetailStatWritePeriod value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "DetailStatWritePeriod: %d\n", detailStatWritePeriod); } if (strcasecmp(node->getName(), "StatWritePeriod") == 0) { - if (ParseIntInRange(node->getValue(0), 1, 1440, &statWritePeriod) != 0) + if (ParseUnsignedInRange(node->getValue(0), 1, 1440, &statWritePeriod) != 0) { strError = "Incorrect StatWritePeriod value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "StatWritePeriod: %d\n", statWritePeriod); } if (strcasecmp(node->getName(), "ExecMsgKey") == 0) @@ -312,32 +308,20 @@ while (node) if (strcasecmp(node->getName(), "ExecutersNum") == 0) { - if (ParseIntInRange(node->getValue(0), 1, 1024, &executersNum) != 0) + if (ParseUnsignedInRange(node->getValue(0), 1, 1024, &executersNum) != 0) { strError = "Incorrect ExecutersNum value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "DayResetTraff: %d\n", dayResetTraff); } - /*if (strcasecmp(node->getName(), "ExecutersWaitTimeout") == 0) - { - if (ParseIntInRange(node->getValue(0), 1, 600, &executersWaitTimeout) != 0) - { - strError = "Incorrect ExecutersWaitTimeout value: \'" + string(node->getValue(0)) + "\'"; - return -1; - } - //printfd(__FILE__, "DayResetTraff: %d\n", dayResetTraff); - }*/ - if (strcasecmp(node->getName(), "DayFee") == 0) { - if (ParseIntInRange(node->getValue(0), 0, 31, &dayFee) != 0) + if (ParseUnsignedInRange(node->getValue(0), 0, 31, &dayFee) != 0) { strError = "Incorrect DayFee value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "DayFee: %d\n", dayFee); } if (strcasecmp(node->getName(), "FullFee") == 0) @@ -347,17 +331,15 @@ while (node) strError = "Incorrect FullFee value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "DayFee: %d\n", dayFee); } if (strcasecmp(node->getName(), "DayResetTraff") == 0) { - if (ParseIntInRange(node->getValue(0), 0, 31, &dayResetTraff) != 0) + if (ParseUnsignedInRange(node->getValue(0), 0, 31, &dayResetTraff) != 0) { strError = "Incorrect DayResetTraff value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "DayResetTraff: %d\n", dayResetTraff); } if (strcasecmp(node->getName(), "SpreadFee") == 0) @@ -367,7 +349,6 @@ while (node) strError = "Incorrect SpreadFee value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "SpreadFee: %d\n", spreadFee); } if (strcasecmp(node->getName(), "FreeMbAllowInet") == 0) @@ -377,7 +358,6 @@ while (node) strError = "Incorrect FreeMbAllowInet value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "FreeMbAllowInet: %d\n", freeMbAllowInet); } if (strcasecmp(node->getName(), "DayFeeIsLastDay") == 0) @@ -387,7 +367,6 @@ while (node) strError = "Incorrect DayFeeIsLastDay value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "DayFeeIsLastDay: %d\n", dayFeeIsLastDay); } if (strcasecmp(node->getName(), "WriteFreeMbTraffCost") == 0) @@ -397,7 +376,6 @@ while (node) strError = "Incorrect WriteFreeMbTraffCost value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "WriteFreeMbTraffCost: %d\n", writeFreeMbTraffCost); } if (strcasecmp(node->getName(), "ShowFeeInCash") == 0) @@ -407,7 +385,6 @@ while (node) strError = "Incorrect ShowFeeInCash value: \'" + string(node->getValue(0)) + "\'"; return -1; } - //printfd(__FILE__, "ShowFeeInCash: %d\n", showFeeInCash); } if (strcasecmp(node->getName(), "MonitorDir") == 0) @@ -422,9 +399,17 @@ while (node) } } + if (strcasecmp(node->getName(), "MessageTimeout") == 0) + { + if (ParseUnsigned(node->getValue(0), &messageTimeout) != 0) + { + strError = "Incorrect MessageTimeout value: \'" + string(node->getValue(0)) + "\'"; + return -1; + } + } + if (strcasecmp(node->getName(), "DirNames") == 0) { - // íÙ ×ÎÕÔÒÉ ÓÅËÃÉÉ DirNames const DOTCONFDocumentNode * child = node->getChildNode(); if (child) { @@ -437,7 +422,6 @@ while (node) if (dirNameNode && dirNameNode->getValue(0)) { dirName[i] = dirNameNode->getValue(0); - //printfd(__FILE__, "dirName[%d]: %s\n", i, dirName[i].c_str()); } } } @@ -445,45 +429,33 @@ while (node) if (strcasecmp(node->getName(), "StoreModule") == 0) { - // íÙ ×ÎÕÔÒÉ ÓÅËÃÉÉ StoreModule - //printfd(__FILE__, "StoreModule\n"); - if (node->getValue(1)) { - // StoreModule ÄÏÌÖÅÎ ÉÍÅÔØ 1 ÁÔÒÉÂÕÔ strError = "Unexpected \'" + string(node->getValue(1)) + "\'."; return -1; } if (storeModulesCount) { - // äÏÌÖÅÎ ÂÙÔØ ÔÏÌØËÏ ÏÄÉÎ ÍÏÄÕÌØ StoreModule! strError = "Should be only one StoreModule."; return -1; } storeModulesCount++; - //storeModuleSettings.clear(); //TODO To make constructor - //printfd(__FILE__, "StoreModule %s\n", node->getValue()); storeModuleSettings.moduleName = node->getValue(0); ParseModuleSettings(node, &storeModuleSettings.moduleParams); } - // þÉÔÁÅÍ ÎÁÓÔÒÏÊËÉ ×ÓÅÈ ÏÓÔÁ×ÛÉÈÓÑ ÍÏÄÕÌÅÊ. if (strcasecmp(node->getName(), "Modules") == 0) { - // íÙ ×ÎÕÔÒÉ ÓÅËÃÉÉ Modules if (node->getValue(0)) { - // Modules ÎÅ ÄÏÌÖÅÎ ÉÍÅÔØ ÁÔÒÉÂÕÏ× strError = "Unexpected \'" + string(node->getValue(0)) + "\'."; return -1; } const DOTCONFDocumentNode * child = node->getChildNode(); while (child) { - // íÙ ×ÎÕÔÒÉ ÓÅËÃÉÉ - //printfd(__FILE__, "Module \'%s\'\n", child->getValue(0)); if (strcasecmp(child->getName(), "Module") != 0) { child = child->getNextNode(); @@ -504,9 +476,6 @@ while (node) node = node->getNextNode(); } -//sort(modulesSettings.begin(), modulesSettings.end()); -//modulesSettings.erase(unique(modulesSettings.begin(), modulesSettings.end()), modulesSettings.end()); - return 0; } //----------------------------------------------------------------------------- @@ -536,23 +505,3 @@ else if (detailStatPeriodStr == "1/6") return -1; } //----------------------------------------------------------------------------- -int SETTINGS::Reload () -{ -return ReadSettings(); -} -//----------------------------------------------------------------------------- -const MODULE_SETTINGS & SETTINGS::GetStoreModuleSettings() const -{ -return storeModuleSettings; -} -//----------------------------------------------------------------------------- -const vector & SETTINGS::GetModulesSettings() const -{ -return modulesSettings; -} -//----------------------------------------------------------------------------- -/*int SETTINGS::GetExecutersWaitTimeout() const -{ -return executersWaitTimeout; -}*/ -//-----------------------------------------------------------------------------