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