]> git.stg.codes - stg.git/blob - stglibs/srvconf.lib/include/stg/servconf.h
srvconf refactoring: auth_by, server_info and check_user.
[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/parser_server_info.h"
34 #include "stg/parser_check_user.h"
35
36 #include "stg/os_int.h"
37 #include "stg/const.h"
38
39 #include <list>
40 #include <vector>
41 #include <string>
42
43 #include <expat.h>
44
45 void Start(void *data, const char *el, const char **attr);
46 void End(void *data, const char *el);
47
48 #define MAX_ERR_STR_LEN (64)
49 #define IP_STRING_LEN   (255)
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 USERDATA
62 {
63     std::string     login;
64     std::string     password;
65     double          cash;
66     double          credit;
67     time_t          creditExpire;
68     double          lastCash;
69     double          prepaidTraff;
70     int             down;
71     int             passive;
72     int             disableDetailStat;
73     int             connected;
74     int             alwaysOnline;
75     uint32_t        ip;
76     std::string     ips;
77     std::string     tariff;
78     std::string     iface;
79     std::string     group;
80     std::string     note;
81     std::string     email;
82     std::string     name;
83     std::string     address;
84     std::string     phone;
85     STAT            stat;
86     std::string     userData[USERDATA_NUM];
87
88     struct USERDATA * next;
89 };
90 //-----------------------------------------------------------------------------
91 typedef void(*RecvUserDataCb_t)(USERDATA * ud, void * data);
92 typedef int(*RecvChgUserCb_t)(const char * asnwer, void * data);
93 typedef int(*RecvSendMessageCb_t)(const char * answer, void * data);
94 //-----------------------------------------------------------------------------
95 struct ADMINDATA
96 {
97     char login[ADM_LOGIN_LEN];
98 };
99 //-----------------------------------------------------------------------------
100 class PARSER_CHG_USER: public PARSER
101 {
102 public:
103     PARSER_CHG_USER();
104     int  ParseStart(const char *el, const char **attr);
105     void ParseEnd(const char *el);
106     void ParseAnswer(const char *el, const char **attr);
107     void SetChgUserRecvCb(RecvChgUserCb_t, void * data);
108 private:
109     RecvChgUserCb_t RecvChgUserCb;
110     void * chgUserCbData;
111     int depth;
112     bool error;
113 };
114 //-----------------------------------------------------------------------------
115 class PARSER_GET_USERS: public PARSER
116 {
117 public:
118     PARSER_GET_USERS();
119     int  ParseStart(const char *el, const char **attr);
120     void ParseEnd(const char *el);
121     void ParseUsers(const char *el, const char **attr);
122     void ParseUser(const char *el, const char **attr);
123     void ParseUserParams(const char *el, const char **attr);
124     void ParseUserLoadStat(const char * el, const char ** attr);
125     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
126 private:
127     RecvUserDataCb_t RecvUserDataCb;
128     void * userDataCb;
129     USERDATA user;
130     int depth;
131     bool error;
132 };
133 //-----------------------------------------------------------------------------
134 class PARSER_GET_USER: public PARSER
135 {
136 public:
137     PARSER_GET_USER();
138     int  ParseStart(const char *el, const char **attr);
139     void ParseEnd(const char *el);
140     void ParseUsers(const char *el, const char **attr);
141     void ParseUser(const char *el, const char **attr);
142     void ParseUserParams(const char *el, const char **attr);
143     void ParseUserLoadStat(const char * el, const char ** attr);
144     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
145 private:
146     RecvUserDataCb_t RecvUserDataCb;
147     void * userDataCb;
148     USERDATA user;
149     int depth;
150     bool error;
151 };
152 //-----------------------------------------------------------------------------
153 class PARSER_SEND_MESSAGE: public PARSER
154 {
155 public:
156     PARSER_SEND_MESSAGE();
157     int  ParseStart(const char *el, const char **attr);
158     void ParseEnd(const char *el);
159     void ParseAnswer(const char *el, const char **attr);
160     void SetSendMessageRecvCb(RecvSendMessageCb_t, void * data);
161 private:
162     RecvSendMessageCb_t RecvSendMessageCb;
163     void * sendMessageCbData;
164     int depth;
165     bool error;
166 };
167 //-----------------------------------------------------------------------------
168 class SERVCONF
169 {
170 public:
171     SERVCONF();
172     void SetServer(const char * server);
173     void SetPort(uint16_t port);
174
175     void SetAdmLogin(const char * login);
176     void SetAdmPassword(const char * password);
177
178     void SetUserDataRecvCb(RecvUserDataCb_t, void * data);
179     void SetAuthByCallback(PARSER_AUTH_BY::CALLBACK f, void * data);
180     void SetServerInfoCallback(PARSER_SERVER_INFO::CALLBACK f, void * data);
181     void SetChgUserCb(RecvChgUserCb_t, void * data);
182     void SetCheckUserCallback(PARSER_CHECK_USER::CALLBACK f, void * data);
183     void SetGetUserDataRecvCb(RecvUserDataCb_t, void * data);
184     void SetSendMessageCb(RecvSendMessageCb_t, void * data);
185
186     int GetUsers();
187     int GetUser(const char * login);
188     int ChgUser(const char * request);
189     int AuthBy(const char * login);
190     // TODO: Remove this shit!
191     int MsgUser(const char * request);
192     int SendMessage(const char * login, const char * message, int prio);
193     int ServerInfo();
194     int CheckUser(const char * login, const char * password);
195
196     const std::string & GetStrError() const;
197     int GetError();
198     int Start(const char *el, const char **attr);
199     void End(const char *el);
200
201 private:
202     PARSER * currParser;
203
204     PARSER_GET_USERS parserGetUsers;
205     PARSER_GET_USER parserGetUser;
206     PARSER_AUTH_BY parserAuthBy;
207     PARSER_SERVER_INFO  parserServerInfo;
208     PARSER_CHG_USER parserChgUser;
209     PARSER_CHECK_USER parserCheckUser;
210     PARSER_SEND_MESSAGE parserSendMessage;
211
212     NETTRANSACT nt;
213     int parseDepth;
214
215     std::string errorMsg;
216     int error;
217     XML_Parser parser;
218
219     RecvUserDataCb_t RecvUserDataCb;
220     RecvUserDataCb_t RecvGetUserDataCb;
221     PARSER_AUTH_BY::CALLBACK authByCallback;
222     PARSER_SERVER_INFO::CALLBACK serverInfoCallback;
223     RecvChgUserCb_t RecvChgUserCb;
224     PARSER_CHECK_USER::CALLBACK checkUserCallback;
225     RecvSendMessageCb_t RecvSendMessageCb;
226
227     void * getUserDataDataCb;
228     void * authByData;
229     void * getUsersDataDataCb;
230     void * serverInfoData;
231     void * chgUserDataCb;
232     void * checkUserData;
233     void * sendMessageDataCb;
234
235     friend int AnsRecv(void * data, std::list<std::string> * list);
236 };
237 //-----------------------------------------------------------------------------
238
239 #endif  /* _SERVCONF_H_ */