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