]> git.stg.codes - stg.git/blob - stglibs/srvconf.lib/include/stg/servconf.h
Factored out users' parser.
[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 typedef int(*RecvChgUserCb_t)(const char * asnwer, void * data);
52 typedef int(*RecvSendMessageCb_t)(const char * answer, void * data);
53 //-----------------------------------------------------------------------------
54 struct ADMINDATA
55 {
56     char login[ADM_LOGIN_LEN];
57 };
58 //-----------------------------------------------------------------------------
59 class PARSER_CHG_USER: public PARSER
60 {
61 public:
62     PARSER_CHG_USER();
63     int  ParseStart(const char *el, const char **attr);
64     void ParseEnd(const char *el);
65     void ParseAnswer(const char *el, const char **attr);
66     void SetChgUserRecvCb(RecvChgUserCb_t, void * data);
67 private:
68     RecvChgUserCb_t RecvChgUserCb;
69     void * chgUserCbData;
70     int depth;
71     bool error;
72 };
73 //-----------------------------------------------------------------------------
74 class PARSER_SEND_MESSAGE: public PARSER
75 {
76 public:
77     PARSER_SEND_MESSAGE();
78     int  ParseStart(const char *el, const char **attr);
79     void ParseEnd(const char *el);
80     void ParseAnswer(const char *el, const char **attr);
81     void SetSendMessageRecvCb(RecvSendMessageCb_t, void * data);
82 private:
83     RecvSendMessageCb_t RecvSendMessageCb;
84     void * sendMessageCbData;
85     int depth;
86     bool error;
87 };
88 //-----------------------------------------------------------------------------
89 class SERVCONF
90 {
91 public:
92     SERVCONF();
93     void SetServer(const char * server);
94     void SetPort(uint16_t port);
95
96     void SetAdmLogin(const char * login);
97     void SetAdmPassword(const char * password);
98
99     void SetGetUsers(PARSER_GET_USERS::CALLBACK f, void * data);
100     void SetAuthByCallback(PARSER_AUTH_BY::CALLBACK f, void * data);
101     void SetServerInfoCallback(PARSER_SERVER_INFO::CALLBACK f, void * data);
102     void SetChgUserCb(RecvChgUserCb_t, void * data);
103     void SetCheckUserCallback(PARSER_CHECK_USER::CALLBACK f, void * data);
104     void SetGetUserCallback(PARSER_GET_USER::CALLBACK f, void * data);
105     void SetSendMessageCb(RecvSendMessageCb_t, void * data);
106
107     int GetUsers();
108     int GetUser(const char * login);
109     int ChgUser(const char * request);
110     int AuthBy(const char * login);
111     // TODO: Remove this shit!
112     int MsgUser(const char * request);
113     int SendMessage(const char * login, const char * message, int prio);
114     int ServerInfo();
115     int CheckUser(const char * login, const char * password);
116
117     const std::string & GetStrError() const;
118     int GetError();
119     int Start(const char *el, const char **attr);
120     void End(const char *el);
121
122 private:
123     PARSER * currParser;
124
125     PARSER_GET_USERS parserGetUsers;
126     PARSER_GET_USER parserGetUser;
127     PARSER_AUTH_BY parserAuthBy;
128     PARSER_SERVER_INFO  parserServerInfo;
129     PARSER_CHG_USER parserChgUser;
130     PARSER_CHECK_USER parserCheckUser;
131     PARSER_SEND_MESSAGE parserSendMessage;
132
133     NETTRANSACT nt;
134     int parseDepth;
135
136     std::string errorMsg;
137     int error;
138     XML_Parser parser;
139
140     PARSER_GET_USERS::CALLBACK getUsersCallback;
141     PARSER_GET_USER::CALLBACK getUserCallback;
142     PARSER_AUTH_BY::CALLBACK authByCallback;
143     PARSER_SERVER_INFO::CALLBACK serverInfoCallback;
144     RecvChgUserCb_t RecvChgUserCb;
145     PARSER_CHECK_USER::CALLBACK checkUserCallback;
146     RecvSendMessageCb_t RecvSendMessageCb;
147
148     void * getUserData;
149     void * authByData;
150     void * getUsersData;
151     void * serverInfoData;
152     void * chgUserDataCb;
153     void * checkUserData;
154     void * sendMessageDataCb;
155
156     friend int AnsRecv(void * data, std::list<std::string> * list);
157 };
158 //-----------------------------------------------------------------------------
159
160 #endif  /* _SERVCONF_H_ */