]> git.stg.codes - stg.git/blob - stglibs/srvconf.lib/include/stg/servconf.h
Ticket 37. The message variable definition moved from if() construction
[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 };
134 //-----------------------------------------------------------------------------
135 class PARSER_CHECK_USER: public PARSER
136 {
137 public:
138     PARSER_CHECK_USER();
139     int  ParseStart(const char *el, const char **attr);
140     void ParseEnd(const char *el);
141     void ParseAnswer(const char *el, const char **attr);
142     void SetCheckUserRecvCb(RecvCheckUserCb_t, void * data);
143 private:
144     RecvCheckUserCb_t RecvCheckUserCb;
145     void * checkUserCbData;
146     int depth;
147 };
148 //-----------------------------------------------------------------------------
149 class PARSER_GET_USERS: public PARSER
150 {
151 public:
152     PARSER_GET_USERS();
153     int  ParseStart(const char *el, const char **attr);
154     void ParseEnd(const char *el);
155     void ParseUsers(const char *el, const char **attr);
156     void ParseUser(const char *el, const char **attr);
157     void ParseUserParams(const char *el, const char **attr);
158     void ParseUserLoadStat(const char * el, const char ** attr);
159     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
160 private:
161     RecvUserDataCb_t RecvUserDataCb;
162     void * userDataCb;
163     USERDATA user;
164     int depth;
165 };
166 //-----------------------------------------------------------------------------
167 class PARSER_GET_USER: public PARSER
168 {
169 public:
170     PARSER_GET_USER();
171     int  ParseStart(const char *el, const char **attr);
172     void ParseEnd(const char *el);
173     void ParseUsers(const char *el, const char **attr);
174     void ParseUser(const char *el, const char **attr);
175     void ParseUserParams(const char *el, const char **attr);
176     void ParseUserLoadStat(const char * el, const char ** attr);
177     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
178 private:
179     RecvUserDataCb_t RecvUserDataCb;
180     void * userDataCb;
181     USERDATA user;
182     int depth;
183     bool error;
184 };
185 //-----------------------------------------------------------------------------
186 class PARSER_GET_SERVER_INFO: public PARSER
187 {
188 public:
189     PARSER_GET_SERVER_INFO();
190     int  ParseStart(const char *el, const char **attr);
191     void ParseEnd(const char *el);
192     void ParseServerInfo(const char *el, const char **attr);
193     bool GetError();
194     void SetServerInfoRecvCb(RecvServerInfoDataCb_t, void * data);
195 private:
196     void ParseUname(const char ** attr);
197     void ParseServerVersion(const char ** attr);
198     void ParseUsersNum(const char ** attr);
199     void ParseTariffsNum(const char ** attr);
200     void ParseTariffType(const char ** attr);
201     void ParseDirNum(const char **attr);
202     void ParseDirName(const char **attr, int d);
203
204     RecvServerInfoDataCb_t RecvServerInfoDataCb;
205     void * serverInfoDataCb;
206     int depth;
207     bool error;
208     SERVERINFO serverInfo;
209 };
210 //-----------------------------------------------------------------------------
211 class PARSER_SEND_MESSAGE: public PARSER
212 {
213 public:
214     PARSER_SEND_MESSAGE();
215     int  ParseStart(const char *el, const char **attr);
216     void ParseEnd(const char *el);
217     void ParseAnswer(const char *el, const char **attr);
218     void SetSendMessageRecvCb(RecvSendMessageCb_t, void * data);
219 private:
220     RecvSendMessageCb_t RecvSendMessageCb;
221     void * sendMessageCbData;
222     int depth;
223 };
224 //-----------------------------------------------------------------------------
225 class PARSER_AUTH_BY: public PARSER
226 {
227 public:
228     PARSER_AUTH_BY();
229     int  ParseStart(const char *el, const char **attr);
230     void ParseEnd(const char *el);
231     void ParseServerInfo(const char *el, const char **attr);
232     bool GetError();
233     void SetRecvCb(RecvAuthByDataCb_t, void * data);
234 private:
235     RecvAuthByDataCb_t RecvAuthByDataCb;
236     void * authByDataCb;
237     int depth;
238     bool error;
239     std::vector<std::string> list;
240 };
241 //-----------------------------------------------------------------------------
242 class SERVCONF
243 {
244 public:
245     SERVCONF();
246     ~SERVCONF();
247     void SetServer(const char * server);
248     void SetPort(uint16_t port);
249
250     void SetAdmLogin(const char * login);
251     void SetAdmPassword(const char * password);
252
253     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
254     void SetGetUserAuthByRecvCb(RecvAuthByDataCb_t, void * data);
255     void SetServerInfoRecvCb(RecvServerInfoDataCb_t, void * data);
256     void SetChgUserCb(RecvChgUserCb_t, void * data);
257     void SetCheckUserCb(RecvCheckUserCb_t, void * data);
258     void SetGetUserDataRecvCb(RecvUserDataCb_t, void * data);
259     void SetSendMessageCb(RecvSendMessageCb_t, void * data);
260
261     int GetUsers();
262     int GetUser(const char * login);
263     int ChgUser(const char * request);
264     int GetUserAuthBy(const char * login);
265     // TODO: Remove this shit!
266     int MsgUser(const char * request);
267     int SendMessage(const char * login, const char * message, int prio);
268     int GetServerInfo();
269     int CheckUser(const char * login, const char * password);
270
271     const std::string & GetStrError() const;
272     int GetError();
273     int Start(const char *el, const char **attr);
274     void End(const char *el);
275
276 private:
277     PARSER * currParser;
278
279     PARSER_GET_USERS parserGetUsers;
280     PARSER_GET_USER parserGetUser;
281     PARSER_AUTH_BY parserAuthBy;
282     PARSER_GET_SERVER_INFO  parserServerInfo;
283     PARSER_CHG_USER parserChgUser;
284     PARSER_CHECK_USER parserCheckUser;
285     PARSER_SEND_MESSAGE parserSendMessage;
286
287     NETTRANSACT nt;
288
289     std::string errorMsg;
290     int error;
291     XML_Parser parser;
292
293     RecvUserDataCb_t RecvUserDataCb;
294     RecvUserDataCb_t RecvGetUserDataCb;
295     RecvAuthByDataCb_t RecvAuthByCb;
296     RecvServerInfoDataCb_t RecvServerInfoDataCb;
297     RecvChgUserCb_t RecvChgUserCb;
298     RecvCheckUserCb_t RecvCheckUserCb;
299     RecvSendMessageCb_t RecvSendMessageCb;
300
301     void * getUserDataDataCb;
302     void * getUserAuthByDataCb;
303     void * getUsersDataDataCb;
304     void * getServerInfoDataCb;
305     void * chgUserDataCb;
306     void * checkUserDataCb;
307     void * sendMessageDataCb;
308
309     friend int AnsRecv(void * data, std::list<std::string> * list);
310 };
311 //-----------------------------------------------------------------------------
312
313 #endif  /* _SERVCONF_H_ */