]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig/parser.h
Rearranged some headers in sgconfig.
[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     virtual void Reset() { answerList->clear(); depth = 0; }
43
44     void SetAnswerList(std::list<std::string> * ansList) { answerList = ansList; }
45
46     void SetUsers(USERS * u) { users = u; }
47     void SetAdmins(ADMINS * a) { admins = a; }
48     void SetTariffs(TARIFFS * t) { tariffs = t; }
49     void SetStore(STORE * s) { store = s; }
50     void SetStgSettings(const SETTINGS * s) { settings = s; }
51
52     void SetCurrAdmin(ADMIN & cua) { currAdmin = &cua; }
53     std::string & GetStrError() { return strError; }
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     void CreateAnswer();
101 };
102 //-----------------------------------------------------------------------------
103 class PARSER_CHG_ADMIN: public BASE_PARSER {
104 public:
105         PARSER_CHG_ADMIN() : BASE_PARSER(), login(), password(), privAsString() {}
106     int ParseStart(void *data, const char *el, const char **attr);
107     int ParseEnd(void *data, const char *el);
108
109 private:
110     RESETABLE<std::string> login;
111     RESETABLE<std::string> password;
112     RESETABLE<std::string> privAsString;
113
114     void CreateAnswer();
115 };
116 //-----------------------------------------------------------------------------
117 class PARSER_GET_SERVER_INFO: public BASE_PARSER {
118 public:
119     int ParseStart(void *data, const char *el, const char **attr);
120     int ParseEnd(void *data, const char *el);
121
122 private:
123     void CreateAnswer();
124 };
125 //-----------------------------------------------------------------------------
126 class PARSER_GET_USER: public BASE_PARSER {
127 public:
128         PARSER_GET_USER() : BASE_PARSER(), login() {}
129         ~PARSER_GET_USER() {}
130     int ParseStart(void *data, const char *el, const char **attr);
131     int ParseEnd(void *data, const char *el);
132
133 private:
134     std::string login;
135
136     void CreateAnswer();
137 };
138 //-----------------------------------------------------------------------------
139 class PARSER_GET_USERS: public BASE_PARSER {
140 public:
141         PARSER_GET_USERS() : BASE_PARSER(), lastUserUpdateTime(0), lastUpdateFound(false) {}
142     int ParseStart(void *data, const char *el, const char **attr);
143     int ParseEnd(void *data, const char *el);
144
145 private:
146     time_t lastUserUpdateTime;
147     bool lastUpdateFound;
148
149     void CreateAnswer();
150 };
151 //-----------------------------------------------------------------------------
152 class PARSER_GET_TARIFFS: public BASE_PARSER {
153 public:
154     int ParseStart(void *data, const char *el, const char **attr);
155     int ParseEnd(void *data, const char *el);
156
157 private:
158     void CreateAnswer();
159 };
160 //-----------------------------------------------------------------------------
161 class PARSER_ADD_TARIFF: public BASE_PARSER {
162 public:
163         PARSER_ADD_TARIFF() : BASE_PARSER(), tariffToAdd() {}
164     int ParseStart(void *data, const char *el, const char **attr);
165     int ParseEnd(void *data, const char *el);
166
167 private:
168     std::string tariffToAdd;
169
170     void CreateAnswer();
171 };
172 //-----------------------------------------------------------------------------
173 class PARSER_DEL_TARIFF: public BASE_PARSER {
174 public:
175         PARSER_DEL_TARIFF() : BASE_PARSER(), tariffToDel() {}
176     int ParseStart(void *data, const char *el, const char **attr);
177     int ParseEnd(void *data, const char *el);
178
179 private:
180     std::string tariffToDel;
181
182     void CreateAnswer();
183 };
184 //-----------------------------------------------------------------------------
185 class PARSER_CHG_TARIFF: public BASE_PARSER {
186 public:
187         PARSER_CHG_TARIFF() : BASE_PARSER(), td() {}
188     int ParseStart(void *data, const char *el, const char **attr);
189     int ParseEnd(void *data, const char *el);
190
191 private:
192     TARIFF_DATA_RES td;
193
194     int ParseSlashedIntParams(int paramsNum, const std::string & s, int * params);
195     int ParseSlashedDoubleParams(int paramsNum, const std::string & s, double * params);
196     int CheckTariffData();
197     int AplayChanges();
198     void CreateAnswer();
199 };
200 //-----------------------------------------------------------------------------/
201 class PARSER_ADD_USER: public BASE_PARSER {
202 public:
203         PARSER_ADD_USER() : BASE_PARSER(), login() {}
204         ~PARSER_ADD_USER() {}
205     int ParseStart(void *data, const char *el, const char **attr);
206     int ParseEnd(void *data, const char *el);
207
208 private:
209     std::string login;
210
211     int CheckUserData();
212     void CreateAnswer();
213     void Reset();
214 };
215 //-----------------------------------------------------------------------------
216 class PARSER_CHG_USER: public BASE_PARSER {
217 public:
218         PARSER_CHG_USER();
219         ~PARSER_CHG_USER();
220     int ParseStart(void *data, const char *el, const char **attr);
221     int ParseEnd(void *data, const char *el);
222
223 private:
224     USER_STAT_RES * usr;
225     USER_CONF_RES * ucr;
226     RESETABLE<uint64_t> * upr;
227     RESETABLE<uint64_t> * downr;
228     std::string cashMsg;
229     std::string login;
230     bool cashMustBeAdded;
231     int res;
232
233     PARSER_CHG_USER(const PARSER_CHG_USER & rvalue);
234     PARSER_CHG_USER & operator=(const PARSER_CHG_USER & rvalue);
235
236     std::string EncChar2String(const char *);
237     int AplayChanges();
238     void CreateAnswer();
239     void Reset();
240 };
241 //-----------------------------------------------------------------------------
242 class PARSER_DEL_USER: public BASE_PARSER {
243 public:
244         PARSER_DEL_USER() : BASE_PARSER(), res(0), u(NULL) {}
245     int ParseStart(void *data, const char *el, const char **attr);
246     int ParseEnd(void *data, const char *el);
247
248 private:
249     int res;
250     USER * u;
251
252     PARSER_DEL_USER(const PARSER_DEL_USER & rvalue);
253     PARSER_DEL_USER & operator=(const PARSER_DEL_USER & rvalue);
254
255     void CreateAnswer();
256 };
257 //-----------------------------------------------------------------------------
258 class PARSER_CHECK_USER: public BASE_PARSER {
259 public:
260         PARSER_CHECK_USER() : BASE_PARSER() {}
261     int ParseStart(void *data, const char *el, const char **attr);
262     int ParseEnd(void *data, const char *el);
263
264 private:
265     void CreateAnswer(const char * error);
266 };
267 //-----------------------------------------------------------------------------
268 class PARSER_SEND_MESSAGE: public BASE_PARSER {
269 public:
270         PARSER_SEND_MESSAGE() : BASE_PARSER(), logins(), result(0), msg(), u(NULL) {}
271     int ParseStart(void *data, const char *el, const char **attr);
272     int ParseEnd(void *data, const char *el);
273
274 private:
275     enum {res_ok, res_params_error, res_unknown};
276     std::vector<std::string> logins;
277     int result;
278     STG_MSG msg;
279     USER * u;
280
281     PARSER_SEND_MESSAGE(const PARSER_SEND_MESSAGE & rvalue);
282     PARSER_SEND_MESSAGE & operator=(const PARSER_SEND_MESSAGE & rvalue);
283
284     int ParseLogins(const char * logins);
285     void CreateAnswer();
286 };
287 //-----------------------------------------------------------------------------
288 #endif //PARSER_H