X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/2f3bde9a475cb3f6df08dd20def6f241a6f19ab5..cf7325e6b3244c7174424fa71e1972523324a69b:/projects/stargazer/plugins/configuration/sgconfig/parser.cpp diff --git a/projects/stargazer/plugins/configuration/sgconfig/parser.cpp b/projects/stargazer/plugins/configuration/sgconfig/parser.cpp index 4658d56f..a7c79c00 100644 --- a/projects/stargazer/plugins/configuration/sgconfig/parser.cpp +++ b/projects/stargazer/plugins/configuration/sgconfig/parser.cpp @@ -1,15 +1,20 @@ -#include <string.h> -#include <errno.h> #include <stdio.h> #include <sys/utsname.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> + +#include <cstring> +#include <cerrno> #include <sstream> +#include "stg/version.h" +#include "stg/tariffs.h" +#include "stg/user_property.h" +#include "stg/settings.h" +#include "stg/logger.h" #include "parser.h" -#include "version.h" #define UNAME_LEN (256) //----------------------------------------------------------------------------- @@ -59,13 +64,13 @@ answerList->push_back("<ServerInfo>"); sprintf(s, "<version value=\"%s\"/>", SERVER_VERSION); answerList->push_back(s); -sprintf(s, "<tariff_num value=\"%d\"/>", tariffs->GetTariffsNum()); +sprintf(s, "<tariff_num value=\"%llu\"/>", static_cast<unsigned long long>(tariffs->Count())); answerList->push_back(s); sprintf(s, "<tariff value=\"%d\"/>", 2); answerList->push_back(s); -sprintf(s, "<users_num value=\"%d\"/>", users->GetUserNum()); +sprintf(s, "<users_num value=\"%llu\"/>", static_cast<unsigned long long>(users->Count())); answerList->push_back(s); sprintf(s, "<uname value=\"%s\"/>", un); @@ -79,7 +84,7 @@ answerList->push_back(s); for (int i = 0; i< DIR_NUM; i++) { - string dn2e; + std::string dn2e; Encode12str(dn2e, settings->GetDirName(i)); sprintf(s, "<dir_name_%d value=\"%s\"/>", i, dn2e.c_str()); answerList->push_back(s); @@ -90,11 +95,6 @@ answerList->push_back("</ServerInfo>"); //----------------------------------------------------------------------------- // GET USER //----------------------------------------------------------------------------- -PARSER_GET_USER::PARSER_GET_USER() -{ - -} -//----------------------------------------------------------------------------- int PARSER_GET_USER::ParseStart(void *, const char *el, const char **attr) { if (strcasecmp(el, "GetUser") == 0) @@ -124,17 +124,16 @@ return -1; //----------------------------------------------------------------------------- void PARSER_GET_USER::CreateAnswer() { -string s; -string enc; +std::string s; +std::string enc; -user_iter u; +USER_PTR u; answerList->erase(answerList->begin(), answerList->end()); if (users->FindByName(login, &u)) { - s = "<user result=\"error\"/>"; - answerList->push_back(s); + answerList->push_back("<user result=\"error\" reason=\"User not found.\"/>"); return; } @@ -144,65 +143,65 @@ answerList->push_back(s); s = "<login value=\"" + u->GetLogin() + "\"/>"; answerList->push_back(s); -if (currAdmin.GetPriv()->userConf || currAdmin.GetPriv()->userPasswd) - s = "<password value=\"" + u->property.password.Get() + "\" />"; +if (currAdmin->GetPriv()->userConf || currAdmin->GetPriv()->userPasswd) + s = "<password value=\"" + u->GetProperty().password.Get() + "\" />"; else s = "<password value=\"++++++\"/>"; answerList->push_back(s); -strprintf(&s, "<cash value=\"%f\" />", u->property.cash.Get()); +strprintf(&s, "<cash value=\"%f\" />", u->GetProperty().cash.Get()); answerList->push_back(s); -strprintf(&s, "<freemb value=\"%f\" />", u->property.freeMb.Get()); +strprintf(&s, "<freemb value=\"%f\" />", u->GetProperty().freeMb.Get()); answerList->push_back(s); -strprintf(&s, "<credit value=\"%f\" />", u->property.credit.Get()); +strprintf(&s, "<credit value=\"%f\" />", u->GetProperty().credit.Get()); answerList->push_back(s); -if (u->property.nextTariff.Get() != "") +if (u->GetProperty().nextTariff.Get() != "") { strprintf(&s, "<tariff value=\"%s/%s\" />", - u->property.tariffName.Get().c_str(), - u->property.nextTariff.Get().c_str()); + u->GetProperty().tariffName.Get().c_str(), + u->GetProperty().nextTariff.Get().c_str()); } else { strprintf(&s, "<tariff value=\"%s\" />", - u->property.tariffName.Get().c_str()); + u->GetProperty().tariffName.Get().c_str()); } answerList->push_back(s); -Encode12str(enc, u->property.note); +Encode12str(enc, u->GetProperty().note); s = "<note value=\"" + enc + "\" />"; answerList->push_back(s); -Encode12str(enc, u->property.phone); +Encode12str(enc, u->GetProperty().phone); s = "<phone value=\"" + enc + "\" />"; answerList->push_back(s); -Encode12str(enc, u->property.address); +Encode12str(enc, u->GetProperty().address); s = "<address value=\"" + enc + "\" />"; answerList->push_back(s); -Encode12str(enc, u->property.email); +Encode12str(enc, u->GetProperty().email); s = "<email value=\"" + enc + "\" />"; answerList->push_back(s); -vector<USER_PROPERTY_LOGGED<string> *> userdata; -userdata.push_back(u->property.userdata0.GetPointer()); -userdata.push_back(u->property.userdata1.GetPointer()); -userdata.push_back(u->property.userdata2.GetPointer()); -userdata.push_back(u->property.userdata3.GetPointer()); -userdata.push_back(u->property.userdata4.GetPointer()); -userdata.push_back(u->property.userdata5.GetPointer()); -userdata.push_back(u->property.userdata6.GetPointer()); -userdata.push_back(u->property.userdata7.GetPointer()); -userdata.push_back(u->property.userdata8.GetPointer()); -userdata.push_back(u->property.userdata9.GetPointer()); +std::vector<USER_PROPERTY_LOGGED<std::string> *> userdata; +userdata.push_back(u->GetProperty().userdata0.GetPointer()); +userdata.push_back(u->GetProperty().userdata1.GetPointer()); +userdata.push_back(u->GetProperty().userdata2.GetPointer()); +userdata.push_back(u->GetProperty().userdata3.GetPointer()); +userdata.push_back(u->GetProperty().userdata4.GetPointer()); +userdata.push_back(u->GetProperty().userdata5.GetPointer()); +userdata.push_back(u->GetProperty().userdata6.GetPointer()); +userdata.push_back(u->GetProperty().userdata7.GetPointer()); +userdata.push_back(u->GetProperty().userdata8.GetPointer()); +userdata.push_back(u->GetProperty().userdata9.GetPointer()); -string tmpI; +std::string tmpI; for (unsigned i = 0; i < userdata.size(); i++) { Encode12str(enc, userdata[i]->Get()); @@ -210,18 +209,18 @@ for (unsigned i = 0; i < userdata.size(); i++) answerList->push_back(s); } -Encode12str(enc, u->property.realName); +Encode12str(enc, u->GetProperty().realName); s = "<name value=\"" + enc + "\" />"; answerList->push_back(s); -Encode12str(enc, u->property.group); +Encode12str(enc, u->GetProperty().group); s = "<GROUP value=\"" + enc + "\" />"; answerList->push_back(s); strprintf(&s, "<status value=\"%d\" />", u->GetConnected()); answerList->push_back(s); -strprintf(&s, "<aonline value=\"%d\" />", u->property.alwaysOnline.Get()); +strprintf(&s, "<aonline value=\"%d\" />", u->GetProperty().alwaysOnline.Get()); answerList->push_back(s); strprintf(&s, "<currip value=\"%s\" />", inet_ntostring(u->GetCurrIP()).c_str()); @@ -230,8 +229,8 @@ answerList->push_back(s); strprintf(&s, "<PingTime value=\"%lu\" />", u->GetPingTime()); answerList->push_back(s); -stringstream sstr; -sstr << u->property.ips.Get(); +std::ostringstream sstr; +sstr << u->GetProperty().ips.Get(); strprintf(&s, "<ip value=\"%s\" />", sstr.str().c_str()); answerList->push_back(s); @@ -241,12 +240,12 @@ char st[50]; sprintf(ss, "<traff"); DIR_TRAFF upload; DIR_TRAFF download; -download = u->property.down.Get(); -upload = u->property.up.Get(); +download = u->GetProperty().down.Get(); +upload = u->GetProperty().up.Get(); for (int j = 0; j < DIR_NUM; j++) { - string s; + std::string s; x2str(upload[j], s); sprintf(st, " MU%d=\"%s\"", j, s.c_str()); strcat(ss, st); @@ -265,25 +264,32 @@ strcat(ss, " />"); answerList->push_back(ss); delete[] ss; -strprintf(&s, "<down value=\"%d\" />", u->property.disabled.Get()); +strprintf(&s, "<down value=\"%d\" />", u->GetProperty().disabled.Get()); answerList->push_back(s); -strprintf(&s, "<DisableDetailStat value=\"%d\" />", u->property.disabledDetailStat.Get()); +strprintf(&s, "<DisableDetailStat value=\"%d\" />", u->GetProperty().disabledDetailStat.Get()); answerList->push_back(s); -strprintf(&s, "<passive value=\"%d\" />", u->property.passive.Get()); +strprintf(&s, "<passive value=\"%d\" />", u->GetProperty().passive.Get()); answerList->push_back(s); -strprintf(&s, "<LastCash value=\"%f\" />", u->property.lastCashAdd.Get()); +strprintf(&s, "<LastCash value=\"%f\" />", u->GetProperty().lastCashAdd.Get()); answerList->push_back(s); -strprintf(&s, "<LastTimeCash value=\"%ld\" />", u->property.lastCashAddTime.Get()); +strprintf(&s, "<LastTimeCash value=\"%ld\" />", u->GetProperty().lastCashAddTime.Get()); answerList->push_back(s); -strprintf(&s, "<LastActivityTime value=\"%ld\" />", u->property.lastActivityTime.Get()); +strprintf(&s, "<LastActivityTime value=\"%ld\" />", u->GetProperty().lastActivityTime.Get()); answerList->push_back(s); -strprintf(&s, "<CreditExpire value=\"%ld\" />", u->property.creditExpire.Get()); +strprintf(&s, "<CreditExpire value=\"%ld\" />", u->GetProperty().creditExpire.Get()); +answerList->push_back(s); + +s = "<AuthorizedBy>"; +std::vector<std::string> list(u->GetAuthorizers()); +for (std::vector<std::string>::const_iterator it = list.begin(); it != list.end(); ++it) + s += "<Auth name=\"" + *it + "\"/>"; +s += "</AuthorizedBy>"; answerList->push_back(s); strprintf(&s, "</user>"); @@ -292,12 +298,6 @@ answerList->push_back(s); //----------------------------------------------------------------------------- // GET USERS //----------------------------------------------------------------------------- -PARSER_GET_USERS::PARSER_GET_USERS() - : lastUserUpdateTime(0), - lastUpdateFound(false) -{ -} -//----------------------------------------------------------------------------- int PARSER_GET_USERS::ParseStart(void *, const char *el, const char ** attr) { /*if (attr && *attr && *(attr+1)) @@ -348,18 +348,18 @@ void PARSER_GET_USERS::CreateAnswer() { answerList->erase(answerList->begin(), answerList->end()); -string s; -string userStart; -string traffStart; -string traffMiddle; -string traffFinish; -string middle; -string userFinish; +std::string s; +std::string userStart; +std::string traffStart; +std::string traffMiddle; +std::string traffFinish; +std::string middle; +std::string userFinish; -string enc; +std::string enc; -user_iter u; +USER_PTR u; int h = users->OpenSearch(); if (!h) @@ -368,7 +368,7 @@ if (!h) users->CloseSearch(h); return; } -string updateTime; +std::string updateTime; x2str(time(NULL), updateTime); if (lastUpdateFound) @@ -385,98 +385,98 @@ while (1) userStart = "<user login=\"" + u->GetLogin() + "\">"; middle = ""; - if (u->property.password.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().password.ModificationTime() > lastUserUpdateTime) { - if (currAdmin.GetPriv()->userConf || currAdmin.GetPriv()->userPasswd) - s = "<password value=\"" + u->property.password.Get() + "\" />"; + if (currAdmin->GetPriv()->userConf || currAdmin->GetPriv()->userPasswd) + s = "<password value=\"" + u->GetProperty().password.Get() + "\" />"; else s = "<password value=\"++++++\"/>"; middle += s; } - if (u->property.cash.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().cash.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<cash value=\"%f\" />", u->property.cash.Get()); + strprintf(&s, "<cash value=\"%f\" />", u->GetProperty().cash.Get()); middle += s; - //printfd(__FILE__, "cash value=\"%f\"\n", u->property.cash.Get()); + //printfd(__FILE__, "cash value=\"%f\"\n", u->GetProperty().cash.Get()); } - if (u->property.freeMb.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().freeMb.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<freemb value=\"%f\" />", u->property.freeMb.Get()); + strprintf(&s, "<freemb value=\"%f\" />", u->GetProperty().freeMb.Get()); middle += s; } - if (u->property.credit.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().credit.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<credit value=\"%f\" />", u->property.credit.Get()); + strprintf(&s, "<credit value=\"%f\" />", u->GetProperty().credit.Get()); middle += s; } - if (u->property.nextTariff.Get() != "") + if (u->GetProperty().nextTariff.Get() != "") { - if (u->property.tariffName.ModificationTime() > lastUserUpdateTime - || u->property.nextTariff.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().tariffName.ModificationTime() > lastUserUpdateTime + || u->GetProperty().nextTariff.ModificationTime() > lastUserUpdateTime) { strprintf(&s, "<tariff value=\"%s/%s\" />", - u->property.tariffName.Get().c_str(), - u->property.nextTariff.Get().c_str()); + u->GetProperty().tariffName.Get().c_str(), + u->GetProperty().nextTariff.Get().c_str()); middle += s; } } else { - if (u->property.tariffName.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().tariffName.ModificationTime() > lastUserUpdateTime) { strprintf(&s, "<tariff value=\"%s\" />", - u->property.tariffName.Get().c_str()); + u->GetProperty().tariffName.Get().c_str()); middle += s; } } - if (u->property.note.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().note.ModificationTime() > lastUserUpdateTime) { - Encode12str(enc, u->property.note); + Encode12str(enc, u->GetProperty().note); strprintf(&s, "<note value=\"%s\" />", enc.c_str()); middle += s; } - if (u->property.phone.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().phone.ModificationTime() > lastUserUpdateTime) { - Encode12str(enc, u->property.phone); + Encode12str(enc, u->GetProperty().phone); strprintf(&s, "<phone value=\"%s\" />", enc.c_str()); middle += s; } - if (u->property.address.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().address.ModificationTime() > lastUserUpdateTime) { - Encode12str(enc, u->property.address); + Encode12str(enc, u->GetProperty().address); strprintf(&s, "<address value=\"%s\" />", enc.c_str()); middle += s; } - if (u->property.email.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().email.ModificationTime() > lastUserUpdateTime) { - Encode12str(enc, u->property.email); + Encode12str(enc, u->GetProperty().email); strprintf(&s, "<email value=\"%s\" />", enc.c_str()); middle += s; } - vector<USER_PROPERTY_LOGGED<string> *> userdata; - userdata.push_back(u->property.userdata0.GetPointer()); - userdata.push_back(u->property.userdata1.GetPointer()); - userdata.push_back(u->property.userdata2.GetPointer()); - userdata.push_back(u->property.userdata3.GetPointer()); - userdata.push_back(u->property.userdata4.GetPointer()); - userdata.push_back(u->property.userdata5.GetPointer()); - userdata.push_back(u->property.userdata6.GetPointer()); - userdata.push_back(u->property.userdata7.GetPointer()); - userdata.push_back(u->property.userdata8.GetPointer()); - userdata.push_back(u->property.userdata9.GetPointer()); + std::vector<USER_PROPERTY_LOGGED<std::string> *> userdata; + userdata.push_back(u->GetProperty().userdata0.GetPointer()); + userdata.push_back(u->GetProperty().userdata1.GetPointer()); + userdata.push_back(u->GetProperty().userdata2.GetPointer()); + userdata.push_back(u->GetProperty().userdata3.GetPointer()); + userdata.push_back(u->GetProperty().userdata4.GetPointer()); + userdata.push_back(u->GetProperty().userdata5.GetPointer()); + userdata.push_back(u->GetProperty().userdata6.GetPointer()); + userdata.push_back(u->GetProperty().userdata7.GetPointer()); + userdata.push_back(u->GetProperty().userdata8.GetPointer()); + userdata.push_back(u->GetProperty().userdata9.GetPointer()); - string tmpI; + std::string tmpI; for (unsigned i = 0; i < userdata.size(); i++) { if (userdata[i]->ModificationTime() > lastUserUpdateTime) @@ -487,23 +487,23 @@ while (1) } } - if (u->property.realName.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().realName.ModificationTime() > lastUserUpdateTime) { - Encode12str(enc, u->property.realName); + Encode12str(enc, u->GetProperty().realName); strprintf(&s, "<name value=\"%s\" />", enc.c_str()); middle += s; } - if (u->property.group.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().group.ModificationTime() > lastUserUpdateTime) { - Encode12str(enc, u->property.group); + Encode12str(enc, u->GetProperty().group); strprintf(&s, "<GROUP value=\"%s\" />", enc.c_str()); middle += s; } - if (u->property.alwaysOnline.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().alwaysOnline.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<aonline value=\"%d\" />", u->property.alwaysOnline.Get()); + strprintf(&s, "<aonline value=\"%d\" />", u->GetProperty().alwaysOnline.Get()); middle += s; } @@ -526,10 +526,10 @@ while (1) middle += s; } - if (u->property.ips.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().ips.ModificationTime() > lastUserUpdateTime) { - stringstream sstr; - sstr << u->property.ips.Get(); + std::ostringstream sstr; + sstr << u->GetProperty().ips.Get(); strprintf(&s, "<ip value=\"%s\" />", sstr.str().c_str()); middle += s; } @@ -538,22 +538,22 @@ while (1) traffStart = "<traff"; DIR_TRAFF upload; DIR_TRAFF download; - download = u->property.down.Get(); - upload = u->property.up.Get(); + download = u->GetProperty().down.Get(); + upload = u->GetProperty().up.Get(); traffMiddle = ""; - if (u->property.up.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().up.ModificationTime() > lastUserUpdateTime) { for (int j = 0; j < DIR_NUM; j++) { - string s; + std::string s; x2str(upload[j], s); sprintf(st, " MU%d=\"%s\" ", j, s.c_str()); traffMiddle += st; } } - if (u->property.down.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().down.ModificationTime() > lastUserUpdateTime) { for (int j = 0; j < DIR_NUM; j++) { @@ -571,48 +571,48 @@ while (1) middle += traffFinish; } - if (u->property.disabled.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().disabled.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<down value=\"%d\" />", u->property.disabled.Get()); + strprintf(&s, "<down value=\"%d\" />", u->GetProperty().disabled.Get()); middle += s; } - if (u->property.disabledDetailStat.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().disabledDetailStat.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<DisableDetailStat value=\"%d\" />", u->property.disabledDetailStat.Get()); + strprintf(&s, "<DisableDetailStat value=\"%d\" />", u->GetProperty().disabledDetailStat.Get()); middle += s; } //printfd(__FILE__, ">>>>> %s\n", s.c_str()); - if (u->property.passive.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().passive.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<passive value=\"%d\" />", u->property.passive.Get()); + strprintf(&s, "<passive value=\"%d\" />", u->GetProperty().passive.Get()); middle += s; } - if (u->property.lastCashAdd.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().lastCashAdd.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<LastCash value=\"%f\" />", u->property.lastCashAdd.Get()); + strprintf(&s, "<LastCash value=\"%f\" />", u->GetProperty().lastCashAdd.Get()); middle += s; } - if (u->property.lastCashAddTime.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().lastCashAddTime.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<LastTimeCash value=\"%ld\" />", u->property.lastCashAddTime.Get()); + strprintf(&s, "<LastTimeCash value=\"%ld\" />", u->GetProperty().lastCashAddTime.Get()); middle += s; } - if (u->property.lastActivityTime.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().lastActivityTime.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<LastActivityTime value=\"%ld\" />", u->property.lastActivityTime.Get()); + strprintf(&s, "<LastActivityTime value=\"%ld\" />", u->GetProperty().lastActivityTime.Get()); middle += s; } - if (u->property.creditExpire.ModificationTime() > lastUserUpdateTime) + if (u->GetProperty().creditExpire.ModificationTime() > lastUserUpdateTime) { - strprintf(&s, "<CreditExpire value=\"%ld\" />", u->property.creditExpire.Get()); + strprintf(&s, "<CreditExpire value=\"%ld\" />", u->GetProperty().creditExpire.Get()); middle += s; } @@ -639,11 +639,6 @@ answerList->push_back("</Users>"); //----------------------------------------------------------------------------- // ADD USER //----------------------------------------------------------------------------- -PARSER_ADD_USER::PARSER_ADD_USER() -{ -depth = 0; -} -//----------------------------------------------------------------------------- int PARSER_ADD_USER::ParseStart(void *, const char *el, const char **attr) { depth++; @@ -705,7 +700,7 @@ else //----------------------------------------------------------------------------- int PARSER_ADD_USER::CheckUserData() { -user_iter u; +USER_PTR u; if (users->FindByName(login, &u)) { return users->Add(login, currAdmin); @@ -716,10 +711,13 @@ return -1; // PARSER CHG USER //----------------------------------------------------------------------------- PARSER_CHG_USER::PARSER_CHG_USER() - : usr(NULL), + : BASE_PARSER(), + usr(NULL), ucr(NULL), upr(NULL), downr(NULL), + cashMsg(), + login(), cashMustBeAdded(false), res(0) { @@ -750,11 +748,11 @@ ucr = new USER_CONF_RES; upr = new RESETABLE<uint64_t>[DIR_NUM]; downr = new RESETABLE<uint64_t>[DIR_NUM]; -}; +} //----------------------------------------------------------------------------- -string PARSER_CHG_USER::EncChar2String(const char * strEnc) +std::string PARSER_CHG_USER::EncChar2String(const char * strEnc) { -string str; +std::string str; Decode21str(str, strEnc); return str; } @@ -925,7 +923,7 @@ else int dir; DIR_TRAFF dtu; DIR_TRAFF dtd; - unsigned long long t = 0; + uint64_t t = 0; while (attr[j]) { dir = attr[j][2] - '0'; @@ -944,8 +942,6 @@ else } j+=2; } - usr->down = dtd; - usr->up = dtu; return 0; } @@ -1005,7 +1001,8 @@ switch (res) //----------------------------------------------------------------------------- int PARSER_CHG_USER::AplayChanges() { -user_iter u; +printfd(__FILE__, "PARSER_CHG_USER::AplayChanges()\n"); +USER_PTR u; res = 0; if (users->FindByName(login, &u)) @@ -1014,117 +1011,152 @@ if (users->FindByName(login, &u)) return -1; } -if (!ucr->ips.res_empty()) - if (!u->property.ips.Set(ucr->ips.const_data(), currAdmin, login, store)) +bool check = false; +bool alwaysOnline = u->GetProperty().alwaysOnline; +if (!ucr->alwaysOnline.empty()) + { + check = true; + alwaysOnline = ucr->alwaysOnline.const_data(); + } +bool onlyOneIP = u->GetProperty().ips.ConstData().OnlyOneIP(); +if (!ucr->ips.empty()) + { + check = true; + onlyOneIP = ucr->ips.const_data().OnlyOneIP(); + } + +if (check && alwaysOnline && !onlyOneIP) + { + printfd(__FILE__, "Requested change leads to a forbidden state: AlwaysOnline with multiple IP's\n"); + GetStgLogger()("%s Requested change leads to a forbidden state: AlwaysOnline with multiple IP's", currAdmin->GetLogStr().c_str()); + res = -1; + return -1; + } + +for (size_t i = 0; i < ucr->ips.const_data().Count(); ++i) + { + CONST_USER_PTR user; + uint32_t ip = ucr->ips.const_data().operator[](i).ip; + if (users->IsIPInUse(ip, login, &user)) + { + printfd(__FILE__, "Trying to assign an IP %s to '%s' that is already in use by '%s'\n", inet_ntostring(ip).c_str(), login.c_str(), user->GetLogin().c_str()); + GetStgLogger()("%s trying to assign an IP %s to '%s' that is currently in use by '%s'", currAdmin->GetLogStr().c_str(), inet_ntostring(ip).c_str(), login.c_str(), user->GetLogin().c_str()); res = -1; + return -1; + } + } -if (!ucr->address.res_empty()) - if (!u->property.address.Set(ucr->address.const_data(), currAdmin, login, store)) +if (!ucr->ips.empty()) + if (!u->GetProperty().ips.Set(ucr->ips.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->alwaysOnline.res_empty()) - if (!u->property.alwaysOnline.Set(ucr->alwaysOnline.const_data(), +if (!ucr->alwaysOnline.empty()) + if (!u->GetProperty().alwaysOnline.Set(ucr->alwaysOnline.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->creditExpire.res_empty()) - if (!u->property.creditExpire.Set(ucr->creditExpire.const_data(), +if (!ucr->address.empty()) + if (!u->GetProperty().address.Set(ucr->address.const_data(), currAdmin, login, store)) + res = -1; + +if (!ucr->creditExpire.empty()) + if (!u->GetProperty().creditExpire.Set(ucr->creditExpire.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->credit.res_empty()) - if (!u->property.credit.Set(ucr->credit.const_data(), currAdmin, login, store)) +if (!ucr->credit.empty()) + if (!u->GetProperty().credit.Set(ucr->credit.const_data(), currAdmin, login, store)) res = -1; -if (!usr->freeMb.res_empty()) - if (!u->property.freeMb.Set(usr->freeMb.const_data(), currAdmin, login, store)) +if (!usr->freeMb.empty()) + if (!u->GetProperty().freeMb.Set(usr->freeMb.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->disabled.res_empty()) - if (!u->property.disabled.Set(ucr->disabled.const_data(), currAdmin, login, store)) +if (!ucr->disabled.empty()) + if (!u->GetProperty().disabled.Set(ucr->disabled.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->disabledDetailStat.res_empty()) - if (!u->property.disabledDetailStat.Set(ucr->disabledDetailStat.const_data(), currAdmin, login, store)) +if (!ucr->disabledDetailStat.empty()) + if (!u->GetProperty().disabledDetailStat.Set(ucr->disabledDetailStat.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->email.res_empty()) - if (!u->property.email.Set(ucr->email.const_data(), currAdmin, login, store)) +if (!ucr->email.empty()) + if (!u->GetProperty().email.Set(ucr->email.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->group.res_empty()) - if (!u->property.group.Set(ucr->group.const_data(), currAdmin, login, store)) +if (!ucr->group.empty()) + if (!u->GetProperty().group.Set(ucr->group.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->note.res_empty()) - if (!u->property.note.Set(ucr->note.const_data(), currAdmin, login, store)) +if (!ucr->note.empty()) + if (!u->GetProperty().note.Set(ucr->note.const_data(), currAdmin, login, store)) res = -1; -vector<USER_PROPERTY_LOGGED<string> *> userdata; -userdata.push_back(u->property.userdata0.GetPointer()); -userdata.push_back(u->property.userdata1.GetPointer()); -userdata.push_back(u->property.userdata2.GetPointer()); -userdata.push_back(u->property.userdata3.GetPointer()); -userdata.push_back(u->property.userdata4.GetPointer()); -userdata.push_back(u->property.userdata5.GetPointer()); -userdata.push_back(u->property.userdata6.GetPointer()); -userdata.push_back(u->property.userdata7.GetPointer()); -userdata.push_back(u->property.userdata8.GetPointer()); -userdata.push_back(u->property.userdata9.GetPointer()); +std::vector<USER_PROPERTY_LOGGED<std::string> *> userdata; +userdata.push_back(u->GetProperty().userdata0.GetPointer()); +userdata.push_back(u->GetProperty().userdata1.GetPointer()); +userdata.push_back(u->GetProperty().userdata2.GetPointer()); +userdata.push_back(u->GetProperty().userdata3.GetPointer()); +userdata.push_back(u->GetProperty().userdata4.GetPointer()); +userdata.push_back(u->GetProperty().userdata5.GetPointer()); +userdata.push_back(u->GetProperty().userdata6.GetPointer()); +userdata.push_back(u->GetProperty().userdata7.GetPointer()); +userdata.push_back(u->GetProperty().userdata8.GetPointer()); +userdata.push_back(u->GetProperty().userdata9.GetPointer()); for (int i = 0; i < (int)userdata.size(); i++) { - if (!ucr->userdata[i].res_empty()) + if (!ucr->userdata[i].empty()) { if(!userdata[i]->Set(ucr->userdata[i].const_data(), currAdmin, login, store)) res = -1; } } -if (!ucr->passive.res_empty()) - if (!u->property.passive.Set(ucr->passive.const_data(), currAdmin, login, store)) +if (!ucr->passive.empty()) + if (!u->GetProperty().passive.Set(ucr->passive.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->password.res_empty()) - if (!u->property.password.Set(ucr->password.const_data(), currAdmin, login, store)) +if (!ucr->password.empty()) + if (!u->GetProperty().password.Set(ucr->password.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->phone.res_empty()) - if (!u->property.phone.Set(ucr->phone.const_data(), currAdmin, login, store)) +if (!ucr->phone.empty()) + if (!u->GetProperty().phone.Set(ucr->phone.const_data(), currAdmin, login, store)) res = -1; -if (!ucr->realName.res_empty()) - if (!u->property.realName.Set(ucr->realName.const_data(), currAdmin, login, store)) +if (!ucr->realName.empty()) + if (!u->GetProperty().realName.Set(ucr->realName.const_data(), currAdmin, login, store)) res = -1; -if (!usr->cash.res_empty()) +if (!usr->cash.empty()) { - //if (currAdmin->GetPriv()->userCash) + //if (*currAdmin->GetPriv()->userCash) { if (cashMustBeAdded) { - if (!u->property.cash.Set(usr->cash.const_data() + u->property.cash, - currAdmin, - login, - store, - cashMsg)) + if (!u->GetProperty().cash.Set(usr->cash.const_data() + u->GetProperty().cash, + currAdmin, + login, + store, + cashMsg)) res = -1; } else { - if (!u->property.cash.Set(usr->cash.const_data(), currAdmin, login, store, cashMsg)) + if (!u->GetProperty().cash.Set(usr->cash.const_data(), currAdmin, login, store, cashMsg)) res = -1; } } } -if (!ucr->tariffName.res_empty()) +if (!ucr->tariffName.empty()) { if (tariffs->FindByName(ucr->tariffName.const_data())) { - if (!u->property.tariffName.Set(ucr->tariffName.const_data(), currAdmin, login, store)) + if (!u->GetProperty().tariffName.Set(ucr->tariffName.const_data(), currAdmin, login, store)) res = -1; u->ResetNextTariff(); } @@ -1135,11 +1167,11 @@ if (!ucr->tariffName.res_empty()) } } -if (!ucr->nextTariff.res_empty()) +if (!ucr->nextTariff.empty()) { if (tariffs->FindByName(ucr->nextTariff.const_data())) { - if (!u->property.nextTariff.Set(ucr->nextTariff.const_data(), currAdmin, login, store)) + if (!u->GetProperty().nextTariff.Set(ucr->nextTariff.const_data(), currAdmin, login, store)) res = -1; } else @@ -1149,41 +1181,32 @@ if (!ucr->nextTariff.res_empty()) } } -DIR_TRAFF up = u->property.up; -DIR_TRAFF down = u->property.down; +DIR_TRAFF up = u->GetProperty().up; +DIR_TRAFF down = u->GetProperty().down; int upCount = 0; int downCount = 0; for (int i = 0; i < DIR_NUM; i++) { - if (!upr[i].res_empty()) + if (!upr[i].empty()) { - up[i] = upr[i]; + up[i] = upr[i].data(); upCount++; } - if (!downr[i].res_empty()) + if (!downr[i].empty()) { - down[i] = downr[i]; + down[i] = downr[i].data(); downCount++; } } if (upCount) - if (!u->property.up.Set(up, currAdmin, login, store)) + if (!u->GetProperty().up.Set(up, currAdmin, login, store)) res = -1; if (downCount) - if (!u->property.down.Set(down, currAdmin, login, store)) + if (!u->GetProperty().down.Set(down, currAdmin, login, store)) res = -1; -/*if (!usr->down.res_empty()) - { - u->property.down.Set(usr->down.const_data(), currAdmin, login, store); - } -if (!usr->up.res_empty()) - { - u->property.up.Set(usr->up.const_data(), currAdmin, login, store); - }*/ - u->WriteConf(); u->WriteStat(); @@ -1274,7 +1297,7 @@ if (strcasecmp(el, "Message") == 0) printfd(__FILE__, "User not found. %s\n", logins[i].c_str()); continue; } - msg.header.creationTime = stgTime; + msg.header.creationTime = static_cast<unsigned int>(stgTime); u->AddMessage(&msg); result = res_ok; } @@ -1328,11 +1351,11 @@ switch (result) break; case res_params_error: printfd(__FILE__, "res_params_error\n"); - answerList->push_back("<SendMessageResult value=\"Parameters error\"/>"); + answerList->push_back("<SendMessageResult value=\"Parameters error.\"/>"); break; case res_unknown: printfd(__FILE__, "res_unknown\n"); - answerList->push_back("<SendMessageResult value=\"Unknown user\"/>"); + answerList->push_back("<SendMessageResult value=\"Unknown user.\"/>"); break; default: printfd(__FILE__, "res_default\n"); @@ -1386,53 +1409,37 @@ else answerList->push_back("<DelUser value=\"ok\"/>"); } //----------------------------------------------------------------------------- -/*void PARSERDELUSER::CreateAnswer(char * mes) -{ -//answerList->clear(); -answerList->erase(answerList->begin(), answerList->end()); - -char str[255]; -sprintf(str, "<DelUser value=\"%s\"/>", mes); -answerList->push_back(str); -}*/ -//----------------------------------------------------------------------------- // CHECK USER // <checkuser login="vasya" password=\"123456\"/> //----------------------------------------------------------------------------- int PARSER_CHECK_USER::ParseStart(void *, const char *el, const char **attr) { -result = false; - if (strcasecmp(el, "CheckUser") == 0) { if (attr[0] == NULL || attr[1] == NULL || attr[2] == NULL || attr[3] == NULL) { - result = false; - CreateAnswer(); + CreateAnswer("Invalid parameters."); printfd(__FILE__, "PARSER_CHECK_USER - attr err\n"); return 0; } - user_iter user; + USER_PTR user; if (users->FindByName(attr[1], &user)) { - result = false; - CreateAnswer(); + CreateAnswer("User not found."); printfd(__FILE__, "PARSER_CHECK_USER - login err\n"); return 0; } - if (strcmp(user->property.password.Get().c_str(), attr[3])) + if (strcmp(user->GetProperty().password.Get().c_str(), attr[3])) { - result = false; - CreateAnswer(); + CreateAnswer("Wrong password."); printfd(__FILE__, "PARSER_CHECK_USER - passwd err\n"); return 0; } - result = true; - CreateAnswer(); + CreateAnswer(NULL); return 0; } return -1; @@ -1447,12 +1454,12 @@ if (strcasecmp(el, "CheckUser") == 0) return -1; } //----------------------------------------------------------------------------- -void PARSER_CHECK_USER::CreateAnswer() +void PARSER_CHECK_USER::CreateAnswer(const char * error) { -if (result) - answerList->push_back("<CheckUser value=\"Ok\"/>"); +if (error) + answerList->push_back(std::string("<CheckUser value=\"Err\" reason=\"") + error + "\"/>"); else - answerList->push_back("<CheckUser value=\"Err\"/>"); + answerList->push_back("<CheckUser value=\"Ok\"/>"); } //----------------------------------------------------------------------------- //-----------------------------------------------------------------------------