git.stg.codes
/
stg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix stglibs order in sgauth (for --as-needed)
[stg.git]
/
projects
/
stargazer
/
user_impl.cpp
diff --git
a/projects/stargazer/user_impl.cpp
b/projects/stargazer/user_impl.cpp
index 7153012a308be177d0d914ca9213dd679f2f0076..ca2e2cae221ae28f2ed807c4e5924381873b8da6 100644
(file)
--- 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/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,
#ifdef USE_ABSTRACT_SETTINGS
USER_IMPL::USER_IMPL(const SETTINGS * s,
@@
-53,13
+54,16
@@
USER_IMPL::USER_IMPL(const SETTINGS * s,
const TARIFFS * t,
const ADMIN * a,
const USERS * u)
const TARIFFS * t,
const ADMIN * a,
const USERS * u)
- : users(u),
+ : USER(),
+ users(u),
property(s->GetScriptsDir()),
WriteServLog(GetStgLogger()),
property(s->GetScriptsDir()),
WriteServLog(GetStgLogger()),
+ lastScanMessages(0),
login(),
id(0),
__connected(0),
connected(__connected),
login(),
id(0),
__connected(0),
connected(__connected),
+ enabledDirs(),
userIDGenerator(),
__currIP(0),
currIP(__currIP),
userIDGenerator(),
__currIP(0),
currIP(__currIP),
@@
-68,7
+72,15
@@
USER_IMPL::USER_IMPL(const SETTINGS * s,
sysAdmin(a),
store(st),
tariffs(t),
sysAdmin(a),
store(st),
tariffs(t),
- tariff(tariffs->GetNoTariff()),
+ tariff(NULL),
+ traffStat(),
+ traffStatSaved(),
+ settings(s),
+ authorizedBy(),
+ messages(),
+ deleted(false),
+ lastWriteStat(0),
+ lastWriteDetailedStat(0),
cash(property.cash),
up(property.up),
down(property.down),
cash(property.cash),
up(property.up),
down(property.down),
@@
-103,19
+115,18
@@
USER_IMPL::USER_IMPL(const SETTINGS * s,
userdata7(property.userdata7),
userdata8(property.userdata8),
userdata9(property.userdata9),
userdata7(property.userdata7),
userdata8(property.userdata8),
userdata9(property.userdata9),
+ sessionUpload(),
+ sessionDownload(),
passiveNotifier(this),
tariffNotifier(this),
cashNotifier(this),
passiveNotifier(this),
tariffNotifier(this),
cashNotifier(this),
- ipNotifier(this)
+ ipNotifier(this),
+ mutex(),
+ errorStr()
{
{
-settings = s;
-
password = "*_EMPTY_PASSWORD_*";
tariffName = NO_TARIFF_NAME;
password = "*_EMPTY_PASSWORD_*";
tariffName = NO_TARIFF_NAME;
-connected = 0;
-tariff = tariffs->GetNoTariff();
ips = StrToIPS("*");
ips = StrToIPS("*");
-deleted = false;
lastWriteStat = stgTime + random() % settings->GetStatWritePeriod();
lastWriteDetailedStat = stgTime;
lastWriteStat = stgTime + random() % settings->GetStatWritePeriod();
lastWriteDetailedStat = stgTime;
@@
-124,8
+135,6
@@
property.passive.AddBeforeNotifier(&passiveNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
ips.AddAfterNotifier(&ipNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
ips.AddAfterNotifier(&ipNotifier);
-lastScanMessages = 0;
-
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
@@
-133,17
+142,20
@@
pthread_mutex_init(&mutex, &attr);
}
#else
USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s,
}
#else
USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s,
- const STORE * st,
- const TARIFFS * t,
- const ADMIN * a,
- const USERS * u)
- : users(u),
+ const STORE * st,
+ const TARIFFS * t,
+ const ADMIN * a,
+ const USERS * u)
+ : USER(),
+ users(u),
property(s->GetScriptsDir()),
WriteServLog(GetStgLogger()),
property(s->GetScriptsDir()),
WriteServLog(GetStgLogger()),
+ lastScanMessages(0),
login(),
id(0),
__connected(0),
connected(__connected),
login(),
id(0),
__connected(0),
connected(__connected),
+ enabledDirs(),
userIDGenerator(),
__currIP(0),
currIP(__currIP),
userIDGenerator(),
__currIP(0),
currIP(__currIP),
@@
-152,7
+164,15
@@
USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s,
sysAdmin(a),
store(st),
tariffs(t),
sysAdmin(a),
store(st),
tariffs(t),
- tariff(tariffs->GetNoTariff()),
+ tariff(NULL),
+ traffStat(),
+ traffStatSaved(),
+ settings(s),
+ authorizedBy(),
+ messages(),
+ deleted(false),
+ lastWriteStat(0),
+ lastWriteDetailedStat(0),
cash(property.cash),
up(property.up),
down(property.down),
cash(property.cash),
up(property.up),
down(property.down),
@@
-187,19
+207,18
@@
USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s,
userdata7(property.userdata7),
userdata8(property.userdata8),
userdata9(property.userdata9),
userdata7(property.userdata7),
userdata8(property.userdata8),
userdata9(property.userdata9),
+ sessionUpload(),
+ sessionDownload(),
passiveNotifier(this),
tariffNotifier(this),
cashNotifier(this),
passiveNotifier(this),
tariffNotifier(this),
cashNotifier(this),
- ipNotifier(this)
+ ipNotifier(this),
+ mutex(),
+ errorStr()
{
{
-settings = s;
-
password = "*_EMPTY_PASSWORD_*";
tariffName = NO_TARIFF_NAME;
password = "*_EMPTY_PASSWORD_*";
tariffName = NO_TARIFF_NAME;
-connected = 0;
-tariff = tariffs->GetNoTariff();
ips = StrToIPS("*");
ips = StrToIPS("*");
-deleted = false;
lastWriteStat = stgTime + random() % settings->GetStatWritePeriod();
lastWriteDetailedStat = stgTime;
lastWriteStat = stgTime + random() % settings->GetStatWritePeriod();
lastWriteDetailedStat = stgTime;
@@
-208,8
+227,6
@@
property.passive.AddBeforeNotifier(&passiveNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
ips.AddAfterNotifier(&ipNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
ips.AddAfterNotifier(&ipNotifier);
-lastScanMessages = 0;
-
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
@@
-218,13
+235,17
@@
pthread_mutex_init(&mutex, &attr);
#endif
//-----------------------------------------------------------------------------
USER_IMPL::USER_IMPL(const USER_IMPL & u)
#endif
//-----------------------------------------------------------------------------
USER_IMPL::USER_IMPL(const USER_IMPL & u)
- : users(u.users),
+ : USER(),
+ users(u.users),
property(u.settings->GetScriptsDir()),
WriteServLog(GetStgLogger()),
property(u.settings->GetScriptsDir()),
WriteServLog(GetStgLogger()),
+ lastScanMessages(0),
login(u.login),
id(u.id),
login(u.login),
id(u.id),
- __connected(
u.__connected
),
+ __connected(
0
),
connected(__connected),
connected(__connected),
+ enabledDirs(),
+ userIDGenerator(u.userIDGenerator),
__currIP(u.__currIP),
currIP(__currIP),
lastIPForDisconnect(0),
__currIP(u.__currIP),
currIP(__currIP),
lastIPForDisconnect(0),
@@
-233,6
+254,14
@@
USER_IMPL::USER_IMPL(const USER_IMPL & u)
store(u.store),
tariffs(u.tariffs),
tariff(u.tariff),
store(u.store),
tariffs(u.tariffs),
tariff(u.tariff),
+ traffStat(u.traffStat),
+ traffStatSaved(u.traffStatSaved),
+ settings(u.settings),
+ authorizedBy(),
+ messages(u.messages),
+ deleted(u.deleted),
+ lastWriteStat(u.lastWriteStat),
+ lastWriteDetailedStat(u.lastWriteDetailedStat),
cash(property.cash),
up(property.up),
down(property.down),
cash(property.cash),
up(property.up),
down(property.down),
@@
-267,30
+296,23
@@
USER_IMPL::USER_IMPL(const USER_IMPL & u)
userdata7(property.userdata7),
userdata8(property.userdata8),
userdata9(property.userdata9),
userdata7(property.userdata7),
userdata8(property.userdata8),
userdata9(property.userdata9),
+ sessionUpload(),
+ sessionDownload(),
passiveNotifier(this),
tariffNotifier(this),
cashNotifier(this),
passiveNotifier(this),
tariffNotifier(this),
cashNotifier(this),
- ipNotifier(this)
+ ipNotifier(this),
+ mutex(),
+ errorStr()
{
if (&u == this)
return;
{
if (&u == this)
return;
-connected = 0;
-
-deleted = u.deleted;
-
-lastWriteStat = u.lastWriteStat;
-lastWriteDetailedStat = u.lastWriteDetailedStat;
-
-settings = u.settings;
-
property.tariffName.AddBeforeNotifier(&tariffNotifier);
property.passive.AddBeforeNotifier(&passiveNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
ips.AddAfterNotifier(&ipNotifier);
property.tariffName.AddBeforeNotifier(&tariffNotifier);
property.passive.AddBeforeNotifier(&passiveNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
ips.AddAfterNotifier(&ipNotifier);
-lastScanMessages = 0;
-
property.SetProperties(u.property);
pthread_mutexattr_t attr;
property.SetProperties(u.property);
pthread_mutexattr_t attr;
@@
-343,6
+365,9
@@
std::vector<STG_MSG_HDR> hdrsList;
if (store->GetMessageHdrs(&hdrsList, login))
{
printfd(__FILE__, "Error GetMessageHdrs %s\n", store->GetStrError().c_str());
if (store->GetMessageHdrs(&hdrsList, login))
{
printfd(__FILE__, "Error GetMessageHdrs %s\n", store->GetStrError().c_str());
+ WriteServLog("Cannot read user %s. Error reading message headers: %s.",
+ login.c_str(),
+ store->GetStrError().c_str());
return -1;
}
return -1;
}
@@
-459,7
+484,7
@@
for (int i = 0; i < DIR_NUM; i++)
enabledDirs[i] = dirs & (1 << i);
}
enabledDirs[i] = dirs & (1 << i);
}
-if (
authorizedBy.size
())
+if (
!authorizedBy.empty
())
{
if (currIP != ip)
{
{
if (currIP != ip)
{
@@
-564,7
+589,7
@@
if (!fakeConnect)
id,
dirsStr);
id,
dirsStr);
- ScriptExec(scriptOnConnectParams);
+ ScriptExec(scriptOnConnectParams
.c_str()
);
}
else
{
}
else
{
@@
-621,7
+646,7
@@
if (!fakeDisconnect)
id,
dirsStr);
id,
dirsStr);
- ScriptExec(scriptOnDisonnectParams);
+ ScriptExec(scriptOnDisonnectParams
.c_str()
);
}
else
{
}
else
{
@@
-767,7
+792,7
@@
if (settings->GetFreeMbAllowInet())
return true;
}
return true;
}
-if (settings->GetShowFeeInCash())
+if (settings->GetShowFeeInCash()
|| tariff == NULL
)
{
return (cash >= -credit);
}
{
return (cash >= -credit);
}
@@
-793,7
+818,7
@@
void USER_IMPL::AddTraffStatU(int dir, uint32_t ip, uint32_t len)
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
-if (!connected)
+if (!connected
|| tariff == NULL
)
return;
double cost = 0;
return;
double cost = 0;
@@
-885,7
+910,7
@@
void USER_IMPL::AddTraffStatD(int dir, uint32_t ip, uint32_t len)
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
-if (!connected)
+if (!connected
|| tariff == NULL
)
return;
double cost = 0;
return;
double cost = 0;
@@
-1030,7
+1055,7
@@
if (access(scriptOnAdd.c_str(), X_OK) == 0)
scriptOnAdd.c_str(),
login.c_str());
scriptOnAdd.c_str(),
login.c_str());
- ScriptExec(scriptOnAddParams);
+ ScriptExec(scriptOnAddParams
.c_str()
);
}
else
{
}
else
{
@@
-1052,7
+1077,7
@@
if (access(scriptOnDel.c_str(), X_OK) == 0)
scriptOnDel.c_str(),
login.c_str());
scriptOnDel.c_str(),
login.c_str());
- ScriptExec(scriptOnDelParams);
+ ScriptExec(scriptOnDelParams
.c_str()
);
}
else
{
}
else
{
@@
-1192,7
+1217,7
@@
if (nextTariff.ConstData() != "")
else
{
property.tariffName.Set(nextTariff, sysAdmin, login, store);
else
{
property.tariffName.Set(nextTariff, sysAdmin, login, store);
- tariff = nt;
+
//
tariff = nt;
}
ResetNextTariff();
WriteConf();
}
ResetNextTariff();
WriteConf();
@@
-1203,7
+1228,7
@@
void USER_IMPL::ProcessDayFeeSpread()
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
-if (passive.ConstData())
+if (passive.ConstData()
|| tariff == NULL
)
return;
double fee = tariff->GetFee() / DaysInCurrentMonth();
return;
double fee = tariff->GetFee() / DaysInCurrentMonth();
@@
-1218,11
+1243,11
@@
switch (settings->GetFeeChargeType())
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
break;
case 1:
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
break;
case 1:
- if (c > 0)
+ if (c >
=
0)
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
break;
case 2:
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
break;
case 2:
- if (c > fee)
+ if (c >
=
fee)
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
break;
}
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
break;
}
@@
-1233,6
+1258,9
@@
void USER_IMPL::ProcessDayFee()
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+if (tariff == NULL)
+ return;
+
double passiveTimePart = 1.0;
if (!settings->GetFullFee())
{
double passiveTimePart = 1.0;
if (!settings->GetFullFee())
{
@@
-1251,7
+1279,10
@@
double fee = tariff->GetFee() * passiveTimePart;
ResetPassiveTime();
if (fee == 0.0)
ResetPassiveTime();
if (fee == 0.0)
+ {
+ SetPrepaidTraff();
return;
return;
+ }
double c = cash;
printfd(__FILE__, "login: %8s Fee=%f PassiveTimePart=%f fee=%f\n",
double c = cash;
printfd(__FILE__, "login: %8s Fee=%f PassiveTimePart=%f fee=%f\n",
@@
-1263,23
+1294,29
@@
switch (settings->GetFeeChargeType())
{
case 0:
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
{
case 0:
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+ SetPrepaidTraff();
break;
case 1:
break;
case 1:
- if (c > 0)
+ if (c >= 0)
+ {
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+ SetPrepaidTraff();
+ }
break;
case 2:
break;
case 2:
- if (c > fee)
+ if (c >= fee)
+ {
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+ SetPrepaidTraff();
+ }
break;
}
}
//-----------------------------------------------------------------------------
void USER_IMPL::SetPrepaidTraff()
{
break;
}
}
//-----------------------------------------------------------------------------
void USER_IMPL::SetPrepaidTraff()
{
-STG_LOCKER lock(&mutex, __FILE__, __LINE__);
-
-property.freeMb.Set(tariff->GetFree(), sysAdmin, login, store, "Prepaid traffic");
+if (tariff != NULL)
+ property.freeMb.Set(tariff->GetFree(), sysAdmin, login, store, "Prepaid traffic");
}
//-----------------------------------------------------------------------------
int USER_IMPL::AddMessage(STG_MSG * msg)
}
//-----------------------------------------------------------------------------
int USER_IMPL::AddMessage(STG_MSG * msg)
@@
-1402,7
+1439,7
@@
while (it != messages.end())
//-----------------------------------------------------------------------------
void CHG_PASSIVE_NOTIFIER::Notify(const int & oldPassive, const int & newPassive)
{
//-----------------------------------------------------------------------------
void CHG_PASSIVE_NOTIFIER::Notify(const int & oldPassive, const int & newPassive)
{
-if (newPassive && !oldPassive)
+if (newPassive && !oldPassive
&& user->tariff != NULL
)
user->property.cash.Set(user->cash - user->tariff->GetPassiveCost(),
user->sysAdmin,
user->login,
user->property.cash.Set(user->cash - user->tariff->GetPassiveCost(),
user->sysAdmin,
user->login,
@@
-1412,7
+1449,13
@@
if (newPassive && !oldPassive)
//-----------------------------------------------------------------------------
void CHG_TARIFF_NOTIFIER::Notify(const string &, const string & newTariff)
{
//-----------------------------------------------------------------------------
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);
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)
}
//-----------------------------------------------------------------------------
void CHG_CASH_NOTIFIER::Notify(const double & oldCash, const double & newCash)
@@
-1425,8
+1468,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)
{
printfd(__FILE__, "Change IP from '%s' to '%s'\n", from.GetIpStr().c_str(), to.GetIpStr().c_str());
if (user->connected)
- user->Disconnect(
tru
e, "Change IP");
- if (user->IsInetable())
- user->Connect(
tru
e);
+ user->Disconnect(
fals
e, "Change IP");
+ if (
!user->authorizedBy.empty() &&
user->IsInetable())
+ user->Connect(
fals
e);
}
//-----------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------