virtual bool IsIPInIndex(uint32_t ip) const = 0;
virtual bool IsIPInUse(uint32_t ip, const std::string & login, const User** user) const = 0;
- virtual int OpenSearch() = 0;
+ virtual unsigned int OpenSearch() = 0;
virtual int SearchNext(int handle, User** u) = 0;
virtual int CloseSearch(int handle) = 0;
return -1;
}
- m_thread = std::jthread([this](auto token){ Run(token); });
+ m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
return 0;
}
printfd(__FILE__, "Parameter 'PingDelay' not found\n");
return -1;
}
-if (ParseIntInRange(pvi->value[0], 5, 3600, &pingDelay))
+if (ParseIntInRange(pvi->value[0], 5, 3600, &pingDelay) != 0)
{
errorStr = "Cannot parse parameter \'PingDelay\': " + errorStr;
printfd(__FILE__, "Canot parse parameter 'PingDelay'\n");
}
//-----------------------------------------------------------------------------
PING::PING()
- : users(NULL),
+ : users(nullptr),
isRunning(false),
onAddUserNotifier(*this),
onDelUserNotifier(*this),
{
}
//-----------------------------------------------------------------------------
-PING::~PING()
-{
-}
-//-----------------------------------------------------------------------------
int PING::ParseSettings()
{
-int ret = pingSettings.ParseSettings(settings);
-if (ret)
+auto ret = pingSettings.ParseSettings(settings);
+if (ret != 0)
errorStr = pingSettings.GetStrError();
return ret;
}
pinger.SetDelayTime(pingSettings.GetPingDelay());
pinger.Start();
-m_thread = std::jthread([this](auto token){ Run(token); });
+m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
return 0;
}
if (!isRunning)
break;
- nanosleep(&ts, NULL);
+ nanosleep(&ts, nullptr);
}
users->DelNotifierUserAdd(&onAddUserNotifier);
{
sigset_t signalSet;
sigfillset(&signalSet);
-pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
+pthread_sigmask(SIG_BLOCK, &signalSet, nullptr);
isRunning = true;
while (!token.stop_requested())
{
- std::list<UserPtr>::iterator iter = usersList.begin();
+ auto iter = usersList.begin();
{
std::lock_guard lock(m_mutex);
while (iter != usersList.end())
time_t t;
if (pinger.GetIPTime(ip, &t) == 0)
{
- if (t)
+ if (t != 0)
(*iter)->UpdatePingTime(t);
}
}
else
{
uint32_t ip = (*iter)->GetCurrIP();
- if (ip)
+ if (ip != 0)
{
time_t t;
if (pinger.GetIPTime(ip, &t) == 0)
{
- if (t)
+ if (t != 0)
(*iter)->UpdatePingTime(t);
}
}
{
if (!token.stop_requested())
{
- nanosleep(&ts, NULL);
+ nanosleep(&ts, nullptr);
}
}
}
else
{
uint32_t ip = u->GetCurrIP();
- if (ip)
+ if (ip != 0)
pinger.AddIP(ip);
}
}
void CHG_CURRIP_NOTIFIER_PING::Notify(const uint32_t & oldIP, const uint32_t & newIP)
{
ping.pinger.DelIP(oldIP);
-if (newIP)
+if (newIP != 0)
ping.pinger.AddIP(newIP);
}
//-----------------------------------------------------------------------------
friend class CHG_IPS_NOTIFIER_PING;
public:
PING();
- ~PING() override;
void SetUsers(STG::Users * u) override { users = u; }
void SetSettings(const STG::ModuleSettings & s) override { settings = s; }
{
int p;
STG::ParamValue pv;
-std::vector<STG::ParamValue>::const_iterator pvi;
netRouters.clear();
///////////////////////////
pv.param = "Port";
-pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
+auto pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Port\' not found.";
printfd(__FILE__, "Parameter 'Port' not found\n");
return -1;
}
-if (ParseIntInRange(pvi->value[0], 2, 65535, &p))
+if (ParseIntInRange(pvi->value[0], 2, 65535, &p) != 0)
{
errorStr = "Cannot parse parameter \'Port\': " + errorStr;
printfd(__FILE__, "Cannot parse parameter 'Port'\n");
return -1;
}
-if (ParseIntInRange(pvi->value[0], 5, 600, &sendPeriod))
+if (ParseIntInRange(pvi->value[0], 5, 600, &sendPeriod) != 0)
{
errorStr = "Cannot parse parameter \'SendPeriod\': " + errorStr;
printfd(__FILE__, "Cannot parse parameter 'SendPeriod'\n");
NRMapParser nrMapParser;
if (!nrMapParser.ReadFile(subnetFile))
- {
netRouters = nrMapParser.GetMap();
- }
else
- {
- STG::PluginLogger::get("rscript")("mod_rscript: error opening subnets file '%s'", subnetFile.c_str());
- }
+ STG::PluginLogger::get("rscript")("mod_rscript: error opening subnets file '%s'", subnetFile.c_str());
return 0;
}
: sendPeriod(15),
halfPeriod(8),
isRunning(false),
- users(NULL),
+ users(nullptr),
sock(0),
onAddUserNotifier(*this),
onDelUserNotifier(*this),
{
}
//-----------------------------------------------------------------------------
-REMOTE_SCRIPT::~REMOTE_SCRIPT()
-{
-}
-//-----------------------------------------------------------------------------
void REMOTE_SCRIPT::Run(std::stop_token token)
{
sigset_t signalSet;
sigfillset(&signalSet);
-pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
+pthread_sigmask(SIG_BLOCK, &signalSet, nullptr);
isRunning = true;
//-----------------------------------------------------------------------------
int REMOTE_SCRIPT::ParseSettings()
{
-int ret = rsSettings.ParseSettings(settings);
-if (ret)
+auto ret = rsSettings.ParseSettings(settings);
+if (ret != 0)
errorStr = rsSettings.GetStrError();
sendPeriod = rsSettings.GetSendPeriod();
users->AddNotifierUserDel(&onDelUserNotifier);
if (GetUsers())
- {
return -1;
- }
if (PrepareNet())
- {
return -1;
- }
if (!isRunning)
- {
- m_thread = std::jthread([this](auto token){ Run(token); });
- }
+ m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
errorStr = "";
return 0;
for (int i = 0; i < 25 && isRunning; i++)
{
struct timespec ts = {0, 200000000};
- nanosleep(&ts, NULL);
+ nanosleep(&ts, nullptr);
}
}
{
std::lock_guard lock(m_mutex);
-std::map<uint32_t, RS::USER>::iterator it(authorizedUsers.begin());
+auto it = authorizedUsers.begin();
while (it != authorizedUsers.end())
{
if (difftime(stgTime, it->second.lastSentTime) - (rand() % halfPeriod) > sendPeriod)
memset(packetTail.padding, 0, sizeof(packetTail.padding));
memcpy(packetTail.magic, RS_ID, sizeof(RS_ID));
-std::vector<std::string>::const_iterator it;
std::string params;
-for(it = rsSettings.GetUserParams().begin();
- it != rsSettings.GetUserParams().end();
- ++it)
+for (const auto& param : rsSettings.GetUserParams())
{
- std::string parameter(rsu.user->GetParamValue(it->c_str()));
- if (params.length() + parameter.length() > RS_PARAMS_LEN - 1)
+ auto value = rsu.user->GetParamValue(param);
+ if (params.length() + value.length() > RS_PARAMS_LEN - 1)
{
- logger("Script params string length %d exceeds the limit of %d symbols.", params.length() + parameter.length(), RS_PARAMS_LEN);
+ logger("Script params string length %d exceeds the limit of %d symbols.", params.length() + value.length(), RS_PARAMS_LEN);
break;
}
- params += parameter + " ";
+ params += value + " ";
}
strncpy(reinterpret_cast<char*>(packetTail.params), params.c_str(), RS_PARAMS_LEN);
packetTail.params[RS_PARAMS_LEN - 1] = 0;
sendAddr.sin_port = htons(rsSettings.GetPort());
sendAddr.sin_addr.s_addr = ip;
- return sendto(sock, buffer, sizeof(buffer), 0, reinterpret_cast<struct sockaddr*>(&sendAddr), sizeof(sendAddr));
+ return sendto(sock, buffer, sizeof(buffer), 0, reinterpret_cast<struct sockaddr*>(&sendAddr), sizeof(sendAddr)) > 0;
}
return false;
int h = users->OpenSearch();
assert(h && "USERS::OpenSearch is always correct");
-while (!users->SearchNext(h, &u))
- {
+while (users->SearchNext(h, &u) != 0)
SetUserNotifiers(u);
- }
users->CloseSearch(h);
return false;
std::vector<uint32_t> REMOTE_SCRIPT::IP2Routers(uint32_t ip)
{
std::lock_guard lock(m_mutex);
-for (size_t i = 0; i < netRouters.size(); ++i)
- {
- if ((ip & netRouters[i].subnetMask) == (netRouters[i].subnetIP & netRouters[i].subnetMask))
- {
- return netRouters[i].routers;
- }
- }
-return std::vector<uint32_t>();
+for (auto& nr : netRouters)
+ if ((ip & nr.subnetMask) == (nr.subnetIP & nr.subnetMask))
+ return nr.routers;
+return {};
}
//-----------------------------------------------------------------------------
void REMOTE_SCRIPT::SetUserNotifiers(UserPtr u)
void REMOTE_SCRIPT::DelRSU(UserPtr user)
{
std::lock_guard lock(m_mutex);
-std::map<uint32_t, RS::USER>::iterator it(authorizedUsers.begin());
+auto it = authorizedUsers.begin();
while (it != authorizedUsers.end())
{
if (it->second.user == user)
}
++it;
}
-/*const std::map<uint32_t, RS::USER>::iterator it(
- authorizedUsers.find(user->GetCurrIP())
- );
+/*const auto it = authorizedUsers.find(user->GetCurrIP());
if (it != authorizedUsers.end())
{
Send(it->second, true);
//-----------------------------------------------------------------------------
void RS::IP_NOTIFIER::Notify(const uint32_t & /*oldValue*/, const uint32_t & newValue)
{
-if (newValue)
+if (newValue != 0)
rs.AddRSU(user);
else
rs.DelRSU(user);
class REMOTE_SCRIPT : public STG::Plugin {
public:
REMOTE_SCRIPT();
- ~REMOTE_SCRIPT() override;
void SetUsers(STG::Users * u) override { users = u; }
void SetSettings(const STG::ModuleSettings & s) override { settings = s; }
}
SMUX_SETTINGS::SMUX_SETTINGS()
- : errorStr(),
- ip(0),
- port(0),
- password()
+ : ip(0),
+ port(0)
{}
int SMUX_SETTINGS::ParseSettings(const STG::ModuleSettings & s)
{
STG::ParamValue pv;
-std::vector<STG::ParamValue>::const_iterator pvi;
int p;
pv.param = "Port";
-pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
+auto pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Port\' not found.";
printfd(__FILE__, "Parameter 'Port' not found\n");
return -1;
}
-if (ParseIntInRange(pvi->value[0], 2, 65535, &p))
+if (ParseIntInRange(pvi->value[0], 2, 65535, &p) != 0)
{
errorStr = "Cannot parse parameter \'Port\': " + errorStr;
printfd(__FILE__, "Cannot parse parameter 'Port'\n");
}
SMUX::SMUX()
- : users(NULL),
- tariffs(NULL),
- admins(NULL),
- services(NULL),
- corporations(NULL),
- traffcounter(NULL),
+ : users(nullptr),
+ tariffs(nullptr),
+ admins(nullptr),
+ services(nullptr),
+ corporations(nullptr),
+ traffcounter(nullptr),
stopped(true),
needReconnect(false),
lastReconnectTry(0),
SMUX::~SMUX()
{
- {
- Sensors::iterator it;
- for (it = sensors.begin(); it != sensors.end(); ++it)
- delete it->second;
- }
- {
- Tables::iterator it;
- for (it = tables.begin(); it != tables.end(); ++it)
- delete it->second;
- }
-printfd(__FILE__, "SMUX::~SMUX()\n");
+ for (auto& kv : sensors)
+ delete kv.second;
+ for (auto& kv : tables)
+ delete kv.second;
+ printfd(__FILE__, "SMUX::~SMUX()\n");
}
int SMUX::ParseSettings()
int SMUX::Start()
{
-assert(users != NULL && "users must not be NULL");
-assert(tariffs != NULL && "tariffs must not be NULL");
-assert(admins != NULL && "admins must not be NULL");
-assert(services != NULL && "services must not be NULL");
-assert(corporations != NULL && "corporations must not be NULL");
-assert(traffcounter != NULL && "traffcounter must not be NULL");
+assert(users != nullptr && "users must not be NULL");
+assert(tariffs != nullptr && "tariffs must not be NULL");
+assert(admins != nullptr && "admins must not be NULL");
+assert(services != nullptr && "services must not be NULL");
+assert(corporations != nullptr && "corporations must not be NULL");
+assert(traffcounter != nullptr && "traffcounter must not be NULL");
if (PrepareNet())
needReconnect = true;
SetNotifiers();
#ifdef SMUX_DEBUG
-Sensors::const_iterator it(sensors.begin());
+auto it = sensors.begin();
while (it != sensors.end())
{
printfd(__FILE__, "%s = %s\n",
#endif
if (!m_thread.joinable())
- m_thread = std::jthread([this](auto token){ Run(token); });
+ m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
return 0;
}
for (int i = 0; i < 25 && !stopped; i++)
{
struct timespec ts = {0, 200000000};
- nanosleep(&ts, NULL);
+ nanosleep(&ts, nullptr);
}
}
ResetNotifiers();
- {
- Tables::iterator it;
- for (it = tables.begin(); it != tables.end(); ++it)
- delete it->second;
- }
- {
- Sensors::iterator it;
- for (it = sensors.begin(); it != sensors.end(); ++it)
- delete it->second;
- }
+for (auto& kv : sensors)
+ delete kv.second;
+for (auto& kv : tables)
+ delete kv.second;
tables.erase(tables.begin(), tables.end());
sensors.erase(sensors.begin(), sensors.end());
int SMUX::Reload(const STG::ModuleSettings & /*ms*/)
{
-if (Stop())
+if (Stop() != 0)
return -1;
-if (Start())
+if (Start() != 0)
return -1;
if (!needReconnect)
{
{
if (WaitPackets(sock) && !needReconnect)
{
- SMUX_PDUs_t * pdus = RecvSMUXPDUs(sock);
- if (pdus)
+ auto* pdus = RecvSMUXPDUs(sock);
+ if (pdus != nullptr)
{
DispatchPDUs(pdus);
ASN_STRUCT_FREE(asn_DEF_SMUX_PDUs, pdus);
addr.sin_port = htons(smuxSettings.GetPort());
addr.sin_addr.s_addr = smuxSettings.GetIP();
-if (connect(sock, reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr)))
+if (connect(sock, reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr)) != 0)
{
errorStr = "Cannot connect.";
logger("Cannot connect the socket: %s", strerror(errno));
bool SMUX::Reconnect()
{
-if (needReconnect && difftime(time(NULL), lastReconnectTry) < reconnectTimeout)
+if (needReconnect && difftime(time(nullptr), lastReconnectTry) < reconnectTimeout)
return true;
time(&lastReconnectTry);
bool SMUX::DispatchPDUs(const SMUX_PDUs_t * pdus)
{
-SMUXHandlers::iterator it(smuxHandlers.find(pdus->present));
+auto it = smuxHandlers.find(pdus->present);
if (it != smuxHandlers.end())
- {
return (this->*(it->second))(pdus);
- }
#ifdef SMUX_DEBUG
else
{
{
Sensors newSensors;
bool done = true;
-Tables::iterator it(tables.begin());
+auto it = tables.begin();
while (it != tables.end())
{
try
}
if (!done)
{
- Sensors::iterator sit(newSensors.begin());
+ auto sit = newSensors.begin();
while (sit != newSensors.end())
{
delete sit->second;
it = tables.begin();
while (it != tables.end())
{
- std::pair<Sensors::iterator, Sensors::iterator> res;
- res = std::equal_range(sensors.begin(),
- sensors.end(),
- std::pair<OID, Sensor *>(OID(it->first), NULL),
- SPrefixLess);
- Sensors::iterator sit(res.first);
+ auto res = std::equal_range(sensors.begin(),
+ sensors.end(),
+ std::pair<OID, Sensor *>(OID(it->first), nullptr),
+ SPrefixLess);
+ auto sit = res.first;
while (sit != res.second)
{
delete sit->second;
void SMUX::SetNotifier(UserPtr userPtr)
{
-notifiers.push_back(CHG_AFTER_NOTIFIER(*this, userPtr));
+notifiers.emplace_back(*this, userPtr);
userPtr->GetProperties().tariffName.AddAfterNotifier(¬ifiers.back());
}
void SMUX::UnsetNotifier(UserPtr userPtr)
{
-std::list<CHG_AFTER_NOTIFIER>::iterator it = notifiers.begin();
+auto it = notifiers.begin();
while (it != notifiers.end())
{
if (it->GetUserPtr() == userPtr)
assert(h && "USERS::OpenSearch is always correct");
UserPtr u;
-while (!users->SearchNext(h, &u))
+while (users->SearchNext(h, &u) == 0)
SetNotifier(u);
users->CloseSearch(h);
users->DelNotifierUserDel(&delUserNotifier);
users->DelNotifierUserAdd(&addUserNotifier);
-std::list<CHG_AFTER_NOTIFIER>::iterator it(notifiers.begin());
+auto it = notifiers.begin();
while (it != notifiers.end())
{
it->GetUserPtr()->GetProperties().tariffName.DelAfterNotifier(&(*it));
SetUserNotifiers(u);
users->CloseSearch(h);
-m_thread = std::jthread([this](auto token){ Run(token); });
+m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
return 0;
}
//-----------------------------------------------------------------------------
using STG::UsersImpl;
//-----------------------------------------------------------------------------
-UsersImpl::UsersImpl(SettingsImpl * s, Store * st,
- Tariffs * t, Services & svcs,
- const Admin& sa)
+UsersImpl::UsersImpl(SettingsImpl * s, Store * store,
+ Tariffs * tariffs, Services & svcs,
+ const Admin& sysAdmin)
: settings(s),
- tariffs(t),
+ m_tariffs(tariffs),
m_services(svcs),
- store(st),
- sysAdmin(sa),
+ m_store(store),
+ m_sysAdmin(sysAdmin),
WriteServLog(Logger::get()),
isRunning(false),
handle(0)
{
}
//-----------------------------------------------------------------------------
-UsersImpl::~UsersImpl()
+bool UsersImpl::FindByNameNonLock(const std::string & login, user_iter * user)
{
-}
-//-----------------------------------------------------------------------------
-int UsersImpl::FindByNameNonLock(const std::string & login, user_iter * user)
-{
-const std::map<std::string, user_iter>::const_iterator iter(loginIndex.find(login));
+const auto iter = loginIndex.find(login);
if (iter == loginIndex.end())
- return -1;
-if (user)
+ return false;
+if (user != nullptr)
*user = iter->second;
-return 0;
+return true;
}
//-----------------------------------------------------------------------------
-int UsersImpl::FindByNameNonLock(const std::string & login, const_user_iter * user) const
+bool UsersImpl::FindByNameNonLock(const std::string & login, const_user_iter * user) const
{
-const std::map<std::string, user_iter>::const_iterator iter(loginIndex.find(login));
+const auto iter = loginIndex.find(login);
if (iter == loginIndex.end())
- return -1;
-if (user)
+ return false;
+if (user != nullptr)
*user = iter->second;
-return 0;
+return true;
}
//-----------------------------------------------------------------------------
int UsersImpl::FindByName(const std::string & login, UserPtr * user)
{
std::lock_guard<std::mutex> lock(m_mutex);
user_iter u;
-if (FindByNameNonLock(login, &u))
+if (!FindByNameNonLock(login, &u))
return -1;
*user = &(*u);
return 0;
{
std::lock_guard<std::mutex> lock(m_mutex);
const_user_iter u;
-if (FindByNameNonLock(login, &u))
+if (!FindByNameNonLock(login, &u))
return -1;
*user = &(*u);
return 0;
bool UsersImpl::Exists(const std::string & login) const
{
std::lock_guard<std::mutex> lock(m_mutex);
-const std::map<std::string, user_iter>::const_iterator iter(loginIndex.find(login));
+const auto iter = loginIndex.find(login);
return iter != loginIndex.end();
}
//-----------------------------------------------------------------------------
bool UsersImpl::TariffInUse(const std::string & tariffName) const
{
std::lock_guard<std::mutex> lock(m_mutex);
-std::list<UserImpl>::const_iterator iter;
-iter = users.begin();
+auto iter = users.begin();
while (iter != users.end())
{
if (iter->GetProperties().tariffName.Get() == tariffName)
std::lock_guard<std::mutex> lock(m_mutex);
const auto& priv = admin->priv();
-if (!priv.userAddDel)
+if (priv.userAddDel == 0)
{
WriteServLog("%s tried to add user \'%s\'. Access denied.",
admin->logStr().c_str(), login.c_str());
return -1;
}
-if (store->AddUser(login))
+if (m_store->AddUser(login) != 0)
return -1;
-UserImpl u(settings, store, tariffs, &sysAdmin, this, m_services);
+UserImpl u(settings, m_store, m_tariffs, &m_sysAdmin, this, m_services);
u.SetLogin(login);
{
// Fire all "on add" notifiers
- std::set<NotifierBase<UserPtr> *>::iterator ni = onAddNotifiers.begin();
+ auto ni = onAddNotifiers.begin();
while (ni != onAddNotifiers.end())
{
(*ni)->Notify(&users.front());
{
// Fire all "on add" implementation notifiers
- std::set<NotifierBase<UserImplPtr> *>::iterator ni = onAddNotifiersImpl.begin();
+ auto ni = onAddNotifiersImpl.begin();
while (ni != onAddNotifiersImpl.end())
{
(*ni)->Notify(&users.front());
const auto& priv = admin->priv();
user_iter u;
-if (!priv.userAddDel)
+if (priv.userAddDel == 0)
{
WriteServLog("%s tried to remove user \'%s\'. Access denied.",
admin->logStr().c_str(), login.c_str());
{
std::lock_guard<std::mutex> lock(m_mutex);
- if (FindByNameNonLock(login, &u))
+ if (!FindByNameNonLock(login, &u))
{
WriteServLog("%s tried to delete user \'%s\': not found.",
admin->logStr().c_str(),
}
{
- std::set<NotifierBase<UserPtr> *>::iterator ni = onDelNotifiers.begin();
+ auto ni = onDelNotifiers.begin();
while (ni != onDelNotifiers.end())
{
(*ni)->Notify(&(*u));
}
{
- std::set<NotifierBase<UserImplPtr> *>::iterator ni = onDelNotifiersImpl.begin();
+ auto ni = onDelNotifiersImpl.begin();
while (ni != onDelNotifiersImpl.end())
{
(*ni)->Notify(&(*u));
{
user_iter iter;
std::lock_guard<std::mutex> lock(m_mutex);
-if (FindByNameNonLock(login, &iter))
+if (!FindByNameNonLock(login, &iter))
{
WriteServLog("Attempt to authorize non-existant user '%s'", login.c_str());
return false;
iter->GetLogin().c_str());
return false;
}
- if (iter->Authorize(ip, enabledDirs, auth))
- return false;
- return true;
+ return iter->Authorize(ip, enabledDirs, auth) == 0;
}
-if (iter->Authorize(ip, enabledDirs, auth))
+if (iter->Authorize(ip, enabledDirs, auth) != 0)
return false;
AddToIPIdx(iter);
{
user_iter iter;
std::lock_guard<std::mutex> lock(m_mutex);
-if (FindByNameNonLock(login, &iter))
+if (!FindByNameNonLock(login, &iter))
{
WriteServLog("Attempt to unauthorize non-existant user '%s'", login.c_str());
printfd(__FILE__, "Attempt to unauthorize non-existant user '%s'", login.c_str());
iter->Unauthorize(auth, reason);
-if (!iter->GetAuthorized())
+if (iter->GetAuthorized() == 0)
DelFromIPIdx(ip);
return true;
{
std::vector<std::string> usersList;
usersList.clear();
-if (store->GetUsersList(&usersList) < 0)
+if (m_store->GetUsersList(&usersList) < 0)
{
- WriteServLog(store->GetStrError().c_str());
+ WriteServLog(m_store->GetStrError().c_str());
return -1;
}
user_iter ui;
unsigned errors = 0;
-for (unsigned int i = 0; i < usersList.size(); i++)
+for (const auto& user : usersList)
{
- UserImpl u(settings, store, tariffs, &sysAdmin, this, m_services);
+ UserImpl u(settings, m_store, m_tariffs, &m_sysAdmin, this, m_services);
- u.SetLogin(usersList[i]);
+ u.SetLogin(user);
users.push_front(u);
ui = users.begin();
{
sigset_t signalSet;
sigfillset(&signalSet);
-pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
+pthread_sigmask(SIG_BLOCK, &signalSet, nullptr);
printfd(__FILE__, "=====================| pid: %d |===================== \n", getpid());
stgUsleep(100000);
}
-std::list<USER_TO_DEL>::iterator iter(usersToDelete.begin());
+auto iter = usersToDelete.begin();
while (iter != usersToDelete.end())
{
iter->delTime -= 2 * userDeleteDelayTime;
//printfd(__FILE__, "USER::WriteInetStat\n");
int usersCnt = 0;
- // ðÉÛÅÍ ÀÚÅÒÏ× ÞÁÓÔÑÍÉ. ÷ ÐÅÒÅÒÙ×ÁÈ ×ÙÚÙ×ÁÅÍ USER::Run
- std::list<UserImpl>::iterator usr = users.begin();
+ auto usr = users.begin();
while (usr != users.end())
{
usersCnt++;
//-----------------------------------------------------------------------------
void UsersImpl::DayResetTraff(const struct tm & t1)
{
-int dayResetTraff = settings->GetDayResetTraff();
+auto dayResetTraff = settings->GetDayResetTraff();
if (dayResetTraff == 0)
dayResetTraff = DaysInCurrentMonth();
if (t1.tm_mday == dayResetTraff)
//-----------------------------------------------------------------------------
int UsersImpl::Start()
{
-if (ReadUsers())
+if (ReadUsers() != 0)
{
WriteServLog("USERS: Error: Cannot read users!");
return -1;
}
-m_thread = std::jthread([this](auto token){ Run(token); });
+m_thread = std::jthread([this](auto token){ Run(std::move(token)); });
return 0;
}
//-----------------------------------------------------------------------------
if (!isRunning)
break;
- nanosleep(&ts, NULL);
+ nanosleep(&ts, nullptr);
}
//after 5 seconds waiting thread still running. now kill it
printfd(__FILE__, "Before USERS::Run()\n");
for_each(users.begin(), users.end(), [](auto& user){ user.Run(); });
-// 'cause bind2st accepts only constant first param
-for (std::list<UserImpl>::iterator it = users.begin();
- it != users.end();
- ++it)
- it->WriteDetailStat(true);
+for (auto& user : users)
+ user.WriteDetailStat(true);
for_each(users.begin(), users.end(), [](auto& user){ user.WriteStat(); });
//for_each(users.begin(), users.end(), mem_fun_ref(&UserImpl::WriteConf));
printfd(__FILE__, "RealDelUser() users to del: %d\n", usersToDelete.size());
-std::list<USER_TO_DEL>::iterator iter;
-iter = usersToDelete.begin();
+auto iter = usersToDelete.begin();
while (iter != usersToDelete.end())
{
printfd(__FILE__, "RealDelUser() user=%s\n", iter->iter->GetLogin().c_str());
if (iter->delTime + userDeleteDelayTime < stgTime)
{
printfd(__FILE__, "RealDelUser() user=%s removed from DB\n", iter->iter->GetLogin().c_str());
- if (store->DelUser(iter->iter->GetLogin()))
+ if (m_store->DelUser(iter->iter->GetLogin()) != 0)
{
WriteServLog("Error removing user \'%s\' from database.", iter->iter->GetLogin().c_str());
}
++iter;
}
}
-return;
}
//-----------------------------------------------------------------------------
void UsersImpl::AddToIPIdx(user_iter user)
printfd(__FILE__, "USERS: Add IP Idx\n");
uint32_t ip = user->GetCurrIP();
//assert(ip && "User has non-null ip");
-if (!ip)
+if (ip == 0)
return; // User has disconnected
std::lock_guard<std::mutex> lock(m_mutex);
-const std::map<uint32_t, user_iter>::iterator it(
- ipIndex.lower_bound(ip)
-);
+const auto it = ipIndex.lower_bound(ip);
assert((it == ipIndex.end() || it->first != ip) && "User is not in index");
std::lock_guard<std::mutex> lock(m_mutex);
-const std::map<uint32_t, user_iter>::iterator it(
- ipIndex.find(ip)
-);
+const auto it = ipIndex.find(ip);
if (it == ipIndex.end())
return;
//-----------------------------------------------------------------------------
bool UsersImpl::FindByIPIdx(uint32_t ip, user_iter & iter) const
{
-std::map<uint32_t, user_iter>::const_iterator it(ipIndex.find(ip));
+auto it = ipIndex.find(ip);
if (it == ipIndex.end())
return false;
iter = it->second;
return true;
}
//-----------------------------------------------------------------------------
-int UsersImpl::FindByIPIdx(uint32_t ip, UserPtr * usr) const
+int UsersImpl::FindByIPIdx(uint32_t ip, UserPtr * user) const
{
std::lock_guard<std::mutex> lock(m_mutex);
user_iter iter;
if (FindByIPIdx(ip, iter))
{
- *usr = &(*iter);
+ *user = &(*iter);
return 0;
}
return -1;
}
//-----------------------------------------------------------------------------
-int UsersImpl::FindByIPIdx(uint32_t ip, UserImpl ** usr) const
+int UsersImpl::FindByIPIdx(uint32_t ip, UserImpl ** user) const
{
std::lock_guard<std::mutex> lock(m_mutex);
user_iter iter;
if (FindByIPIdx(ip, iter))
{
- *usr = &(*iter);
+ *user = &(*iter);
return 0;
}
{
std::lock_guard<std::mutex> lock(m_mutex);
-std::map<uint32_t, user_iter>::const_iterator it(ipIndex.find(ip));
-
-return it != ipIndex.end();
+return ipIndex.find(ip) != ipIndex.end();
}
//-----------------------------------------------------------------------------
bool UsersImpl::IsIPInUse(uint32_t ip, const std::string & login, ConstUserPtr * user) const
{
std::lock_guard<std::mutex> lock(m_mutex);
-std::list<UserImpl>::const_iterator iter;
-iter = users.begin();
+auto iter = users.begin();
while (iter != users.end())
{
if (iter->GetLogin() != login &&
!iter->GetProperties().ips.Get().isAnyIP() &&
iter->GetProperties().ips.Get().find(ip))
{
- if (user != NULL)
+ if (user != nullptr)
*user = &(*iter);
return true;
}
onDelNotifiersImpl.erase(n);
}
//-----------------------------------------------------------------------------
-int UsersImpl::OpenSearch()
+unsigned int UsersImpl::OpenSearch()
{
std::lock_guard<std::mutex> lock(m_mutex);
handle++;
//-----------------------------------------------------------------------------
int UsersImpl::SearchNext(int h, UserPtr * user)
{
- UserImpl * ptr = NULL;
- if (SearchNext(h, &ptr))
+ UserImpl * ptr = nullptr;
+ if (SearchNext(h, &ptr) != 0)
return -1;
*user = ptr;
return 0;
//-----------------------------------------------------------------------------
bool UsersImpl::TimeToWriteDetailStat(const struct tm & t)
{
-int statTime = settings->GetDetailStatWritePeriod();
+auto statTime = settings->GetDetailStatWritePeriod();
switch (statTime)
{
UsersImpl(SettingsImpl * s, Store * store,
Tariffs * tariffs, Services & svcs,
const Admin& sysAdmin);
- virtual ~UsersImpl();
int FindByName(const std::string & login, UserPtr * user) override;
int FindByName(const std::string & login, ConstUserPtr * user) const override;
bool IsIPInIndex(uint32_t ip) const override;
bool IsIPInUse(uint32_t ip, const std::string & login, ConstUserPtr * user) const override;
- int OpenSearch() override;
+ unsigned int OpenSearch() override;
int SearchNext(int handler, UserPtr * user) override;
int SearchNext(int handler, UserImpl ** user);
int CloseSearch(int handler) override;
void DelFromIPIdx(uint32_t ip);
bool FindByIPIdx(uint32_t ip, user_iter & iter) const;
- int FindByNameNonLock(const std::string & login, user_iter * user);
- int FindByNameNonLock(const std::string & login, const_user_iter * user) const;
+ bool FindByNameNonLock(const std::string & login, user_iter * user);
+ bool FindByNameNonLock(const std::string & login, const_user_iter * user) const;
void RealDelUser();
void ProcessActions();
std::map<std::string, user_iter> loginIndex;
SettingsImpl * settings;
- Tariffs * tariffs;
+ Tariffs * m_tariffs;
Services & m_services;
- Store * store;
- const Admin& sysAdmin;
+ Store * m_store;
+ const Admin& m_sysAdmin;
Logger & WriteServLog;
bool isRunning;
std::jthread m_thread;
mutable unsigned int handle;
- mutable std::map<int, user_iter> searchDescriptors;
+ mutable std::map<unsigned int, user_iter> searchDescriptors;
std::set<NotifierBase<UserPtr>*> onAddNotifiers;
std::set<NotifierBase<UserPtr>*> onDelNotifiers;
bool IsIPInUse(uint32_t, const std::string &, ConstUserPtr *) const override { return false; }
bool Exists(const std::string &) const override { return false; }
- int OpenSearch() override { return 0; }
+ unsigned int OpenSearch() override { return 0; }
int SearchNext(int /*handle*/, UserPtr * /*u*/) override { return -1; }
int CloseSearch(int /*handle*/) override { return 0; }