]> git.stg.codes - stg.git/blob - stglibs/srvconf.lib/include/stg/servconf.h
Store parser answer in configproto.
[stg.git] / stglibs / srvconf.lib / include / stg / servconf.h
1 /*
2  *    This program is free software; you can redistribute it and/or modify
3  *    it under the terms of the GNU General Public License as published by
4  *    the Free Software Foundation; either version 2 of the License, or
5  *    (at your option) any later version.
6  *
7  *    This program is distributed in the hope that it will be useful,
8  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *    GNU General Public License for more details.
11  *
12  *    You should have received a copy of the GNU General Public License
13  *    along with this program; if not, write to the Free Software
14  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15  */
16
17 /*
18  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
19  */
20
21  /*
22  $Revision: 1.10 $
23  $Date: 2009/03/17 09:52:35 $
24  $Author: faust $
25  */
26
27 #ifndef SERVCONF_H
28 #define SERVCONF_H
29
30 #include <expat.h>
31
32 #include <list>
33 #include <vector>
34 #include <string>
35
36 #include "stg/os_int.h"
37 #include "stg/const.h"
38 #include "netunit.h"
39
40 void Start(void *data, const char *el, const char **attr);
41 void End(void *data, const char *el);
42
43 #define MAX_ERR_STR_LEN (64)
44 #define IP_STRING_LEN   (255)
45 #define UNAME_LEN       (256)
46 #define SERV_VER_LEN    (64)
47 #define DIRNAME_LEN     (16)
48
49 //-----------------------------------------------------------------------------
50 struct STAT
51 {
52     long long   su[DIR_NUM];
53     long long   sd[DIR_NUM];
54     long long   mu[DIR_NUM];
55     long long   md[DIR_NUM];
56     double      freeMb;
57 };
58 //-----------------------------------------------------------------------------
59 struct SERVERINFO
60 {
61     std::string version;
62     int         tariffNum;
63     int         tariffType;
64     int         usersNum;
65     std::string uname;
66     int         dirNum;
67     std::string dirName[DIR_NUM];
68 };
69 //-----------------------------------------------------------------------------
70 struct USERDATA
71 {
72     std::string     login;
73     std::string     password;
74     double          cash;
75     double          credit;
76     time_t          creditExpire;
77     double          lastCash;
78     double          prepaidTraff;
79     int             down;
80     int             passive;
81     int             disableDetailStat;
82     int             connected;
83     int             alwaysOnline;
84     uint32_t        ip;
85     std::string     ips;
86     std::string     tariff;
87     std::string     iface;
88     std::string     group;
89     std::string     note;
90     std::string     email;
91     std::string     name;
92     std::string     address;
93     std::string     phone;
94     STAT            stat;
95     std::string     userData[USERDATA_NUM];
96
97     struct USERDATA * next;
98 };
99 //-----------------------------------------------------------------------------
100 typedef void(*RecvUserDataCb_t)(USERDATA * ud, void * data);
101 typedef void(*RecvServerInfoDataCb_t)(SERVERINFO * si, void * data);
102 typedef int(*RecvChgUserCb_t)(const char * asnwer, void * data);
103 typedef int(*RecvCheckUserCb_t)(const char * answer, void * data);
104 typedef int(*RecvSendMessageCb_t)(const char * answer, void * data);
105 typedef void(*RecvAuthByDataCb_t)(const std::vector<std::string> & list, void * data);
106 //-----------------------------------------------------------------------------
107 struct ADMINDATA
108 {
109     char login[ADM_LOGIN_LEN];
110 };
111 //-----------------------------------------------------------------------------
112 class PARSER
113 {
114 public:
115     PARSER() {}
116     virtual ~PARSER() {}
117     virtual int ParseStart(const char *el, const char **attr) = 0;
118     virtual void ParseEnd(const char *el) = 0;
119 };
120 //-----------------------------------------------------------------------------
121 class PARSER_CHG_USER: public PARSER
122 {
123 public:
124     PARSER_CHG_USER();
125     int  ParseStart(const char *el, const char **attr);
126     void ParseEnd(const char *el);
127     void ParseAnswer(const char *el, const char **attr);
128     void SetChgUserRecvCb(RecvChgUserCb_t, void * data);
129 private:
130     RecvChgUserCb_t RecvChgUserCb;
131     void * chgUserCbData;
132     int depth;
133     bool error;
134 };
135 //-----------------------------------------------------------------------------
136 class PARSER_CHECK_USER: public PARSER
137 {
138 public:
139     PARSER_CHECK_USER();
140     int  ParseStart(const char *el, const char **attr);
141     void ParseEnd(const char *el);
142     void ParseAnswer(const char *el, const char **attr);
143     void SetCheckUserRecvCb(RecvCheckUserCb_t, void * data);
144 private:
145     RecvCheckUserCb_t RecvCheckUserCb;
146     void * checkUserCbData;
147     int depth;
148     bool error;
149 };
150 //-----------------------------------------------------------------------------
151 class PARSER_GET_USERS: public PARSER
152 {
153 public:
154     PARSER_GET_USERS();
155     int  ParseStart(const char *el, const char **attr);
156     void ParseEnd(const char *el);
157     void ParseUsers(const char *el, const char **attr);
158     void ParseUser(const char *el, const char **attr);
159     void ParseUserParams(const char *el, const char **attr);
160     void ParseUserLoadStat(const char * el, const char ** attr);
161     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
162 private:
163     RecvUserDataCb_t RecvUserDataCb;
164     void * userDataCb;
165     USERDATA user;
166     int depth;
167     bool error;
168 };
169 //-----------------------------------------------------------------------------
170 class PARSER_GET_USER: public PARSER
171 {
172 public:
173     PARSER_GET_USER();
174     int  ParseStart(const char *el, const char **attr);
175     void ParseEnd(const char *el);
176     void ParseUsers(const char *el, const char **attr);
177     void ParseUser(const char *el, const char **attr);
178     void ParseUserParams(const char *el, const char **attr);
179     void ParseUserLoadStat(const char * el, const char ** attr);
180     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
181 private:
182     RecvUserDataCb_t RecvUserDataCb;
183     void * userDataCb;
184     USERDATA user;
185     int depth;
186     bool error;
187 };
188 //-----------------------------------------------------------------------------
189 class PARSER_GET_SERVER_INFO: public PARSER
190 {
191 public:
192     PARSER_GET_SERVER_INFO();
193     int  ParseStart(const char *el, const char **attr);
194     void ParseEnd(const char *el);
195     void ParseServerInfo(const char *el, const char **attr);
196     bool GetError();
197     void SetServerInfoRecvCb(RecvServerInfoDataCb_t, void * data);
198 private:
199     void ParseUname(const char ** attr);
200     void ParseServerVersion(const char ** attr);
201     void ParseUsersNum(const char ** attr);
202     void ParseTariffsNum(const char ** attr);
203     void ParseTariffType(const char ** attr);
204     void ParseDirNum(const char **attr);
205     void ParseDirName(const char **attr, int d);
206
207     RecvServerInfoDataCb_t RecvServerInfoDataCb;
208     void * serverInfoDataCb;
209     int depth;
210     bool error;
211     SERVERINFO serverInfo;
212 };
213 //-----------------------------------------------------------------------------
214 class PARSER_SEND_MESSAGE: public PARSER
215 {
216 public:
217     PARSER_SEND_MESSAGE();
218     int  ParseStart(const char *el, const char **attr);
219     void ParseEnd(const char *el);
220     void ParseAnswer(const char *el, const char **attr);
221     void SetSendMessageRecvCb(RecvSendMessageCb_t, void * data);
222 private:
223     RecvSendMessageCb_t RecvSendMessageCb;
224     void * sendMessageCbData;
225     int depth;
226     bool error;
227 };
228 //-----------------------------------------------------------------------------
229 class PARSER_AUTH_BY: public PARSER
230 {
231 public:
232     PARSER_AUTH_BY();
233     int  ParseStart(const char *el, const char **attr);
234     void ParseEnd(const char *el);
235     void ParseServerInfo(const char *el, const char **attr);
236     bool GetError();
237     void SetRecvCb(RecvAuthByDataCb_t, void * data);
238 private:
239     RecvAuthByDataCb_t RecvAuthByDataCb;
240     void * authByDataCb;
241     int depth;
242     bool error;
243     std::vector<std::string> list;
244 };
245 //-----------------------------------------------------------------------------
246 class SERVCONF
247 {
248 public:
249     SERVCONF();
250     void SetServer(const char * server);
251     void SetPort(uint16_t port);
252
253     void SetAdmLogin(const char * login);
254     void SetAdmPassword(const char * password);
255
256     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
257     void SetGetUserAuthByRecvCb(RecvAuthByDataCb_t, void * data);
258     void SetServerInfoRecvCb(RecvServerInfoDataCb_t, void * data);
259     void SetChgUserCb(RecvChgUserCb_t, void * data);
260     void SetCheckUserCb(RecvCheckUserCb_t, void * data);
261     void SetGetUserDataRecvCb(RecvUserDataCb_t, void * data);
262     void SetSendMessageCb(RecvSendMessageCb_t, void * data);
263
264     int GetUsers();
265     int GetUser(const char * login);
266     int ChgUser(const char * request);
267     int GetUserAuthBy(const char * login);
268     // TODO: Remove this shit!
269     int MsgUser(const char * request);
270     int SendMessage(const char * login, const char * message, int prio);
271     int GetServerInfo();
272     int CheckUser(const char * login, const char * password);
273
274     const std::string & GetStrError() const;
275     int GetError();
276     int Start(const char *el, const char **attr);
277     void End(const char *el);
278
279 private:
280     PARSER * currParser;
281
282     PARSER_GET_USERS parserGetUsers;
283     PARSER_GET_USER parserGetUser;
284     PARSER_AUTH_BY parserAuthBy;
285     PARSER_GET_SERVER_INFO  parserServerInfo;
286     PARSER_CHG_USER parserChgUser;
287     PARSER_CHECK_USER parserCheckUser;
288     PARSER_SEND_MESSAGE parserSendMessage;
289
290     NETTRANSACT nt;
291     int parseDepth;
292
293     std::string errorMsg;
294     int error;
295     XML_Parser parser;
296
297     RecvUserDataCb_t RecvUserDataCb;
298     RecvUserDataCb_t RecvGetUserDataCb;
299     RecvAuthByDataCb_t RecvAuthByCb;
300     RecvServerInfoDataCb_t RecvServerInfoDataCb;
301     RecvChgUserCb_t RecvChgUserCb;
302     RecvCheckUserCb_t RecvCheckUserCb;
303     RecvSendMessageCb_t RecvSendMessageCb;
304
305     void * getUserDataDataCb;
306     void * getUserAuthByDataCb;
307     void * getUsersDataDataCb;
308     void * getServerInfoDataCb;
309     void * chgUserDataCb;
310     void * checkUserDataCb;
311     void * sendMessageDataCb;
312
313     friend int AnsRecv(void * data, std::list<std::string> * list);
314 };
315 //-----------------------------------------------------------------------------
316
317 #endif  /* _SERVCONF_H_ */