]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig/parser.h
Better handling of errors from server. Refactoring.
[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 CreateAnswer() = 0;
43     virtual void SetAnswerList(std::list<std::string> * ansList) { answerList = ansList; }
44
45     virtual void SetUsers(USERS * u) { users = u; }
46     virtual void SetAdmins(ADMINS * a) { admins = a; }
47     virtual void SetTariffs(TARIFFS * t) { tariffs = t; }
48     virtual void SetStore(STORE * s) { store = s; }
49     virtual void SetStgSettings(const SETTINGS * s) { settings = s; }
50
51     virtual void SetCurrAdmin(ADMIN & cua) { currAdmin = &cua; }
52     virtual std::string & GetStrError() { return strError; }
53     virtual 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     void CreateAnswer();
75 };
76 //-----------------------------------------------------------------------------
77 class PARSER_ADD_ADMIN: public BASE_PARSER {
78 public:
79         PARSER_ADD_ADMIN() : BASE_PARSER(), adminToAdd() {}
80     int ParseStart(void *data, const char *el, const char **attr);
81     int ParseEnd(void *data, const char *el);
82     void CreateAnswer();
83 private:
84     std::string adminToAdd;
85 };
86 //-----------------------------------------------------------------------------
87 class PARSER_DEL_ADMIN: public BASE_PARSER {
88 public:
89         PARSER_DEL_ADMIN() : BASE_PARSER(), adminToDel() {}
90     int ParseStart(void *data, const char *el, const char **attr);
91     int ParseEnd(void *data, const char *el);
92     void CreateAnswer();
93 private:
94     int CheckAttr(const char **attr);
95     std::string adminToDel;
96 };
97 //-----------------------------------------------------------------------------
98 class PARSER_CHG_ADMIN: public BASE_PARSER {
99 public:
100         PARSER_CHG_ADMIN() : BASE_PARSER(), login(), password(), privAsString() {}
101     int ParseStart(void *data, const char *el, const char **attr);
102     int ParseEnd(void *data, const char *el);
103     void CreateAnswer();
104 private:
105     RESETABLE<std::string> login;
106     RESETABLE<std::string> password;
107     RESETABLE<std::string> privAsString;
108 };
109 //-----------------------------------------------------------------------------
110 class PARSER_GET_SERVER_INFO: public BASE_PARSER {
111 public:
112     int ParseStart(void *data, const char *el, const char **attr);
113     int ParseEnd(void *data, const char *el);
114     void CreateAnswer();
115 };
116 //-----------------------------------------------------------------------------
117 class PARSER_GET_USER: public BASE_PARSER {
118 public:
119         PARSER_GET_USER() : BASE_PARSER(), login() {}
120         ~PARSER_GET_USER() {}
121     int ParseStart(void *data, const char *el, const char **attr);
122     int ParseEnd(void *data, const char *el);
123     void CreateAnswer();
124 private:
125     std::string login;
126 };
127 //-----------------------------------------------------------------------------
128 class PARSER_GET_USERS: public BASE_PARSER {
129 public:
130         PARSER_GET_USERS() : BASE_PARSER(), lastUserUpdateTime(0), lastUpdateFound(false) {}
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 public:
141     int ParseStart(void *data, const char *el, const char **attr);
142     int ParseEnd(void *data, const char *el);
143     void CreateAnswer();
144 };
145 //-----------------------------------------------------------------------------
146 class PARSER_ADD_TARIFF: public BASE_PARSER {
147 public:
148         PARSER_ADD_TARIFF() : BASE_PARSER(), tariffToAdd() {}
149     int ParseStart(void *data, const char *el, const char **attr);
150     int ParseEnd(void *data, const char *el);
151     void CreateAnswer();
152 private:
153     std::string tariffToAdd;
154 };
155 //-----------------------------------------------------------------------------
156 class PARSER_DEL_TARIFF: public BASE_PARSER {
157 public:
158         PARSER_DEL_TARIFF() : BASE_PARSER(), tariffToDel() {}
159     int ParseStart(void *data, const char *el, const char **attr);
160     int ParseEnd(void *data, const char *el);
161     void CreateAnswer();
162 private:
163     std::string tariffToDel;
164 };
165 //-----------------------------------------------------------------------------
166 class PARSER_CHG_TARIFF: public BASE_PARSER {
167 public:
168         PARSER_CHG_TARIFF() : BASE_PARSER(), td() {}
169     int ParseStart(void *data, const char *el, const char **attr);
170     int ParseEnd(void *data, const char *el);
171     void CreateAnswer();
172 private:
173     int ParseSlashedIntParams(int paramsNum, const std::string & s, int * params);
174     int ParseSlashedDoubleParams(int paramsNum, const std::string & s, double * params);
175     int CheckTariffData();
176     int AplayChanges();
177
178     TARIFF_DATA_RES td;
179 };
180 //-----------------------------------------------------------------------------/
181 class PARSER_ADD_USER: public BASE_PARSER {
182 public:
183         PARSER_ADD_USER() : BASE_PARSER(), login() {}
184         ~PARSER_ADD_USER() {}
185     int ParseStart(void *data, const char *el, const char **attr);
186     int ParseEnd(void *data, const char *el);
187     void CreateAnswer();
188     void Reset();
189 private:
190     int CheckUserData();
191     std::string login;
192 };
193 //-----------------------------------------------------------------------------
194 class PARSER_CHG_USER: public BASE_PARSER {
195 public:
196         PARSER_CHG_USER();
197         ~PARSER_CHG_USER();
198     int ParseStart(void *data, const char *el, const char **attr);
199     int ParseEnd(void *data, const char *el);
200     void CreateAnswer();
201     void Reset();
202 private:
203     PARSER_CHG_USER(const PARSER_CHG_USER & rvalue);
204     PARSER_CHG_USER & operator=(const PARSER_CHG_USER & rvalue);
205
206     std::string EncChar2String(const char *);
207     int AplayChanges();
208
209     USER_STAT_RES * usr;
210     USER_CONF_RES * ucr;
211     RESETABLE<uint64_t> * upr;
212     RESETABLE<uint64_t> * downr;
213     std::string cashMsg;
214     std::string login;
215     bool cashMustBeAdded;
216     int res;
217 };
218 //-----------------------------------------------------------------------------
219 class PARSER_DEL_USER: public BASE_PARSER {
220 public:
221         PARSER_DEL_USER() : BASE_PARSER(), res(0), u(NULL) {}
222     int ParseStart(void *data, const char *el, const char **attr);
223     int ParseEnd(void *data, const char *el);
224     void CreateAnswer();
225
226 private:
227     PARSER_DEL_USER(const PARSER_DEL_USER & rvalue);
228     PARSER_DEL_USER & operator=(const PARSER_DEL_USER & rvalue);
229
230     int res;
231     USER * u;
232 };
233 //-----------------------------------------------------------------------------
234 class PARSER_CHECK_USER: public BASE_PARSER {
235 public:
236         PARSER_CHECK_USER() : BASE_PARSER(), result(false) {}
237     int ParseStart(void *data, const char *el, const char **attr);
238     int ParseEnd(void *data, const char *el);
239     void CreateAnswer(const char * error);
240 };
241 //-----------------------------------------------------------------------------
242 class PARSER_SEND_MESSAGE: public BASE_PARSER {
243 public:
244         PARSER_SEND_MESSAGE() : BASE_PARSER(), logins(), result(0), msg(), u(NULL) {}
245     int ParseStart(void *data, const char *el, const char **attr);
246     int ParseEnd(void *data, const char *el);
247     void CreateAnswer();
248 private:
249     PARSER_SEND_MESSAGE(const PARSER_SEND_MESSAGE & rvalue);
250     PARSER_SEND_MESSAGE & operator=(const PARSER_SEND_MESSAGE & rvalue);
251
252     int ParseLogins(const char * logins);
253
254     enum {res_ok, res_params_error, res_unknown};
255     std::vector<std::string> logins;
256     int result;
257     STG_MSG msg;
258     USER * u;
259 };
260 //-----------------------------------------------------------------------------
261 #endif //PARSER_H