]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp
Усунуто проблему race conditions у rscriptd
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / messages_methods.cpp
1 #include "messages_methods.h"
2
3 #include "rpcconfig.h"
4 #include "stg_message.h"
5 #include "utils.h"
6
7 //------------------------------------------------------------------------------
8
9 void METHOD_MESSAGE_SEND::execute(xmlrpc_c::paramList const & paramList,
10                                   xmlrpc_c::value *   const   retvalPtr)
11 {
12 std::string cookie = paramList.getString(0);
13 std::vector<xmlrpc_c::value> logins(paramList.getArray(1));
14 std::map<std::string, xmlrpc_c::value> msgInfo(paramList.getStruct(2));
15 paramList.verifyEnd(3);
16
17 ADMIN_INFO adminInfo;
18
19 if (config->GetAdminInfo(cookie, &adminInfo))
20     {
21     *retvalPtr = xmlrpc_c::value_boolean(false);
22     return;
23     }
24
25 STG_MSG message;
26
27 std::map<std::string, xmlrpc_c::value>::iterator it;
28
29 if ((it = msgInfo.find("version")) == msgInfo.end())
30     {
31     message.header.ver = 1; // Default value
32     }
33 else
34     {
35     message.header.ver = xmlrpc_c::value_int(it->second);
36     }
37
38 if ((it = msgInfo.find("type")) == msgInfo.end())
39     {
40     message.header.type = 1; // default value
41     }
42 else
43     {
44     message.header.type = xmlrpc_c::value_int(it->second);
45     }
46
47 if ((it = msgInfo.find("repeat")) == msgInfo.end())
48     {
49     *retvalPtr = xmlrpc_c::value_boolean(false);
50     return;
51     }
52 message.header.repeat = xmlrpc_c::value_int(it->second);
53
54 if ((it = msgInfo.find("repeat_period")) == msgInfo.end())
55     {
56     *retvalPtr = xmlrpc_c::value_boolean(false);
57     return;
58     }
59 message.header.repeatPeriod = xmlrpc_c::value_int(it->second);
60
61 if ((it = msgInfo.find("show_time")) == msgInfo.end())
62     {
63     *retvalPtr = xmlrpc_c::value_boolean(false);
64     return;
65     }
66 message.header.showTime = xmlrpc_c::value_int(it->second);
67
68 if ((it = msgInfo.find("text")) == msgInfo.end())
69     {
70     *retvalPtr = xmlrpc_c::value_boolean(false);
71     return;
72     }
73 message.text = IconvString(xmlrpc_c::value_string(it->second), "UTF-8", "CP1251");
74
75 message.header.creationTime = stgTime;
76 message.header.lastSendTime = 0;
77
78 std::vector<xmlrpc_c::value>::iterator lit;
79 for (lit = logins.begin(); lit != logins.end(); ++lit)
80     {
81     user_iter ui;
82     if (users->FindByName(xmlrpc_c::value_string(*lit), &ui))
83         {
84         printfd(__FILE__, "METHOD_MESSAGE_SEND::execute(): 'User '%s' not found'\n", std::string(xmlrpc_c::value_string(*lit)).c_str());
85         }
86     else
87         {
88         ui->AddMessage(&message);
89         }
90     }
91
92 *retvalPtr = xmlrpc_c::value_boolean(true);
93 }