#include "stg/auth.h"
#include "stg/store.h"
#include "stg/module_settings.h"
-#include "stg/notifer.h"
#include "stg/user_ips.h"
#include "stg/user.h"
#include "stg/users.h"
#include <list>
#include <functional>
#include <utility>
+#include <mutex>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#include <jthread.hpp>
+#pragma GCC diagnostic pop
#include <sys/time.h>
-#include <pthread.h>
//#define IA_DEBUG (1)
//#define IA_PHASE_DEBUG (1)
protoVer(0),
password("NO PASSWORD")
{
- unsigned char keyL[PASSWD_LEN];
+ char keyL[PASSWD_LEN];
memset(keyL, 0, PASSWD_LEN);
- strncpy((char *)keyL, password.c_str(), PASSWD_LEN);
+ strncpy(keyL, password.c_str(), PASSWD_LEN);
Blowfish_Init(&ctx, keyL, PASSWD_LEN);
#ifdef IA_DEBUG
protoVer(ver),
password(user->GetProperties().password.Get())
{
- unsigned char keyL[PASSWD_LEN];
+ char keyL[PASSWD_LEN];
memset(keyL, 0, PASSWD_LEN);
- strncpy((char *)keyL, password.c_str(), PASSWD_LEN);
+ strncpy(keyL, password.c_str(), PASSWD_LEN);
Blowfish_Init(&ctx, keyL, PASSWD_LEN);
#ifdef IA_DEBUG
class AUTH_IA;
using UserPtr = STG::User*;
//-----------------------------------------------------------------------------
-class DEL_USER_NOTIFIER: public STG::NotifierBase<UserPtr> {
-public:
- explicit DEL_USER_NOTIFIER(AUTH_IA & a) : auth(a) {}
- virtual ~DEL_USER_NOTIFIER() {}
-
- void Notify(const UserPtr & user);
-private:
- DEL_USER_NOTIFIER(const DEL_USER_NOTIFIER & rvalue);
- DEL_USER_NOTIFIER & operator=(const DEL_USER_NOTIFIER & rvalue);
-
- AUTH_IA & auth;
-};
-//-----------------------------------------------------------------------------
class AUTH_IA : public STG::Auth {
-friend class DEL_USER_NOTIFIER;
public:
AUTH_IA();
~AUTH_IA() override;
AUTH_IA(const AUTH_IA & rvalue);
AUTH_IA & operator=(const AUTH_IA & rvalue);
- static void * Run(void *);
- static void * RunTimeouter(void * d);
+ void Run(std::stop_token token);
+ void RunTimeouter(std::stop_token token);
int PrepareNet();
int FinalizeNet();
void DelUser(UserPtr u);
int Timeouter();
int SendError(uint32_t ip, uint16_t port, int protoVer, const std::string & text);
- int Send(uint32_t ip, uint16_t port, const char * buffer, size_t len);
+ int Send(uint32_t ip, uint16_t port, const void* buffer, size_t len);
int RealSendMessage6(const STG::Message & msg, uint32_t ip, IA_USER & user);
int RealSendMessage7(const STG::Message & msg, uint32_t ip, IA_USER & user);
int RealSendMessage8(const STG::Message & msg, uint32_t ip, IA_USER & user);
AUTH_IA_SETTINGS iaSettings;
STG::ModuleSettings settings;
- bool nonstop;
-
bool isRunningRun;
bool isRunningRunTimeouter;
mutable std::map<uint32_t, IA_USER> ip2user;
- pthread_t recvThread;
- pthread_t timeouterThread;
- mutable pthread_mutex_t mutex;
+ std::jthread m_thread;
+ std::jthread m_timeouterThread;
+ mutable std::mutex m_mutex;
int listenSocket;
uint32_t enabledDirs;
- DEL_USER_NOTIFIER onDelUserNotifier;
+ STG::ScopedConnection m_onDelUserConn;
STG::PluginLogger logger;
AUTH_IA * auth;
};
-//-----------------------------------------------------------------------------
-inline
-void DEL_USER_NOTIFIER::Notify(const UserPtr & user)
-{
- auth.DelUser(user);
-}