]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig/parser.h
Added COMMAND_FUNCTOR and COMMAND_ACTION.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser.h
1  /*
2  $Revision: 1.20 $
3  $Date: 2010/10/04 20:26:10 $
4  $Author: faust $
5  */
6
7 #ifndef PARSER_H
8 #define PARSER_H
9
10 #include "stg/resetable.h"
11 #include "stg/const.h"
12 #include "stg/store.h"
13 #include "stg/admins.h"
14 #include "stg/admin.h"
15 #include "stg/users.h"
16 #include "stg/message.h"
17
18 #include <list>
19 #include <string>
20 #include <vector>
21
22 class TARIFFS;
23 class SETTINGS;
24
25 //-----------------------------------------------------------------------------
26 class BASE_PARSER {
27 public:
28     BASE_PARSER()
29         : strError(),
30           admins(NULL),
31           users(NULL),
32           tariffs(NULL),
33           store(NULL),
34           settings(NULL),
35           currAdmin(NULL),
36           depth(0),
37           answerList(NULL)
38     {}
39     virtual ~BASE_PARSER() {}
40     virtual int ParseStart(void *data, const char *el, const char **attr) = 0;
41     virtual int ParseEnd(void *data, const char *el) = 0;
42
43     void SetAnswerList(std::list<std::string> * ansList) { answerList = ansList; }
44
45     void SetUsers(USERS * u) { users = u; }
46     void SetAdmins(ADMINS * a) { admins = a; }
47     void SetTariffs(TARIFFS * t) { tariffs = t; }
48     void SetStore(STORE * s) { store = s; }
49     void SetStgSettings(const SETTINGS * s) { settings = s; }
50
51     void SetCurrAdmin(ADMIN & cua) { currAdmin = &cua; }
52     std::string & GetStrError() { return strError; }
53     void Reset() { answerList->clear(); depth = 0; }
54
55 protected:
56     BASE_PARSER(const BASE_PARSER & rvalue);
57     BASE_PARSER & operator=(const BASE_PARSER & rvalue);
58
59     std::string      strError;
60     ADMINS *         admins;
61     USERS *          users;
62     TARIFFS *        tariffs;
63     STORE *          store;
64     const SETTINGS * settings;
65     ADMIN          * currAdmin;
66     int              depth;
67     std::list<std::string> * answerList;
68 };
69 //-----------------------------------------------------------------------------
70 class PARSER_GET_ADMINS: public BASE_PARSER {
71 public:
72     int ParseStart(void *data, const char *el, const char **attr);
73     int ParseEnd(void *data, const char *el);
74
75 private:
76     void CreateAnswer();
77 };
78 //-----------------------------------------------------------------------------
79 class PARSER_ADD_ADMIN: public BASE_PARSER {
80 public:
81         PARSER_ADD_ADMIN() : BASE_PARSER(), adminToAdd() {}
82     int ParseStart(void *data, const char *el, const char **attr);
83     int ParseEnd(void *data, const char *el);
84
85 private:
86     std::string adminToAdd;
87
88     void CreateAnswer();
89 };
90 //-----------------------------------------------------------------------------
91 class PARSER_DEL_ADMIN: public BASE_PARSER {
92 public:
93         PARSER_DEL_ADMIN() : BASE_PARSER(), adminToDel() {}
94     int ParseStart(void *data, const char *el, const char **attr);
95     int ParseEnd(void *data, const char *el);
96
97 private:
98     std::string adminToDel;
99
100     int CheckAttr(const char **attr);
101     void CreateAnswer();
102 };
103 //-----------------------------------------------------------------------------
104 class PARSER_CHG_ADMIN: public BASE_PARSER {
105 public:
106         PARSER_CHG_ADMIN() : BASE_PARSER(), login(), password(), privAsString() {}
107     int ParseStart(void *data, const char *el, const char **attr);
108     int ParseEnd(void *data, const char *el);
109
110 private:
111     RESETABLE<std::string> login;
112     RESETABLE<std::string> password;
113     RESETABLE<std::string> privAsString;
114
115     void CreateAnswer();
116 };
117 //-----------------------------------------------------------------------------
118 class PARSER_GET_SERVER_INFO: public BASE_PARSER {
119 public:
120     int ParseStart(void *data, const char *el, const char **attr);
121     int ParseEnd(void *data, const char *el);
122
123 private:
124     void CreateAnswer();
125 };
126 //-----------------------------------------------------------------------------
127 class PARSER_GET_USER: public BASE_PARSER {
128 public:
129         PARSER_GET_USER() : BASE_PARSER(), login() {}
130         ~PARSER_GET_USER() {}
131     int ParseStart(void *data, const char *el, const char **attr);
132     int ParseEnd(void *data, const char *el);
133
134 private:
135     std::string login;
136
137     void CreateAnswer();
138 };
139 //-----------------------------------------------------------------------------
140 class PARSER_GET_USERS: public BASE_PARSER {
141 public:
142         PARSER_GET_USERS() : BASE_PARSER(), lastUserUpdateTime(0), lastUpdateFound(false) {}
143     int ParseStart(void *data, const char *el, const char **attr);
144     int ParseEnd(void *data, const char *el);
145
146 private:
147     time_t lastUserUpdateTime;
148     bool lastUpdateFound;
149
150     void CreateAnswer();
151 };
152 //-----------------------------------------------------------------------------
153 class PARSER_GET_TARIFFS: public BASE_PARSER {
154 public:
155     int ParseStart(void *data, const char *el, const char **attr);
156     int ParseEnd(void *data, const char *el);
157
158 private:
159     void CreateAnswer();
160 };
161 //-----------------------------------------------------------------------------
162 class PARSER_ADD_TARIFF: public BASE_PARSER {
163 public:
164         PARSER_ADD_TARIFF() : BASE_PARSER(), tariffToAdd() {}
165     int ParseStart(void *data, const char *el, const char **attr);
166     int ParseEnd(void *data, const char *el);
167
168 private:
169     std::string tariffToAdd;
170
171     void CreateAnswer();
172 };
173 //-----------------------------------------------------------------------------
174 class PARSER_DEL_TARIFF: public BASE_PARSER {
175 public:
176         PARSER_DEL_TARIFF() : BASE_PARSER(), tariffToDel() {}
177     int ParseStart(void *data, const char *el, const char **attr);
178     int ParseEnd(void *data, const char *el);
179
180 private:
181     std::string tariffToDel;
182
183     void CreateAnswer();
184 };
185 //-----------------------------------------------------------------------------
186 class PARSER_CHG_TARIFF: public BASE_PARSER {
187 public:
188         PARSER_CHG_TARIFF() : BASE_PARSER(), td() {}
189     int ParseStart(void *data, const char *el, const char **attr);
190     int ParseEnd(void *data, const char *el);
191
192 private:
193     TARIFF_DATA_RES td;
194
195     int ParseSlashedIntParams(int paramsNum, const std::string & s, int * params);
196     int ParseSlashedDoubleParams(int paramsNum, const std::string & s, double * params);
197     int CheckTariffData();
198     int AplayChanges();
199     void CreateAnswer();
200 };
201 //-----------------------------------------------------------------------------/
202 class PARSER_ADD_USER: public BASE_PARSER {
203 public:
204         PARSER_ADD_USER() : BASE_PARSER(), login() {}
205         ~PARSER_ADD_USER() {}
206     int ParseStart(void *data, const char *el, const char **attr);
207     int ParseEnd(void *data, const char *el);
208
209 private:
210     std::string login;
211
212     int CheckUserData();
213     void CreateAnswer();
214     void Reset();
215 };
216 //-----------------------------------------------------------------------------
217 class PARSER_CHG_USER: public BASE_PARSER {
218 public:
219         PARSER_CHG_USER();
220         ~PARSER_CHG_USER();
221     int ParseStart(void *data, const char *el, const char **attr);
222     int ParseEnd(void *data, const char *el);
223
224 private:
225     USER_STAT_RES * usr;
226     USER_CONF_RES * ucr;
227     RESETABLE<uint64_t> * upr;
228     RESETABLE<uint64_t> * downr;
229     std::string cashMsg;
230     std::string login;
231     bool cashMustBeAdded;
232     int res;
233
234     PARSER_CHG_USER(const PARSER_CHG_USER & rvalue);
235     PARSER_CHG_USER & operator=(const PARSER_CHG_USER & rvalue);
236
237     std::string EncChar2String(const char *);
238     int AplayChanges();
239     void CreateAnswer();
240     void Reset();
241 };
242 //-----------------------------------------------------------------------------
243 class PARSER_DEL_USER: public BASE_PARSER {
244 public:
245         PARSER_DEL_USER() : BASE_PARSER(), res(0), u(NULL) {}
246     int ParseStart(void *data, const char *el, const char **attr);
247     int ParseEnd(void *data, const char *el);
248
249 private:
250     int res;
251     USER * u;
252
253     PARSER_DEL_USER(const PARSER_DEL_USER & rvalue);
254     PARSER_DEL_USER & operator=(const PARSER_DEL_USER & rvalue);
255
256     void CreateAnswer();
257 };
258 //-----------------------------------------------------------------------------
259 class PARSER_CHECK_USER: public BASE_PARSER {
260 public:
261         PARSER_CHECK_USER() : BASE_PARSER() {}
262     int ParseStart(void *data, const char *el, const char **attr);
263     int ParseEnd(void *data, const char *el);
264
265 private:
266     void CreateAnswer(const char * error);
267 };
268 //-----------------------------------------------------------------------------
269 class PARSER_SEND_MESSAGE: public BASE_PARSER {
270 public:
271         PARSER_SEND_MESSAGE() : BASE_PARSER(), logins(), result(0), msg(), u(NULL) {}
272     int ParseStart(void *data, const char *el, const char **attr);
273     int ParseEnd(void *data, const char *el);
274
275 private:
276     enum {res_ok, res_params_error, res_unknown};
277     std::vector<std::string> logins;
278     int result;
279     STG_MSG msg;
280     USER * u;
281
282     PARSER_SEND_MESSAGE(const PARSER_SEND_MESSAGE & rvalue);
283     PARSER_SEND_MESSAGE & operator=(const PARSER_SEND_MESSAGE & rvalue);
284
285     int ParseLogins(const char * logins);
286     void CreateAnswer();
287 };
288 //-----------------------------------------------------------------------------
289 #endif //PARSER_H