class IS_CONTAINS_USER: public binary_function<varType, user_iter, bool>
{
public:
- bool operator()(varType notifier, user_iter user) const
+ IS_CONTAINS_USER(const user_iter & u) : user(u) {}
+ bool operator()(varType notifier) const
{
return notifier.GetUser() == user;
};
+private:
+ const user_iter & user;
};
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
PING_SETTINGS::PING_SETTINGS()
- : pingDelay(0),
- errorStr()
+ : pingDelay(0)
{
}
//-----------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------
PING::PING()
+ : users(NULL),
+ nonstop(false),
+ isRunning(false),
+ onAddUserNotifier(*this),
+ onDelUserNotifier(*this)
{
pthread_mutex_init(&mutex, NULL);
-isRunning = false;
}
//-----------------------------------------------------------------------------
PING::~PING()
{
GetUsers();
-onAddUserNotifier.SetPinger(this);
-onDelUserNotifier.SetPinger(this);
users->AddNotifierUserAdd(&onAddUserNotifier);
users->AddNotifierUserDel(&onDelUserNotifier);
//-----------------------------------------------------------------------------
void PING::SetUserNotifiers(user_iter u)
{
-CHG_CURRIP_NOTIFIER_PING ChgCurrIPNotifier;
-CHG_IPS_NOTIFIER_PING ChgIPNotifier;
+CHG_CURRIP_NOTIFIER_PING ChgCurrIPNotifier(*this, u);
+CHG_IPS_NOTIFIER_PING ChgIPNotifier(*this, u);
-ChgCurrIPNotifier.SetPinger(this);
-ChgCurrIPNotifier.SetUser(u);
ChgCurrIPNotifierList.push_front(ChgCurrIPNotifier);
-
-ChgIPNotifier.SetPinger(this);
-ChgIPNotifier.SetUser(u);
ChgIPNotifierList.push_front(ChgIPNotifier);
u->AddCurrIPAfterNotifier(&(*ChgCurrIPNotifierList.begin()));
void PING::UnSetUserNotifiers(user_iter u)
{
// --- CurrIP ---
-IS_CONTAINS_USER<CHG_CURRIP_NOTIFIER_PING> IsContainsUserCurrIP;
-IS_CONTAINS_USER<CHG_IPS_NOTIFIER_PING> IsContainsUserIP;
+IS_CONTAINS_USER<CHG_CURRIP_NOTIFIER_PING> IsContainsUserCurrIP(u);
+IS_CONTAINS_USER<CHG_IPS_NOTIFIER_PING> IsContainsUserIP(u);
-list<CHG_CURRIP_NOTIFIER_PING>::iterator currIPter;
-list<CHG_IPS_NOTIFIER_PING>::iterator IPIter;
+list<CHG_CURRIP_NOTIFIER_PING>::iterator currIPter;
+list<CHG_IPS_NOTIFIER_PING>::iterator IPIter;
currIPter = find_if(ChgCurrIPNotifierList.begin(),
ChgCurrIPNotifierList.end(),
- bind2nd(IsContainsUserCurrIP, u));
+ IsContainsUserCurrIP);
if (currIPter != ChgCurrIPNotifierList.end())
{
// --- IP ---
IPIter = find_if(ChgIPNotifierList.begin(),
ChgIPNotifierList.end(),
- bind2nd(IsContainsUserIP, u));
+ IsContainsUserIP);
if (IPIter != ChgIPNotifierList.end())
{
//-----------------------------------------------------------------------------
void CHG_CURRIP_NOTIFIER_PING::Notify(const uint32_t & oldIP, const uint32_t & newIP)
{
-ping->pinger.DelIP(oldIP);
+ping.pinger.DelIP(oldIP);
if (newIP)
{
- ping->pinger.AddIP(newIP);
+ ping.pinger.AddIP(newIP);
}
}
//-----------------------------------------------------------------------------
{
if (oldIPS.OnlyOneIP())
{
- ping->pinger.DelIP(oldIPS[0].ip);
+ ping.pinger.DelIP(oldIPS[0].ip);
}
if (newIPS.OnlyOneIP())
{
- ping->pinger.AddIP(newIPS[0].ip);
+ ping.pinger.AddIP(newIPS[0].ip);
}
}
//-----------------------------------------------------------------------------
void ADD_USER_NONIFIER_PING::Notify(const user_iter & user)
{
-ping->AddUser(user);
+ping.AddUser(user);
}
//-----------------------------------------------------------------------------
void DEL_USER_NONIFIER_PING::Notify(const user_iter & user)
{
-ping->DelUser(user);
+ping.DelUser(user);
}
//-----------------------------------------------------------------------------
-
-
-
-
-
-
#ifndef PING_H
#define PING_H
-#include <string>
#include <pthread.h>
+#include <string>
+
#include "os_int.h"
#include "base_plugin.h"
#include "notifer.h"
class CHG_CURRIP_NOTIFIER_PING: public PROPERTY_NOTIFIER_BASE<uint32_t>
{
public:
- void Notify(const uint32_t & oldIP, const uint32_t & newIP);
- void SetUser(user_iter u) { user = u; }
- user_iter GetUser() {return user; }
- void SetPinger(const PING * p) { ping = p; }
+ CHG_CURRIP_NOTIFIER_PING(const PING & p, user_iter u) : user(u), ping(p) {}
+ void Notify(const uint32_t & oldIP, const uint32_t & newIP);
+ user_iter GetUser() { return user; }
private:
- user_iter user;
- const PING * ping;
+ user_iter user;
+ const PING & ping;
};
//-----------------------------------------------------------------------------
class CHG_IPS_NOTIFIER_PING: public PROPERTY_NOTIFIER_BASE<USER_IPS>
{
public:
- void Notify(const USER_IPS & oldIPS, const USER_IPS & newIPS);
- void SetUser(user_iter u) { user = u; }
- user_iter GetUser() {return user; }
- void SetPinger(const PING * p) { ping = p; }
+ CHG_IPS_NOTIFIER_PING(const PING & p, user_iter u) : user(u), ping(p) {}
+ void Notify(const USER_IPS & oldIPS, const USER_IPS & newIPS);
+ user_iter GetUser() { return user; }
private:
- user_iter user;
- const PING * ping;
+ user_iter user;
+ const PING & ping;
};
//-----------------------------------------------------------------------------
class ADD_USER_NONIFIER_PING: public NOTIFIER_BASE<user_iter>
{
public:
- ADD_USER_NONIFIER_PING(){};
- virtual ~ADD_USER_NONIFIER_PING(){};
-
- void SetPinger(PING * p) { ping = p; }
+ ADD_USER_NONIFIER_PING(PING & p) : ping(p) {}
+ virtual ~ADD_USER_NONIFIER_PING() {}
void Notify(const user_iter & user);
private:
- PING * ping;
+ PING & ping;
};
//-----------------------------------------------------------------------------
class DEL_USER_NONIFIER_PING: public NOTIFIER_BASE<user_iter>
{
public:
- DEL_USER_NONIFIER_PING(){};
- virtual ~DEL_USER_NONIFIER_PING(){};
-
- void SetPinger(PING * p) { ping = p; }
+ DEL_USER_NONIFIER_PING(PING & p) : ping(p) {}
+ virtual ~DEL_USER_NONIFIER_PING() {}
void Notify(const user_iter & user);
private:
- PING * ping;
+ PING & ping;
};
//-----------------------------------------------------------------------------
class PING_SETTINGS
{
public:
- PING_SETTINGS();
- virtual ~PING_SETTINGS(){};
- const string& GetStrError() const { return errorStr; }
- int ParseSettings(const MODULE_SETTINGS & s);
- int GetPingDelay(){ return pingDelay; };
+ PING_SETTINGS();
+ virtual ~PING_SETTINGS() {}
+ const string& GetStrError() const { return errorStr; }
+ int ParseSettings(const MODULE_SETTINGS & s);
+ int GetPingDelay() { return pingDelay; }
private:
- int ParseIntInRange(const string & str, int min, int max, int * val);
- int pingDelay;
- mutable string errorStr;
+ int ParseIntInRange(const string & str, int min, int max, int * val);
+
+ int pingDelay;
+ mutable string errorStr;
};
//-----------------------------------------------------------------------------
class PING: public BASE_PLUGIN
PING();
virtual ~PING();
- void SetUsers(USERS * u);
- void SetTariffs(TARIFFS *){};
- void SetAdmins(ADMINS *){};
- void SetTraffcounter(TRAFFCOUNTER *){};
- void SetStore(BASE_STORE *){};
- void SetStgSettings(const SETTINGS *){};
- void SetSettings(const MODULE_SETTINGS & s);
- int ParseSettings();
+ void SetUsers(USERS * u);
+ void SetTariffs(TARIFFS *) {}
+ void SetAdmins(ADMINS *) {}
+ void SetTraffcounter(TRAFFCOUNTER *) {}
+ void SetStore(BASE_STORE *) {}
+ void SetStgSettings(const SETTINGS *) {}
+ void SetSettings(const MODULE_SETTINGS & s);
+ int ParseSettings();
- int Start();
- int Stop();
- int Reload() { return 0; };
- bool IsRunning();
+ int Start();
+ int Stop();
+ int Reload() { return 0; }
+ bool IsRunning();
- const string & GetStrError() const;
- const string GetVersion() const;
- uint16_t GetStartPosition() const;
- uint16_t GetStopPosition() const;
+ const string & GetStrError() const;
+ const string GetVersion() const;
+ uint16_t GetStartPosition() const;
+ uint16_t GetStopPosition() const;
- void AddUser(user_iter u);
- void DelUser(user_iter u);
+ void AddUser(user_iter u);
+ void DelUser(user_iter u);
private:
- void GetUsers();
- void SetUserNotifiers(user_iter u);
- void UnSetUserNotifiers(user_iter u);
- static void * Run(void * d);
- mutable string errorStr;
- PING_SETTINGS pingSettings;
- MODULE_SETTINGS settings;
- USERS * users;
- list<user_iter> usersList;
+ void GetUsers();
+ void SetUserNotifiers(user_iter u);
+ void UnSetUserNotifiers(user_iter u);
+ static void * Run(void * d);
+
+ mutable string errorStr;
+ PING_SETTINGS pingSettings;
+ MODULE_SETTINGS settings;
+ USERS * users;
+ list<user_iter> usersList;
/*
ÍÙ ÄÏÌÖÎÙ ÐÅÒÅÐÒÏ×ÅÒÉÔØ ×ÏÚÍÏÖÎÏÓÔØ ÐÉÎÇÏ×ÁÎÉÑ ÀÚÅÒÁ ÐÒÉ ÉÚÍÅÎÅÎÉÉ
- currIP
- ips
*/
- pthread_t thread;
- pthread_mutex_t mutex;
- bool nonstop;
- bool isRunning;
- mutable STG_PINGER pinger;
+ pthread_t thread;
+ pthread_mutex_t mutex;
+ bool nonstop;
+ bool isRunning;
+ mutable STG_PINGER pinger;
- list<CHG_CURRIP_NOTIFIER_PING> ChgCurrIPNotifierList;
- list<CHG_IPS_NOTIFIER_PING> ChgIPNotifierList;
+ list<CHG_CURRIP_NOTIFIER_PING> ChgCurrIPNotifierList;
+ list<CHG_IPS_NOTIFIER_PING> ChgIPNotifierList;
- ADD_USER_NONIFIER_PING onAddUserNotifier;
- DEL_USER_NONIFIER_PING onDelUserNotifier;
+ ADD_USER_NONIFIER_PING onAddUserNotifier;
+ DEL_USER_NONIFIER_PING onDelUserNotifier;
};
//-----------------------------------------------------------------------------
#endif
-
-