X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/3719f681e8254e5fd79bd3a43176077fafa0d2c2..bc4721533e4041a19b42cb247064f9f42c3f9d5f:/projects/stargazer/user_impl.cpp?ds=inline diff --git a/projects/stargazer/user_impl.cpp b/projects/stargazer/user_impl.cpp index b2cbf5d4..8c61523a 100644 --- a/projects/stargazer/user_impl.cpp +++ b/projects/stargazer/user_impl.cpp @@ -46,6 +46,7 @@ #include "stg/admin.h" #include "user_impl.h" #include "settings_impl.h" +#include "stg_timer.h" #ifdef USE_ABSTRACT_SETTINGS USER_IMPL::USER_IMPL(const SETTINGS * s, @@ -53,7 +54,8 @@ USER_IMPL::USER_IMPL(const SETTINGS * s, const TARIFFS * t, const ADMIN * a, const USERS * u) - : users(u), + : USER(), + users(u), property(s->GetScriptsDir()), WriteServLog(GetStgLogger()), login(), @@ -136,7 +138,8 @@ USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s, const TARIFFS * t, const ADMIN * a, const USERS * u) - : users(u), + : USER(), + users(u), property(s->GetScriptsDir()), WriteServLog(GetStgLogger()), login(), @@ -216,7 +219,8 @@ pthread_mutex_init(&mutex, &attr); #endif //----------------------------------------------------------------------------- USER_IMPL::USER_IMPL(const USER_IMPL & u) - : users(u.users), + : USER(), + users(u.users), property(u.settings->GetScriptsDir()), WriteServLog(GetStgLogger()), login(u.login), @@ -562,7 +566,7 @@ if (!fakeConnect) id, dirsStr); - ScriptExec(scriptOnConnectParams); + ScriptExec(scriptOnConnectParams.c_str()); } else { @@ -619,7 +623,7 @@ if (!fakeDisconnect) id, dirsStr); - ScriptExec(scriptOnDisonnectParams); + ScriptExec(scriptOnDisonnectParams.c_str()); } else { @@ -1028,7 +1032,7 @@ if (access(scriptOnAdd.c_str(), X_OK) == 0) scriptOnAdd.c_str(), login.c_str()); - ScriptExec(scriptOnAddParams); + ScriptExec(scriptOnAddParams.c_str()); } else { @@ -1050,7 +1054,7 @@ if (access(scriptOnDel.c_str(), X_OK) == 0) scriptOnDel.c_str(), login.c_str()); - ScriptExec(scriptOnDelParams); + ScriptExec(scriptOnDelParams.c_str()); } else { @@ -1190,7 +1194,7 @@ if (nextTariff.ConstData() != "") else { property.tariffName.Set(nextTariff, sysAdmin, login, store); - tariff = nt; + //tariff = nt; } ResetNextTariff(); WriteConf(); @@ -1252,7 +1256,10 @@ double fee = tariff->GetFee() * passiveTimePart; ResetPassiveTime(); if (fee == 0.0) + { + SetPrepaidTraff(); return; + } double c = cash; printfd(__FILE__, "login: %8s Fee=%f PassiveTimePart=%f fee=%f\n", @@ -1264,22 +1271,27 @@ switch (settings->GetFeeChargeType()) { case 0: property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge"); + SetPrepaidTraff(); break; case 1: if (c > 0) + { property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge"); + SetPrepaidTraff(); + } break; case 2: if (c > fee) + { property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge"); + SetPrepaidTraff(); + } break; } } //----------------------------------------------------------------------------- void USER_IMPL::SetPrepaidTraff() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); - if (tariff != NULL) property.freeMb.Set(tariff->GetFree(), sysAdmin, login, store, "Prepaid traffic"); } @@ -1414,7 +1426,13 @@ if (newPassive && !oldPassive && user->tariff != NULL) //----------------------------------------------------------------------------- void CHG_TARIFF_NOTIFIER::Notify(const string &, const string & newTariff) { +if (user->settings->GetReconnectOnTariffChange() && user->connected) + user->Disconnect(false, "Change tariff"); user->tariff = user->tariffs->FindByName(newTariff); +if (user->settings->GetReconnectOnTariffChange() && + !user->authorizedBy.empty() && + user->IsInetable()) + user->Connect(false); } //----------------------------------------------------------------------------- void CHG_CASH_NOTIFIER::Notify(const double & oldCash, const double & newCash) @@ -1427,8 +1445,8 @@ void CHG_IPS_NOTIFIER::Notify(const USER_IPS & from, const USER_IPS & to) { printfd(__FILE__, "Change IP from '%s' to '%s'\n", from.GetIpStr().c_str(), to.GetIpStr().c_str()); if (user->connected) - user->Disconnect(true, "Change IP"); - if (user->IsInetable()) - user->Connect(true); + user->Disconnect(false, "Change IP"); + if (!user->authorizedBy.empty() && user->IsInetable()) + user->Connect(false); } //-----------------------------------------------------------------------------