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