#include <cassert>
#include <cstdlib>
+#include "stg/users.h"
+#include "stg/common.h"
+#include "stg/scriptexecuter.h"
+#include "stg/tariff.h"
+#include "stg/tariffs.h"
+#include "stg/admin.h"
#include "user_impl.h"
-#include "users.h"
-#include "common.h"
#include "settings_impl.h"
-#include "script_executer.h"
-#include "tariff.h"
-#include "tariffs.h"
-#include "admin.h"
USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s,
const STORE * st,
ips = StrToIPS("*");
deleted = false;
lastWriteStat = stgTime + random() % settings->GetStatWritePeriod();
-lastWriteDeatiledStat = stgTime;
+lastWriteDetailedStat = stgTime;
property.tariffName.AddBeforeNotifier(&tariffNotifier);
property.passive.AddBeforeNotifier(&passiveNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
-currIP.AddAfterNotifier(&ipNotifier);
+ips.AddAfterNotifier(&ipNotifier);
lastScanMessages = 0;
deleted = u.deleted;
lastWriteStat = u.lastWriteStat;
-lastWriteDeatiledStat = u.lastWriteDeatiledStat;
+lastWriteDetailedStat = u.lastWriteDetailedStat;
settings = u.settings;
property.tariffName.AddBeforeNotifier(&tariffNotifier);
property.passive.AddBeforeNotifier(&passiveNotifier);
property.cash.AddBeforeNotifier(&cashNotifier);
-currIP.AddAfterNotifier(&ipNotifier);
+ips.AddAfterNotifier(&ipNotifier);
lastScanMessages = 0;
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
USER_STAT stat(property.GetStat());
-printfd(__FILE__, "USER::WriteStat()\n");
-
if (store->SaveUserStat(stat, login))
{
WriteServLog("Cannot write stat for user %s.", login.c_str());
if (currIP != ip)
{
// We are already authorized, but with different IP address
- errorStr = "User " + login + " alredy authorized with IP address " + inet_ntostring(ip);
+ errorStr = "User " + login + " already authorized with IP address " + inet_ntostring(ip);
return -1;
}
// If it's not our IP - throw an error
if (u != this)
{
- errorStr = "IP address " + inet_ntostring(ip) + " alredy in use";
+ errorStr = "IP address " + inet_ntostring(ip) + " already in use";
return -1;
}
}
if (users->IsIPInIndex(ip))
{
// Address is already present in IP-index
- errorStr = "IP address " + inet_ntostring(ip) + " alredy in use";
+ errorStr = "IP address " + inet_ntostring(ip) + " already in use";
return -1;
}
{
if (connected)
{
- lastActivityTime = *const_cast<time_t *>(&stgTime);
+ property.Stat().lastActivityTime = stgTime;
}
if (!connected && IsInetable())
{
currIP.DelAfterNotifier(n);
}
//-----------------------------------------------------------------------------
+void USER_IMPL::AddConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE<bool> * n)
+{
+STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+connected.AddBeforeNotifier(n);
+}
+//-----------------------------------------------------------------------------
+void USER_IMPL::DelConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE<bool> * n)
+{
+STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+connected.DelBeforeNotifier(n);
+}
+//-----------------------------------------------------------------------------
+void USER_IMPL::AddConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE<bool> * n)
+{
+STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+connected.AddAfterNotifier(n);
+}
+//-----------------------------------------------------------------------------
+void USER_IMPL::DelConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE<bool> * n)
+{
+STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+connected.DelAfterNotifier(n);
+}
+//-----------------------------------------------------------------------------
void USER_IMPL::OnAdd()
{
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
if (ts.size() && !disabledDetailStat)
{
- if (store->WriteDetailedStat(ts, lastWriteDeatiledStat, login))
+ if (store->WriteDetailedStat(ts, lastWriteDetailedStat, login))
{
printfd(__FILE__, "USER::WriteDetailStat() - failed to write current detail stat\n");
WriteServLog("Cannot write detail stat for user %s.", login.c_str());
printfd(__FILE__, "USER::WriteDetailStat() - pushing detail stat to queue\n");
STG_LOCKER lock(&mutex, __FILE__, __LINE__);
traffStatSaved.second.swap(ts);
- traffStatSaved.first = lastWriteDeatiledStat;
+ traffStatSaved.first = lastWriteDetailedStat;
}
return -1;
}
}
-lastWriteDeatiledStat = stgTime;
+lastWriteDetailedStat = stgTime;
return 0;
}
//-----------------------------------------------------------------------------
++it;
}
}
+ else
+ {
+ ++it;
+ }
}
}
//-----------------------------------------------------------------------------
user->lastCashAdd = newCash - oldCash;
}
//-----------------------------------------------------------------------------
-void CHG_IP_NOTIFIER::Notify(const uint32_t & from, const uint32_t & to)
+void CHG_IPS_NOTIFIER::Notify(const USER_IPS & from, const USER_IPS & to)
{
- printfd(__FILE__, "Change IP from %s to %s\n", inet_ntostring(from).c_str(), inet_ntostring(to).c_str());
- if (from != 0)
- if (user->connected)
- user->Disconnect(false, "Change IP");
- if (to != 0)
- if (user->IsInetable())
- user->Connect(false);
+ 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);
}
//-----------------------------------------------------------------------------