X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/12aae76fbeaa3dc91ab5ecad5531a2c1925340d2..db323584230f6d5b4a6e16574fd0baadc9d465e5:/projects/stargazer/settings_impl.cpp?ds=sidebyside diff --git a/projects/stargazer/settings_impl.cpp b/projects/stargazer/settings_impl.cpp index 0ee78fa8..92670cb5 100644 --- a/projects/stargazer/settings_impl.cpp +++ b/projects/stargazer/settings_impl.cpp @@ -32,17 +32,24 @@ $Author: faust $ #include #include +#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"), + : SETTINGS(), + 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 +64,25 @@ 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), + : SETTINGS(), + 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,97 +97,47 @@ 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), + : SETTINGS(), + 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()) { } //----------------------------------------------------------------------------- -int SETTINGS_IMPL::ParseYesNo(const string & value, bool * val) -{ -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(value, *val)) - { - strError = "Cannot convert \'" + value + "\' to integer."; - return -1; - } -return 0; -} -//----------------------------------------------------------------------------- -int SETTINGS_IMPL::ParseUnsigned(const string & value, unsigned * val) -{ -if (str2x(value, *val)) - { - strError = "Cannot convert \'" + value + "\' to unsigned integer."; - return -1; - } -return 0; -} -//----------------------------------------------------------------------------- -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 * params) { const DOTCONFDocumentNode * childNode; @@ -210,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(data); - settings->logger(buf); + settings->logger("%s", buf); } //----------------------------------------------------------------------------- int SETTINGS_IMPL::ReadSettings() @@ -404,12 +373,31 @@ while (node) } } + if (strcasecmp(node->getName(), "FeeChargeType") == 0) + { + if (ParseUnsignedInRange(node->getValue(0), 0, 3, &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]; @@ -469,6 +457,13 @@ 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(); } @@ -500,4 +495,4 @@ else if (detailStatPeriodStr == "1/6") return -1; } -//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- \ No newline at end of file