X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/ede91934442fd804d7b818971a44e3ad795cb01f..bee1318e72d01e37085e44d9c100926419b3c7ca:/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp diff --git a/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp b/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp index 7304f280..d3fdba55 100644 --- a/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp +++ b/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp @@ -1,38 +1,23 @@ #include #include -#include "rpcconfig.h" +#include +#include -#include "admin.h" -#include "module_settings.h" +#include "stg/common.h" +#include "stg/admin.h" +#include "stg/module_settings.h" +#include "stg/settings.h" +#include "stg/plugin_creator.h" +#include "rpcconfig.h" #include "info_methods.h" #include "users_methods.h" #include "tariffs_methods.h" #include "admins_methods.h" #include "messages_methods.h" -class RPC_CONFIG_CREATOR { -private: - RPC_CONFIG * rpcconfig; - -public: - RPC_CONFIG_CREATOR() - : rpcconfig(new RPC_CONFIG()) - { - } - ~RPC_CONFIG_CREATOR() - { - delete rpcconfig; - } - - RPC_CONFIG * GetPlugin() - { - return rpcconfig; - } -}; - -RPC_CONFIG_CREATOR rpcc; +PLUGIN_CREATOR rpcc; RPC_CONFIG_SETTINGS::RPC_CONFIG_SETTINGS() : errorStr(), @@ -41,32 +26,14 @@ RPC_CONFIG_SETTINGS::RPC_CONFIG_SETTINGS() { } -int RPC_CONFIG_SETTINGS::ParseIntInRange(const string & str, - int min, - int max, - int * val) -{ -if (str2x(str.c_str(), *val)) - { - errorStr = "Incorrect value \'" + str + "\'."; - return -1; - } -if (*val < min || *val > max) - { - errorStr = "Value \'" + str + "\' out of range."; - return -1; - } -return 0; -} - int RPC_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s) { int p; PARAM_VALUE pv; -vector::const_iterator pvi; +std::vector::const_iterator pvi; pv.param = "Port"; -pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv); +pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv); if (pvi == s.moduleParams.end()) { errorStr = "Parameter \'Port\' not found."; @@ -82,7 +49,7 @@ if (ParseIntInRange(pvi->value[0], 2, 65535, &p)) port = p; pv.param = "CookieTimeout"; -pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv); +pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv); if (pvi == s.moduleParams.end()) { cookieTimeout = 1800; // 30 * 60 @@ -100,20 +67,27 @@ else return 0; } -BASE_PLUGIN * GetPlugin() +PLUGIN * GetPlugin() { return rpcc.GetPlugin(); } RPC_CONFIG::RPC_CONFIG() - : users(NULL), + : errorStr(), + rpcConfigSettings(), + users(NULL), admins(NULL), tariffs(NULL), store(NULL), - stgSettings(NULL), + settings(), + rpcRegistry(), rpcServer(NULL), running(false), - stopped(true) + stopped(true), + tid(), + cookies(), + dayFee(0), + dirNames() { } @@ -133,6 +107,15 @@ if (ret) return ret; } +void RPC_CONFIG::SetStgSettings(const SETTINGS * settings) +{ + dayFee = settings->GetDayFee(); + dirNames.erase(dirNames.begin(), dirNames.end()); + for (size_t i = 0; i < DIR_NUM; ++i) { + dirNames.push_back(settings->GetDirName(i)); + } +} + int RPC_CONFIG::Start() { InitiateRegistry(); @@ -155,7 +138,10 @@ int RPC_CONFIG::Stop() { running = false; for (int i = 0; i < 5 && !stopped; ++i) - usleep(200000); + { + struct timespec ts = {0, 200000000}; + nanosleep(&ts, NULL); + } //rpcServer->terminate(); if (!stopped) { @@ -165,9 +151,13 @@ if (!stopped) printfd(__FILE__, "Failed to kill thread\n"); } for (int i = 0; i < 25 && !stopped; ++i) - usleep(200000); + { + struct timespec ts = {0, 200000000}; + nanosleep(&ts, NULL); + } if (!stopped) { + running = true; printfd(__FILE__, "Failed to stop RPC thread\n"); errorStr = "Failed to stop RPC thread"; return -1; @@ -182,6 +172,10 @@ return 0; void * RPC_CONFIG::Run(void * rc) { +sigset_t signalSet; +sigfillset(&signalSet); +pthread_sigmask(SIG_BLOCK, &signalSet, NULL); + RPC_CONFIG * config = static_cast(rc); config->stopped = false; @@ -224,9 +218,9 @@ bool RPC_CONFIG::CheckAdmin(const std::string & login, const std::string & password, std::string * cookie) { -ADMIN admin; +ADMIN * admin = NULL; -if (!admins->AdminCorrect(login, password, &admin)) +if (!admins->Correct(login, password, &admin)) { return true; } @@ -234,7 +228,7 @@ if (!admins->AdminCorrect(login, password, &admin)) ADMIN_INFO info; time(&info.accessTime); info.admin = login; -info.priviledges = *admin.GetPriv(); +info.priviledges = *admin->GetPriv(); *cookie = GetCookie(); cookies[*cookie] = info; @@ -277,7 +271,8 @@ void RPC_CONFIG::InitiateRegistry() xmlrpc_c::methodPtr const methodInfoPtr(new METHOD_INFO( tariffs, users, - stgSettings + dayFee, + dirNames )); rpcRegistry.addMethod("stargazer.info", methodInfoPtr); @@ -332,7 +327,7 @@ xmlrpc_c::methodPtr const methodAddCashPtr(new METHOD_USER_CASH_ADD( store, users )); -rpcRegistry.addMethod("stargazer.add_cash", methodAddCashPtr); +rpcRegistry.addMethod("stargazer.add_user_cash", methodAddCashPtr); xmlrpc_c::methodPtr const methodSetCashPtr(new METHOD_USER_CASH_SET( this, @@ -340,7 +335,7 @@ xmlrpc_c::methodPtr const methodSetCashPtr(new METHOD_USER_CASH_SET( store, users )); -rpcRegistry.addMethod("stargazer.set_cash", methodSetCashPtr); +rpcRegistry.addMethod("stargazer.set_user_cash", methodSetCashPtr); xmlrpc_c::methodPtr const methodTariffChangePtr(new METHOD_USER_TARIFF_CHANGE( this, @@ -349,7 +344,7 @@ xmlrpc_c::methodPtr const methodTariffChangePtr(new METHOD_USER_TARIFF_CHANGE( store, users )); -rpcRegistry.addMethod("stargazer.tariff_change", methodTariffChangePtr); +rpcRegistry.addMethod("stargazer.chg_user_tariff", methodTariffChangePtr); xmlrpc_c::methodPtr const methodGetTariffPtr(new METHOD_TARIFF_GET( this, @@ -419,7 +414,7 @@ xmlrpc_c::methodPtr const methodSendMessagePtr(new METHOD_MESSAGE_SEND( this, users )); -rpcRegistry.addMethod("stargazer.send_message", methodSendMessagePtr); +rpcRegistry.addMethod("stargazer.send_user_message", methodSendMessagePtr); xmlrpc_c::methodPtr const methodGetOnlinIPsPtr(new METHOD_GET_ONLINE_IPS( this,