X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/45dadc36ce7759011b174a4597c55e899c9dfc04..16e9905f82947dd471c09382122d8150ba6fda1a:/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h?ds=inline diff --git a/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h b/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h index 1158955f..65c15c7b 100644 --- a/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h +++ b/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h @@ -17,42 +17,36 @@ /* * Author : Boris Mikhailenko */ +#pragma once -/* - $Revision: 1.34 $ - $Date: 2010/09/10 06:39:19 $ - $Author: faust $ - */ - -#ifndef INETACCESS_H -#define INETACCESS_H - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "stg/os_int.h" #include "stg/auth.h" #include "stg/store.h" -#include "stg/notifer.h" +#include "stg/module_settings.h" #include "stg/user_ips.h" #include "stg/user.h" #include "stg/users.h" +#include "stg/user_property.h" #include "stg/ia_packets.h" #include "stg/blowfish.h" #include "stg/logger.h" #include "stg/utime.h" +#include "stg/logger.h" -extern "C" PLUGIN * GetPlugin(); +#include +#include +#include +#include +#include +#include +#include +#include +#include +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wshadow" +#include +#pragma GCC diagnostic pop -#define IA_PROTO_VER (6) +#include //#define IA_DEBUG (1) //#define IA_PHASE_DEBUG (1) @@ -93,7 +87,6 @@ public: void SetPhase2(); void SetPhase3(); void SetPhase4(); - void SetPhase5(); int GetPhase() const; void UpdateTime(); @@ -117,27 +110,24 @@ private: }; //----------------------------------------------------------------------------- struct IA_USER { + using ConstUserPtr = const STG::User*; IA_USER() - : login(), - user(NULL), - phase(), + : user(NULL), lastSendAlive(0), - rnd(random()), + rnd(static_cast(random())), port(0), - ctx(), - messagesToSend(), 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 aliveSent = false; #endif - }; + } IA_USER(const IA_USER & u) : login(u.login), @@ -155,26 +145,24 @@ struct IA_USER { aliveSent = u.aliveSent; #endif memcpy(&ctx, &u.ctx, sizeof(BLOWFISH_CTX)); - }; + } IA_USER(const std::string & l, - CONST_USER_PTR u, + ConstUserPtr u, uint16_t p, int ver) : login(l), user(u), - phase(), lastSendAlive(0), - rnd(random()), + rnd(static_cast(random())), port(p), - ctx(), messagesToSend(), protoVer(ver), - password(user->GetProperty().password.Get()) + 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 @@ -183,13 +171,13 @@ struct IA_USER { } std::string login; - CONST_USER_PTR user; + ConstUserPtr user; IA_PHASE phase; UTIME lastSendAlive; uint32_t rnd; uint16_t port; BLOWFISH_CTX ctx; - std::list messagesToSend; + std::vector messagesToSend; int protoVer; std::string password; #ifdef IA_DEBUG @@ -203,13 +191,14 @@ private: class AUTH_IA_SETTINGS { public: AUTH_IA_SETTINGS(); - virtual ~AUTH_IA_SETTINGS() {}; - const std::string & GetStrError() const { return errorStr; }; - int ParseSettings(const MODULE_SETTINGS & s); - int GetUserDelay() const { return userDelay; }; - int GetUserTimeout() const { return userTimeout; }; - int GetUserPort() const { return port; }; - FREEMB GetFreeMbShowType() const { return freeMbShowType; }; + virtual ~AUTH_IA_SETTINGS() {} + const std::string & GetStrError() const { return errorStr; } + int ParseSettings(const STG::ModuleSettings & s); + UTIME GetUserDelay() const { return UTIME(userDelay); } + UTIME GetUserTimeout() const { return UTIME(userTimeout); } + uint16_t GetUserPort() const { return port; } + FREEMB GetFreeMbShowType() const { return freeMbShowType; } + bool LogProtocolErrors() const { return logProtocolErrors; } private: int userDelay; @@ -217,58 +206,46 @@ private: uint16_t port; std::string errorStr; FREEMB freeMbShowType; + bool logProtocolErrors; }; //----------------------------------------------------------------------------- class AUTH_IA; +using UserPtr = STG::User*; //----------------------------------------------------------------------------- -class DEL_USER_NOTIFIER: public NOTIFIER_BASE { -public: - DEL_USER_NOTIFIER(AUTH_IA & a) : auth(a) {} - virtual ~DEL_USER_NOTIFIER() {} - - void Notify(const USER_PTR & 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 AUTH { -friend class DEL_USER_NOTIFIER; +class AUTH_IA : public STG::Auth { public: AUTH_IA(); - virtual ~AUTH_IA(); + ~AUTH_IA() override; - void SetUsers(USERS * u) { users = u; } - void SetStgSettings(const SETTINGS * s) { stgSettings = s; } - void SetSettings(const MODULE_SETTINGS & s) { settings = s; } - int ParseSettings(); + void SetUsers(STG::Users * u) override { users = u; } + void SetStgSettings(const STG::Settings * s) override { stgSettings = s; } + void SetSettings(const STG::ModuleSettings & s) override { settings = s; } + int ParseSettings() override; - int Start(); - int Stop(); - int Reload() { return 0; } - bool IsRunning() { return isRunningRunTimeouter || isRunningRun; } + int Start() override; + int Stop() override; + int Reload(const STG::ModuleSettings & ms) override; + bool IsRunning() override { return isRunningRunTimeouter || isRunningRun; } - const std::string & GetStrError() const { return errorStr; } - const std::string GetVersion() const { return "InetAccess authorization plugin v.1.4"; } - uint16_t GetStartPosition() const { return 50; } - uint16_t GetStopPosition() const { return 50; } + const std::string & GetStrError() const override { return errorStr; } + std::string GetVersion() const override { return "InetAccess authorization plugin v.1.4"; } + uint16_t GetStartPosition() const override { return 30; } + uint16_t GetStopPosition() const override { return 30; } - int SendMessage(const STG_MSG & msg, uint32_t ip) const; + int SendMessage(const STG::Message & msg, uint32_t ip) const override; private: 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(USER_PTR u); + void DelUser(UserPtr u); int RecvData(char * buffer, int bufferSize); - int CheckHeader(const char * buffer, int * protoVer); - int PacketProcessor(char * buff, int dataLen, uint32_t sip, uint16_t sport, int protoVer, USER_PTR user); + int CheckHeader(const char * buffer, uint32_t sip, int * protoVer); + int PacketProcessor(void * buff, size_t dataLen, uint32_t sip, uint16_t sport, int protoVer, UserPtr user); int Process_CONN_SYN_6(CONN_SYN_6 * connSyn, IA_USER * iaUser, uint32_t sip); int Process_CONN_SYN_7(CONN_SYN_7 * connSyn, IA_USER * iaUser, uint32_t sip); @@ -289,15 +266,15 @@ private: int Process_DISCONN_ACK_6(DISCONN_ACK_6 * disconnSyn, IA_USER * iaUser, uint32_t sip, - map::iterator it); + std::map::iterator it); int Process_DISCONN_ACK_7(DISCONN_ACK_7 * disconnSyn, IA_USER * iaUser, uint32_t sip, - map::iterator it); + std::map::iterator it); int Process_DISCONN_ACK_8(DISCONN_ACK_8 * disconnSyn, IA_USER * iaUser, uint32_t sip, - map::iterator it); + std::map::iterator it); int Send_CONN_SYN_ACK_6(IA_USER * iaUser, uint32_t sip); int Send_CONN_SYN_ACK_7(IA_USER * iaUser, uint32_t sip); @@ -311,37 +288,35 @@ private: int Send_DISCONN_SYN_ACK_7(IA_USER * iaUser, uint32_t sip); int Send_DISCONN_SYN_ACK_8(IA_USER * iaUser, uint32_t sip); - int Send_FIN_6(IA_USER * iaUser, uint32_t sip, map::iterator it); - int Send_FIN_7(IA_USER * iaUser, uint32_t sip, map::iterator it); - int Send_FIN_8(IA_USER * iaUser, uint32_t sip, map::iterator it); + int Send_FIN_6(IA_USER * iaUser, uint32_t sip, std::map::iterator it); + int Send_FIN_7(IA_USER * iaUser, uint32_t sip, std::map::iterator it); + int Send_FIN_8(IA_USER * iaUser, uint32_t sip, std::map::iterator it); 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, int len); - int RealSendMessage6(const STG_MSG & msg, uint32_t ip, IA_USER & user); - int RealSendMessage7(const STG_MSG & msg, uint32_t ip, IA_USER & user); - int RealSendMessage8(const STG_MSG & msg, uint32_t ip, IA_USER & user); + 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); BLOWFISH_CTX ctxS; //for loginS mutable std::string errorStr; AUTH_IA_SETTINGS iaSettings; - MODULE_SETTINGS settings; - - bool nonstop; + STG::ModuleSettings settings; bool isRunningRun; bool isRunningRunTimeouter; - USERS * users; - const SETTINGS * stgSettings; + STG::Users * users; + const STG::Settings * stgSettings; mutable std::map 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; @@ -358,18 +333,18 @@ private: std::map packetTypes; - STG_LOGGER & WriteServLog; - uint32_t enabledDirs; - DEL_USER_NOTIFIER onDelUserNotifier; + STG::ScopedConnection m_onDelUserConn; + + STG::PluginLogger logger; friend class UnauthorizeUser; }; //----------------------------------------------------------------------------- class UnauthorizeUser : std::unary_function &, void> { public: - UnauthorizeUser(AUTH_IA * a) : auth(a) {} + explicit UnauthorizeUser(AUTH_IA * a) : auth(a) {} UnauthorizeUser(const UnauthorizeUser & rvalue) : auth(rvalue.auth) {} void operator()(const std::pair & p) { @@ -380,11 +355,3 @@ class UnauthorizeUser : std::unary_function & AUTH_IA * auth; }; -//----------------------------------------------------------------------------- -inline -void DEL_USER_NOTIFIER::Notify(const USER_PTR & user) -{ - auth.DelUser(user); -} - -#endif