X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/01c8efc4c28d6f4fb844a4d70e53000104a049e9..1dd842650e8b3bdf5e80dcfe98e484556386e3fa:/projects/stargazer/settings_impl.cpp diff --git a/projects/stargazer/settings_impl.cpp b/projects/stargazer/settings_impl.cpp index b547c4a7..0cf9501b 100644 --- a/projects/stargazer/settings_impl.cpp +++ b/projects/stargazer/settings_impl.cpp @@ -32,49 +32,17 @@ $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() - : 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(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; + 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 * params) +int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector * 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(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") {