]> git.stg.codes - stg.git/blob - stglibs/srvconf.lib/servconf.h
Контрольный
[stg.git] / stglibs / srvconf.lib / 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 "os_int.h"
31
32 #include <expat.h>
33 #include <list>
34 #include <string>
35 #include "netunit.h"
36 #include "stg_const.h"
37
38 void Start(void *data, const char *el, const char **attr);
39 void End(void *data, const char *el);
40
41 #define MAX_ERR_STR_LEN (64)
42 #define IP_STRING_LEN   (255)
43 #define UNAME_LEN       (256)
44 #define SERV_VER_LEN    (64)
45 #define DIRNAME_LEN     (16)
46
47 //-----------------------------------------------------------------------------
48 struct STAT
49 {
50     long long   su[DIR_NUM];
51     long long   sd[DIR_NUM];
52     long long   mu[DIR_NUM];
53     long long   md[DIR_NUM];
54     double      freeMb;
55 };
56 //-----------------------------------------------------------------------------
57 struct SERVERINFO
58 {
59     std::string version;
60     int         tariffNum;
61     int         tariffType;
62     int         usersNum;
63     std::string uname;
64     int         dirNum;
65     std::string dirName[DIR_NUM];
66 };
67 //-----------------------------------------------------------------------------
68 struct USERDATA
69 {
70     std::string     login;
71     std::string     password;
72     double          cash;
73     double          credit;
74     double          lastCash;
75     double          prepaidTraff;
76     int             down;
77     int             passive;
78     int             disableDetailStat;
79     int             connected;
80     int             alwaysOnline;
81     uint32_t        ip;
82     std::string     ips;
83     std::string     tariff;
84     std::string     iface;
85     std::string     group;
86     std::string     note;
87     std::string     email;
88     std::string     name;
89     std::string     address;
90     std::string     phone;
91     STAT            stat;
92     std::string     userData[USERDATA_NUM];
93
94     struct USERDATA * next;
95 };
96 //-----------------------------------------------------------------------------
97 typedef void(*RecvUserDataCb_t)(USERDATA * ud, void * data);
98 typedef void(*RecvServerInfoDataCb_t)(SERVERINFO * si, void * data);
99 typedef int(*RecvChgUserCb_t)(const char * asnwer, void * data);
100 typedef int(*RecvCheckUserCb_t)(const char * answer, void * data);
101 typedef int(*RecvSendMessageCb_t)(const char * answer, void * data);
102 //-----------------------------------------------------------------------------
103 struct ADMINDATA
104 {
105     char login[ADM_LOGIN_LEN];
106 };
107 //-----------------------------------------------------------------------------
108 class PARSER
109 {
110 public:
111     PARSER();
112     virtual ~PARSER(){};
113     virtual int ParseStart(const char *el, const char **attr) = 0;
114     virtual void ParseEnd(const char *el) = 0;
115     void    Reset();
116     //virtual bool    GetError() = 0;
117     //virtual void    SetUserDataRecvCb(RecvUserDataCb_t) = 0;
118 protected:
119     //RecvUserDataCb_t RecvUserDataCb;
120 private:
121 };
122 //-----------------------------------------------------------------------------
123 class PARSER_CHG_USER: public PARSER
124 {
125 public:
126     PARSER_CHG_USER();
127     int  ParseStart(const char *el, const char **attr);
128     void ParseEnd(const char *el);
129     void Reset();
130     void ParseAnswer(const char *el, const char **attr);
131     void SetChgUserRecvCb(RecvChgUserCb_t, void * data);
132 private:
133     RecvChgUserCb_t RecvChgUserCb;
134     void * chgUserCbData;
135     int depth;
136     bool error;
137 };
138 //-----------------------------------------------------------------------------
139 class PARSER_CHECK_USER: public PARSER
140 {
141 public:
142     PARSER_CHECK_USER();
143     int  ParseStart(const char *el, const char **attr);
144     void ParseEnd(const char *el);
145     void Reset();
146     void ParseAnswer(const char *el, const char **attr);
147     void SetCheckUserRecvCb(RecvCheckUserCb_t, void * data);
148 private:
149     RecvCheckUserCb_t RecvCheckUserCb;
150     void * checkUserCbData;
151     int depth;
152     bool error;
153 };
154 //-----------------------------------------------------------------------------
155 class PARSER_GET_USERS: public PARSER
156 {
157 public:
158     PARSER_GET_USERS();
159     int  ParseStart(const char *el, const char **attr);
160     void ParseEnd(const char *el);
161     void Reset();
162     void ParseUsers(const char *el, const char **attr);
163     void ParseUser(const char *el, const char **attr);
164     void ParseUserParams(const char *el, const char **attr);
165     void ParseUserLoadStat(const char * el, const char ** attr);
166     //bool GetError();
167     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
168 private:
169     RecvUserDataCb_t RecvUserDataCb;
170     void * userDataCb;
171     USERDATA user;
172     int depth;
173     bool error;
174 };
175 //-----------------------------------------------------------------------------
176 class PARSER_GET_USER: public PARSER
177 {
178 public:
179     PARSER_GET_USER();
180     int  ParseStart(const char *el, const char **attr);
181     void ParseEnd(const char *el);
182     void Reset();
183     void ParseUsers(const char *el, const char **attr);
184     void ParseUser(const char *el, const char **attr);
185     void ParseUserParams(const char *el, const char **attr);
186     void ParseUserLoadStat(const char * el, const char ** attr);
187     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
188 private:
189     RecvUserDataCb_t RecvUserDataCb;
190     void * userDataCb;
191     USERDATA user;
192     int depth;
193     bool error;
194 };
195 //-----------------------------------------------------------------------------
196 class PARSER_GET_SERVER_INFO: public PARSER
197 {
198 public:
199     PARSER_GET_SERVER_INFO();
200     int  ParseStart(const char *el, const char **attr);
201     void ParseEnd(const char *el);
202     void Reset();
203     void ParseServerInfo(const char *el, const char **attr);
204     bool GetError();
205     void SetServerInfoRecvCb(RecvServerInfoDataCb_t, void * data);
206 private:
207     void ParseUname(const char ** attr);
208     void ParseServerVersion(const char ** attr);
209     void ParseUsersNum(const char ** attr);
210     void ParseTariffsNum(const char ** attr);
211     void ParseTariffType(const char ** attr);
212     void ParseDirNum(const char **attr);
213     void ParseDirName(const char **attr, int d);
214
215     RecvServerInfoDataCb_t RecvServerInfoDataCb;
216     void * serverInfoDataCb;
217     USERDATA user;
218     int depth;
219     bool error;
220     SERVERINFO serverInfo;
221 };
222 //-----------------------------------------------------------------------------
223 class PARSER_SEND_MESSAGE: public PARSER
224 {
225 public:
226     PARSER_SEND_MESSAGE();
227     int  ParseStart(const char *el, const char **attr);
228     void ParseEnd(const char *el);
229     void Reset();
230     void ParseAnswer(const char *el, const char **attr);
231     void SetSendMessageRecvCb(RecvSendMessageCb_t, void * data);
232 private:
233     RecvSendMessageCb_t RecvSendMessageCb;
234     void * sendMessageCbData;
235     int depth;
236     bool error;
237 };
238 //-----------------------------------------------------------------------------
239 class SERVCONF
240 {
241 public:
242     SERVCONF();
243     void SetServer(const char * server);
244     void SetPort(uint16_t port);
245
246     void SetAdmLogin(const char * login);
247     void SetAdmPassword(const char * password);
248
249     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
250     void SetServerInfoRecvCb(RecvServerInfoDataCb_t, void * data);
251     void SetChgUserCb(RecvChgUserCb_t, void * data);
252     void SetCheckUserCb(RecvCheckUserCb_t, void * data);
253     void SetGetUserDataRecvCb(RecvUserDataCb_t, void * data);
254     void SetSendMessageCb(RecvSendMessageCb_t, void * data);
255
256     int GetUsers();
257     int GetUser(const char * login);
258     int ChgUser(const char * request);
259     // TODO: Remove this shit!
260     int MsgUser(const char * request);
261     int SendMessage(const char * login, const char * message, int prio);
262     int GetServerInfo();
263     int CheckUser(const char * login, const char * password);
264
265     char * GetStrError();
266     int  GetError();
267     int Start(const char *el, const char **attr);
268     void End(const char *el);
269
270 private:
271     PARSER * currParser;
272
273     PARSER_GET_USERS parserGetUsers;
274     PARSER_GET_USER parserGetUser;
275     PARSER_GET_SERVER_INFO  parserServerInfo;
276     PARSER_CHG_USER parserChgUser;
277     PARSER_CHECK_USER parserCheckUser;
278     PARSER_SEND_MESSAGE parserSendMessage;
279
280     NETTRANSACT nt;
281     int parseDepth;
282     USERDATA ud;
283
284     char    errorMsg[MAX_ERR_STR_LEN];
285     int     error;
286     XML_Parser      parser;
287
288     RecvUserDataCb_t RecvUserDataCb;
289     RecvUserDataCb_t RecvGetUserDataCb;
290     RecvServerInfoDataCb_t RecvServerInfoDataCb;
291     RecvChgUserCb_t RecvChgUserCb;
292     RecvCheckUserCb_t RecvCheckUserCb;
293     RecvSendMessageCb_t RecvSendMessageCb;
294
295     void * getUserDataDataCb;
296     void * getUsersDataDataCb;
297     void * getServerInfoDataCb;
298     void * chgUserDataCb;
299     void * checkUserDataCb;
300     void * sendMessageDataCb;
301
302     friend int AnsRecv(void * data, std::list<std::string> * list);
303 };
304 //-----------------------------------------------------------------------------
305
306 #endif  /* _SERVCONF_H_ */
307
308 /* EOF */
309