X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8c6fa3fbaccc22127280bf77a48fab5a3ee0716e..46b0747592074017ff0ea4b33d4a7194235886e5:/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp diff --git a/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp b/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp new file mode 100644 index 00000000..91796148 --- /dev/null +++ b/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp @@ -0,0 +1,96 @@ +#include // xmlrpc-c devs have missed something :) + +#include "stg/message.h" +#include "stg/common.h" +#include "messages_methods.h" +#include "rpcconfig.h" + +extern volatile time_t stgTime; + +//------------------------------------------------------------------------------ + +void METHOD_MESSAGE_SEND::execute(xmlrpc_c::paramList const & paramList, + xmlrpc_c::value * const retvalPtr) +{ +std::string cookie = paramList.getString(0); +std::vector logins(paramList.getArray(1)); +std::map msgInfo(paramList.getStruct(2)); +paramList.verifyEnd(3); + +ADMIN_INFO adminInfo; + +if (config->GetAdminInfo(cookie, &adminInfo)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +STG_MSG message; + +std::map::iterator it; + +if ((it = msgInfo.find("version")) == msgInfo.end()) + { + message.header.ver = 1; // Default value + } +else + { + message.header.ver = xmlrpc_c::value_int(it->second); + } + +if ((it = msgInfo.find("type")) == msgInfo.end()) + { + message.header.type = 1; // default value + } +else + { + message.header.type = xmlrpc_c::value_int(it->second); + } + +if ((it = msgInfo.find("repeat")) == msgInfo.end()) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } +message.header.repeat = xmlrpc_c::value_int(it->second); + +if ((it = msgInfo.find("repeat_period")) == msgInfo.end()) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } +message.header.repeatPeriod = xmlrpc_c::value_int(it->second); + +if ((it = msgInfo.find("show_time")) == msgInfo.end()) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } +message.header.showTime = xmlrpc_c::value_int(it->second); + +if ((it = msgInfo.find("text")) == msgInfo.end()) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } +message.text = IconvString(xmlrpc_c::value_string(it->second), "UTF-8", "CP1251"); + +message.header.creationTime = static_cast(stgTime); +message.header.lastSendTime = 0; + +std::vector::iterator lit; +for (lit = logins.begin(); lit != logins.end(); ++lit) + { + USER_PTR ui; + if (users->FindByName(xmlrpc_c::value_string(*lit), &ui)) + { + printfd(__FILE__, "METHOD_MESSAGE_SEND::execute(): 'User '%s' not found'\n", std::string(xmlrpc_c::value_string(*lit)).c_str()); + } + else + { + ui->AddMessage(&message); + } + } + +*retvalPtr = xmlrpc_c::value_boolean(true); +}