X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/900527c952b8cd0140317cb7dc9d4b80eb1239bf..9c6406d76392a55a85d3ec25586a47ab892b88fe:/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp?ds=sidebyside diff --git a/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp b/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp index d4419b40..dca87fbe 100644 --- a/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp +++ b/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -9,6 +10,7 @@ #include #include #include +#include // xmlrpc-c devs have missed something :) #include "stg/common.h" #include "stg/admin.h" @@ -23,7 +25,12 @@ #include "admins_methods.h" #include "messages_methods.h" +namespace +{ PLUGIN_CREATOR rpcc; +} + +extern "C" PLUGIN * GetPlugin(); RPC_CONFIG_SETTINGS::RPC_CONFIG_SETTINGS() : errorStr(), @@ -34,11 +41,9 @@ RPC_CONFIG_SETTINGS::RPC_CONFIG_SETTINGS() int RPC_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s) { -int p; PARAM_VALUE pv; -std::vector::const_iterator pvi; - pv.param = "Port"; +std::vector::const_iterator pvi; pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv); if (pvi == s.moduleParams.end()) { @@ -46,13 +51,14 @@ if (pvi == s.moduleParams.end()) printfd(__FILE__, "Parameter 'Port' not found\n"); return -1; } +int p; if (ParseIntInRange(pvi->value[0], 2, 65535, &p)) { errorStr = "Cannot parse parameter \'Port\': " + errorStr; printfd(__FILE__, "Cannot parse parameter 'Port'\n"); return -1; } -port = p; +port = static_cast(p); pv.param = "CookieTimeout"; pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv); @@ -94,7 +100,8 @@ RPC_CONFIG::RPC_CONFIG() tid(), cookies(), dayFee(0), - dirNames() + dirNames(), + logger(GetPluginLogger(GetStgLogger(), "conf_rpc")) { } @@ -114,12 +121,12 @@ if (ret) return ret; } -void RPC_CONFIG::SetStgSettings(const SETTINGS * settings) +void RPC_CONFIG::SetStgSettings(const SETTINGS * s) { - dayFee = settings->GetDayFee(); + dayFee = s->GetDayFee(); dirNames.erase(dirNames.begin(), dirNames.end()); for (size_t i = 0; i < DIR_NUM; ++i) { - dirNames.push_back(settings->GetDirName(i)); + dirNames.push_back(s->GetDirName(i)); } } @@ -132,6 +139,7 @@ fd = socket(AF_INET, SOCK_STREAM, 0); if (fd < 0) { errorStr = "Failed to create socket"; + logger("Cannot create a socket: %s", strerror(errno)); printfd(__FILE__, "Failed to create listening socket: %s\n", strerror(errno)); return -1; } @@ -141,6 +149,7 @@ int flag = 1; if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag))) { errorStr = "Setsockopt failed."; + logger("setsockopt error: %s", strerror(errno)); printfd(__FILE__, "Setsockopt failed: %s\n", strerror(errno)); return -1; } @@ -152,6 +161,7 @@ addr.sin_addr.s_addr = inet_addr("0.0.0.0"); if (bind(fd, (struct sockaddr *)&addr, sizeof(addr))) { + logger("Cannot bind the socket: %s", strerror(errno)); errorStr = "Failed to bind socket"; printfd(__FILE__, "Failed to bind listening socket: %s\n", strerror(errno)); return -1; @@ -159,6 +169,7 @@ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr))) if (listen(fd, 10)) { + logger("Cannot listen the socket: %s", strerror(errno)); errorStr = "Failed to listen socket"; printfd(__FILE__, "Failed to listen listening socket: %s\n", strerror(errno)); return -1; @@ -174,6 +185,7 @@ rpcServer = new xmlrpc_c::serverAbyss( if (pthread_create(&tid, NULL, Run, this)) { errorStr = "Failed to create RPC thread"; + logger("Cannot create RPC thread."); printfd(__FILE__, "Failed to crate RPC thread\n"); return -1; } @@ -193,6 +205,7 @@ for (int i = 0; i < 5 && !stopped; ++i) if (!stopped) { running = true; + logger("Cannot stop RPC thread."); printfd(__FILE__, "Failed to stop RPC thread\n"); errorStr = "Failed to stop RPC thread"; return -1; @@ -260,6 +273,7 @@ ADMIN * admin = NULL; if (!admins->Correct(login, password, &admin)) { + logger("Attempt to connect with invalid credentials. Login: %s", login.c_str()); return true; } @@ -459,5 +473,11 @@ xmlrpc_c::methodPtr const methodGetOnlinIPsPtr(new METHOD_GET_ONLINE_IPS( users )); rpcRegistry.addMethod("stargazer.get_online_ips", methodGetOnlinIPsPtr); + +xmlrpc_c::methodPtr const methodGetUserAuthByPtr(new METHOD_GET_USER_AUTH_BY( + this, + users + )); +rpcRegistry.addMethod("stargazer.get_user_auth_by", methodGetUserAuthByPtr); }