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