$Author: faust $
*/
-#include <stdio.h>
#include <unistd.h>
-#include <signal.h>
+
+#include <csignal>
+#include <algorithm> // for_each
+#include <functional> // mem_fun_ref
#include "ao.h"
#include "user.h"
#include "users.h"
-#include "../../../user_property.h"
+#include "user_property.h"
+#include "common.h"
#include "../../../eventloop.h"
class AO_CREATOR
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
-// ëÌÁÓÓ ÄÌÑ ÐÏÉÓËÁ ÀÚÅÒÁ × ÓÐÉÓËÅ ÎÏÔÉÆÉËÁÔÏÒÏ×
template <typename varType>
class IS_CONTAINS_USER: public binary_function<varType, USER_PTR, bool>
{
{
}
//-----------------------------------------------------------------------------
-void AUTH_AO::SetUsers(USERS * u)
-{
-users = u;
-}
-//-----------------------------------------------------------------------------
-void AUTH_AO::SetSettings(const MODULE_SETTINGS & s)
-{
-settings = s;
-}
-//-----------------------------------------------------------------------------
-int AUTH_AO::ParseSettings()
-{
-return 0;
-}
-//-----------------------------------------------------------------------------
-const string & AUTH_AO::GetStrError() const
-{
-return errorStr;
-}
-//-----------------------------------------------------------------------------
int AUTH_AO::Start()
{
GetUsers();
-list<USER_PTR>::iterator users_iter;
-
-/*onAddUserNotifier.SetAuthorizator(this);
-onDelUserNotifier.SetAuthorizator(this);*/
users->AddNotifierUserAdd(&onAddUserNotifier);
users->AddNotifierUserDel(&onDelUserNotifier);
-users_iter = usersList.begin();
-while (users_iter != usersList.end())
+/*list<USER_PTR>::iterator it = usersList.begin();
+while (it != usersList.end())
{
- UpdateUserAuthorization(*users_iter);
- ++users_iter;
- }
+ UpdateUserAuthorization(*it);
+ ++it;
+ }*/
+std::for_each(usersList.begin(), usersList.end(), std::bind1st(std::mem_fun(&AUTH_AO::UpdateUserAuthorization), this));
+
isRunning = true;
+
return 0;
}
//-----------------------------------------------------------------------------
return 0;
}
//-----------------------------------------------------------------------------
-bool AUTH_AO::IsRunning()
-{
-return isRunning;
-}
-//-----------------------------------------------------------------------------
-uint16_t AUTH_AO::GetStartPosition() const
-{
-return 70;
-}
-//-----------------------------------------------------------------------------
-uint16_t AUTH_AO::GetStopPosition() const
-{
-return 70;
-}
-//-----------------------------------------------------------------------------
void AUTH_AO::SetUserNotifiers(USER_PTR u)
{
// ---------- AlwaysOnline -------------------
CHG_BEFORE_NOTIFIER<int> BeforeChgAONotifier(*this, u);
CHG_AFTER_NOTIFIER<int> AfterChgAONotifier(*this, u);
-/*BeforeChgAONotifier.SetAuthorizator(this);
-BeforeChgAONotifier.SetUser(u);*/
BeforeChgAONotifierList.push_front(BeforeChgAONotifier);
-
-/*AfterChgAONotifier.SetAuthorizator(this);
-AfterChgAONotifier.SetUser(u);*/
AfterChgAONotifierList.push_front(AfterChgAONotifier);
u->GetProperty().alwaysOnline.AddBeforeNotifier(&(*BeforeChgAONotifierList.begin()));
CHG_BEFORE_NOTIFIER<USER_IPS> BeforeChgIPNotifier(*this, u);
CHG_AFTER_NOTIFIER<USER_IPS> AfterChgIPNotifier(*this, u);
-/*BeforeChgIPNotifier.SetAuthorizator(this);
-BeforeChgIPNotifier.SetUser(u);*/
BeforeChgIPNotifierList.push_front(BeforeChgIPNotifier);
-
-/*AfterChgIPNotifier.SetAuthorizator(this);
-AfterChgIPNotifier.SetUser(u);*/
AfterChgIPNotifierList.push_front(AfterChgIPNotifier);
u->GetProperty().ips.AddBeforeNotifier(&(*BeforeChgIPNotifierList.begin()));
return;
}
-while (1)
+while (users->SearchNext(h, &u))
{
- if (users->SearchNext(h, &u))
- {
- break;
- }
usersList.push_back(u);
SetUserNotifiers(u);
}
USER_IPS ips = u->GetProperty().ips;
if (ips.OnlyOneIP())
{
- if (u->Authorize(ips[0].ip, "", 0xFFffFFff, this) == 0)
+ if (u->Authorize(ips[0].ip, 0xFFffFFff, this) == 0)
{
}
}
{
Unauthorize(u);
UnSetUserNotifiers(u);
+usersList.remove(u);
-list<USER_PTR>::iterator users_iter;
+/*list<USER_PTR>::iterator users_iter;
users_iter = usersList.begin();
while (users_iter != usersList.end())
break;
}
++users_iter;
- }
+ }*/
}
//-----------------------------------------------------------------------------
int AUTH_AO::SendMessage(const STG_MSG &, uint32_t) const