X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8c6fa3fbaccc22127280bf77a48fab5a3ee0716e..46b0747592074017ff0ea4b33d4a7194235886e5:/stargazer/plugins/configuration/rpcconfig/rpcconfig.h diff --git a/stargazer/plugins/configuration/rpcconfig/rpcconfig.h b/stargazer/plugins/configuration/rpcconfig/rpcconfig.h new file mode 100644 index 00000000..e45ed4f1 --- /dev/null +++ b/stargazer/plugins/configuration/rpcconfig/rpcconfig.h @@ -0,0 +1,116 @@ +#ifndef __RPC_CONFIG_H__ +#define __RPC_CONFIG_H__ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "stg/plugin.h" +#include "stg/admin_conf.h" +#include "stg/module_settings.h" +#include "stg/logger.h" + +#define RPC_CONFIG_VERSION "Stargazer RPC v. 0.2" + +class ADMINS; +class TARIFFS; +class USERS; +class STORE; + +class RPC_CONFIG_SETTINGS +{ +public: + RPC_CONFIG_SETTINGS(); + virtual ~RPC_CONFIG_SETTINGS() {} + const std::string & GetStrError() const { return errorStr; } + int ParseSettings(const MODULE_SETTINGS & s); + uint16_t GetPort() const { return port; } + double GetCookieTimeout() const { return cookieTimeout; } + +private: + std::string errorStr; + uint16_t port; + double cookieTimeout; +}; + +struct ADMIN_INFO +{ + ADMIN_INFO() + : admin(), + accessTime(0), + priviledges() + {} + + std::string admin; + time_t accessTime; + PRIV priviledges; +}; + +class RPC_CONFIG : public PLUGIN +{ +public: + RPC_CONFIG(); + virtual ~RPC_CONFIG(); + + void SetUsers(USERS * u) { users = u; } + void SetTariffs(TARIFFS * t) { tariffs = t; } + void SetAdmins(ADMINS * a) { admins = a; } + void SetStore(STORE * s) { store = s; } + void SetStgSettings(const SETTINGS * s); + void SetSettings(const MODULE_SETTINGS & s) { settings = s; } + int ParseSettings(); + + int Start(); + int Stop(); + int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; } + bool IsRunning() { return running && !stopped; } + + const std::string & GetStrError() const { return errorStr; } + std::string GetVersion() const { return RPC_CONFIG_VERSION; } + uint16_t GetStartPosition() const { return 20; } + uint16_t GetStopPosition() const { return 20; } + + bool GetAdminInfo(const std::string & cookie, + ADMIN_INFO * info); + bool CheckAdmin(const std::string & login, + const std::string & password, + std::string * cookie); + bool LogoutAdmin(const std::string & cookie); + +private: + RPC_CONFIG(const RPC_CONFIG & rvalue); + RPC_CONFIG & operator=(const RPC_CONFIG & rvalue); + + static void * Run(void *); + std::string GetCookie() const; + void InitiateRegistry(); + + mutable std::string errorStr; + RPC_CONFIG_SETTINGS rpcConfigSettings; + USERS * users; + ADMINS * admins; + TARIFFS * tariffs; + STORE * store; + MODULE_SETTINGS settings; + int fd; + xmlrpc_c::registry rpcRegistry; + xmlrpc_c::serverAbyss * rpcServer; + bool running; + bool stopped; + pthread_t tid; + std::map cookies; + size_t dayFee; + std::vector dirNames; + PLUGIN_LOGGER logger; +}; + +#endif