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