1 /*
2 firetalk.h - FireTalk wrapper declarations
3 Copyright (C) 2000 Ian Gulliver
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of version 2 of the GNU General Public License as
7 published by the Free Software Foundation.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13 
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 */
18 #ifndef _FIRETALK_H
19 #define _FIRETALK_H
20 
21 #include <sys/types.h>
22 #include <sys/time.h>
23 #include <unistd.h>
24 #include <netinet/in.h>
25 
26 #define _FC_USE_IPV6
27 
28 #ifndef _HAVE_FIRETALK_T
29 typedef void *firetalk_t;
30 #define _HAVE_FIRETALK_T
31 #endif
32 
33 /* enums */
34 enum firetalk_protocol {
35         FP_DUMMY
36 };
37 
38 enum firetalk_callback {
39 	FC_CONNECTED,
40 		/* void *connection, void *clientstruct */
41 	FC_CONNECTFAILED,
42 		/* void *connection, void *clientstruct, int error, char *reason */
43 	FC_DOINIT,
44 		/* void *connection, void *clientstruct, char *nickname */
45 	FC_ERROR,
46 		/* void *connection, void *clientstruct, int error, char *roomoruser (room or user that error applies to, null if none) */
47 	FC_LOG,
48 	       /* void *connection, void *clientstruct, char *message */
49 	FC_DISCONNECT,
50 		/* void *connection, void *clientstruct, int error */
51 	FC_SETIDLE,
52 		/* void *connection, void *clientstruct, long *idle */
53 	FC_EVILED,
54 		/* void *connection, void *clientstruct, int newevil, char *eviler */
55 	FC_NEWNICK,
56 		/* void *connection, void *clientstruct, char *nickname */
57 	FC_PASSCHANGED,
58 		/* void *connection, void *clientstruct */
59 	FC_NEEDPASS,
60 		/* void *connection, void *clientstruct, char *pass, int size */
61 	FC_PRESELECT,
62 		/* void *connection, void *clientstruct */
63 	FC_POSTSELECT,
64 		/* void *connection, void *clientstruct */
65 	FC_IM_IDLEINFO,
66 		/* void *connection, void *clientstruct, char *nickname, long idletime */
67 	FC_IM_STATUSINFO,
68 		/* void *connection, void *clientstruct, char *nickname, char *message */
69 	FC_IM_EVILINFO,
70 		/* void *connection, void *clientstruct, char *nickname, long warnval */
71 	FC_IM_BUDDYADDED,
72 		/* void *connection, void *clientstruct, char *nickname, char *group, char *friendly */
73 	FC_IM_BUDDYREMOVED,
74 		/* void *connection, void *clientstruct, char *nickname */
75 	FC_IM_TYPINGINFO,
76 		/* void *connection, void *clientstruct, char *nickname, int typing */
77 	FC_IM_CAPABILITIES,
78 		/* void *connection, void *clientstruct, char *nickname, char *caps */
79 	FC_IM_GOTINFO,
80 		/* void *connection, void *clientstruct, char *nickname, char *info, int warning, int online, int idle, int flags */
81 	FC_IM_USER_NICKCHANGED,
82 		/* void *connection, void *clientstruct, char *oldnick, char *newnick */
83 	FC_IM_GOTCHANNELS,
84 	FC_IM_GETMESSAGE,
85 		/* void *connection, void *clientstruct, char *sender, int automessage_flag, char *message */
86 	FC_IM_GETACTION,
87 		/* void *connection, void *clientstruct, char *sender, int automessage_flag, char *message */
88 	FC_IM_BUDDYONLINE,
89 		/* void *connection, void *clientstruct, char *nickname */
90 	FC_IM_BUDDYOFFLINE,
91 		/* void *connection, void *clientstruct, char *nickname */
92 	FC_IM_BUDDYAWAY,
93 		/* void *connection, void *clientstruct, char *nickname */
94 	FC_IM_BUDDYUNAWAY,
95 		/* void *connection, void *clientstruct, char *nickname */
96 	FC_IM_LISTBUDDY,
97 		/* void *connection, void *clientstruct, char *nickname, char *group, char online, char away, long idletime */
98 	FC_CHAT_JOINED,
99 		/* void *connection, void *clientstruct, char *room */
100 	FC_CHAT_LEFT,
101 		/* void *connection, void *clientstruct, char *room */
102 	FC_CHAT_KICKED,
103 		/* void *connection, void *clientstruct, char *room, char *by, char *reason */
104 	FC_CHAT_GETMESSAGE,
105 		/* void *connection, void *clientstruct, char *room, char *from, int automessage_flag, char *message */
106 	FC_CHAT_GETACTION,
107 		/* void *connection, void *clientstruct, char *room, char *from, int automessage_flag, char *message */
108 	FC_CHAT_INVITED,
109 		/* void *connection, void *clientstruct, char *room, char *from, char *message */
110 //#ifdef RAWIRCMODES
111 	FC_CHAT_MODECHANGED,
112 		/* void *connection, void *clientstruct, char *room, char *mode, char *by */
113 //#endif
114 	FC_CHAT_OPPED,
115 		/* void *connection, void *clientstruct, char *room, char *by */
116 	FC_CHAT_DEOPPED,
117 		/* void *connection, void *clientstruct, char *room, char *by */
118 	FC_CHAT_USER_JOINED,
119 		/* void *connection, void *clientstruct, char *room, char *who */
120 	FC_CHAT_USER_LEFT,
121 		/* void *connection, void *clientstruct, char *room, char *who, char *reason */
122 	FC_CHAT_GOTTOPIC,
123 		/* void *connection, void *clientstruct, char *room, char *topic, char *author */
124 	FC_CHAT_USER_OPPED,
125 		/* void *connection, void *clientstruct, char *room, char *who, char *by */
126 	FC_CHAT_USER_DEOPPED,
127 		/* void *connection, void *clientstruct, char *room, char *who, char *by */
128 	FC_CHAT_USER_KICKED,
129 		/* void *connection, void *clientstruct, char *room, char *who, char *by, char *reason */
130 	FC_CHAT_USER_NICKCHANGED,
131 		/* void *connection, void *clientstruct, char *room, char *oldnick, char *newnick */
132 	FC_CHAT_KEYCHANGED,
133 		/* void *connection, void *clientstruct, char *room, char *what, char *by */
134 	FC_CHAT_LISTMEMBER,
135 		/* void *connection, vodi *clientstruct, char *room, char *membername, int opped */
136 	FC_CHAT_LIST_EXTENDED,
137 	FC_CHAT_END_EXTENDED,
138 	FC_CHAT_NAMES,
139 	FC_FILE_OFFER,
140 		/* void *connection, void *clientstruct, void *filehandle, char *from, char *filename, long size */
141 	FC_FILE_START,
142 		/* void *connection, void *clientstruct, void *filehandle, void *clientfilestruct */
143 	FC_FILE_PROGRESS,
144 		/* void *connection, void *clientstruct, void *filehandle, void *clientfilestruct, long bytes, long size */
145 	FC_FILE_FINISH,
146 		/* void *connection, void *clientstruct, void *filehandle, void *clientfilestruct, long size */
147 	FC_FILE_ERROR,
148 		/* void *connection, void *clientstruct, void *filehandle, void *clientfilestruct, int error */
149 	FC_MAX
150 		/* tracking enum, don't hook this */
151 };
152 
153 typedef enum {
154 	FE_SUCCESS,
155 	FE_CONNECT,
156 	FE_NOMATCH,
157 	FE_PACKET,
158 	FE_RECONNECTING,
159 	FE_BADUSERPASS,
160 	FE_SEQUENCE,
161 	FE_FRAMETYPE,
162 	FE_PACKETSIZE,
163 	FE_SERVER,
164 	FE_UNKNOWN,
165 	FE_BLOCKED,
166 	FE_WEIRDPACKET,
167 	FE_CALLBACKNUM,
168 	FE_BADUSER,
169 	FE_NOTFOUND,
170 	FE_DISCONNECT,
171 	FE_SOCKET,
172 	FE_RESOLV,
173 	FE_VERSION,
174 	FE_USERUNAVAILABLE,
175 	FE_USERINFOUNAVAILABLE,
176 	FE_TOOFAST,
177 	FE_ROOMUNAVAILABLE,
178 	FE_INCOMINGERROR,
179 	FE_USERDISCONNECT,
180 	FE_INVALIDFORMAT,
181 	FE_IDLEFAST,
182 	FE_BADROOM,
183 	FE_BADMESSAGE,
184 	FE_MESSAGETRUNCATED,
185 	FE_BADPROTO,
186 	FE_NOTCONNECTED,
187 	FE_BADCONNECTION,
188 	FE_NOPERMS,
189 	FE_NOCHANGEPASS,
190 	FE_DUPEROOM,
191 	FE_IOERROR,
192 	FE_BADHANDLE,
193 	FE_TIMEOUT
194 } fte_t;
195 
196 
197 
198 /* Firetalk functions */
199 int	firetalk_find_protocol(const char *strprotocol);
200 const char *firetalk_strprotocol(const enum firetalk_protocol p);
201 const char *firetalk_strerror(const fte_t	e);
202 firetalk_t firetalk_create_handle(const int protocol, void *clientstruct);
203 void firetalk_destroy_handle(firetalk_t conn);
204 enum firetalk_protocol firetalk_get_protocol(firetalk_t conn);
205 
206 fte_t	firetalk_disconnect(firetalk_t conn);
207 fte_t	firetalk_signon(firetalk_t conn, const char *const server, const short port, const char *const username);
208 fte_t	firetalk_register_callback(firetalk_t conn, const int type, void (*function)(firetalk_t, void *, ...));
209 firetalk_t firetalk_find_clientstruct(void *clientstruct);
210 
211 fte_t	firetalk_im_add_buddy(firetalk_t conn, const char *const name, const char *const group, const char *const friendly);
212 fte_t	firetalk_im_remove_buddy(firetalk_t conn, const char *const name);
213 fte_t	firetalk_im_add_deny(firetalk_t conn, const char *const name);
214 fte_t	firetalk_im_remove_deny(firetalk_t conn, const char *const name);
215 fte_t	firetalk_im_upload_buddies(firetalk_t conn);
216 fte_t	firetalk_im_upload_denies(firetalk_t conn);
217 fte_t	firetalk_im_send_message(firetalk_t conn, const char *const dest, const char *const message, const int auto_flag);
218 fte_t	firetalk_im_send_action(firetalk_t conn, const char *const dest, const char *const message, const int auto_flag);
219 fte_t	firetalk_im_list_buddies(firetalk_t conn);
220 fte_t	firetalk_im_evil(firetalk_t c, const char *const who);
221 fte_t	firetalk_im_get_info(firetalk_t conn, const char *const nickname);
222 
223 fte_t	firetalk_chat_join(firetalk_t conn, const char *const room);
224 fte_t	firetalk_chat_part(firetalk_t conn, const char *const room);
225 fte_t	firetalk_chat_send_message(firetalk_t conn, const char *const room, const char *const message, const int auto_flag);
226 fte_t	firetalk_chat_send_action(firetalk_t conn, const char *const room, const char *const message, const int auto_flag);
227 fte_t	firetalk_chat_invite(firetalk_t conn, const char *const room, const char *const who, const char *const message);
228 fte_t	firetalk_chat_set_topic(firetalk_t conn, const char *const room, const char *const topic);
229 fte_t	firetalk_chat_op(firetalk_t conn, const char *const room, const char *const who);
230 fte_t	firetalk_chat_deop(firetalk_t conn, const char *const room, const char *const who);
231 fte_t	firetalk_chat_kick(firetalk_t conn, const char *const room, const char *const who, const char *const reason);
232 fte_t	firetalk_chat_listmembers(firetalk_t conn, const char *const room);
233 
234 fte_t	firetalk_chat_requestextended(firetalk_t conn, const char * const room);
235 
236 fte_t	firetalk_im_searchemail(firetalk_t conn, const char * const email);
237 
238 fte_t	firetalk_im_internal_add_deny(firetalk_t conn, const char *const nickname);
239 fte_t	firetalk_im_internal_remove_buddy(firetalk_t conn, const char *const nickname);
240 fte_t	firetalk_im_internal_remove_deny(firetalk_t conn, const char *const nickname);
241 fte_t	firetalk_subcode_send_reply(firetalk_t conn, const char *const to, const char *const command, const char *const args);
242 fte_t	firetalk_subcode_send_request(firetalk_t conn, const char *const to, const char *const command, const char *const args);
243 
244 fte_t	firetalk_subcode_register_request_callback(firetalk_t conn, const char *const command, void (*callback)(firetalk_t, void *, const char *const, const char *const, const char *const));
245 fte_t	firetalk_subcode_register_request_reply(firetalk_t conn, const char *const command, const char *const reply);
246 fte_t	firetalk_subcode_register_reply_callback(firetalk_t conn, const char *const command, void (*callback)(firetalk_t, void *, const char *const, const char *const, const char *const));
247 
248 fte_t	firetalk_file_offer(firetalk_t conn, const char *const nickname, const char *const filename, void *clientfilestruct);
249 fte_t	firetalk_file_accept(firetalk_t conn, void *filehandle, void *clientfilestruct, const char *const localfile);
250 fte_t	firetalk_file_refuse(firetalk_t conn, void *filehandle);
251 fte_t	firetalk_file_cancel(firetalk_t conn, void *filehandle);
252 
253 fte_t	firetalk_compare_nicks(firetalk_t conn, const char *const nick1, const char *const nick2);
254 fte_t	firetalk_isprint(firetalk_t conn, const int c);
255 fte_t	firetalk_set_info(firetalk_t conn, const char *const info);
256 fte_t	firetalk_set_away(firetalk_t c, const char *const message, const int auto_flag);
257 const char *firetalk_chat_normalize(firetalk_t conn, const char *const room);
258 fte_t	firetalk_set_nickname(firetalk_t conn, const char *const nickname);
259 fte_t	firetalk_set_password(firetalk_t conn, const char *const oldpass, const char *const newpass);
260 fte_t	firetalk_set_privacy(firetalk_t conn, const char *const mode);
261 fte_t	firetalk_select();
262 fte_t	firetalk_select_custom(int n, fd_set *fd_read, fd_set *fd_write, fd_set *fd_except, struct timeval *timeout);
263 fte_t   firetalk_getsockets(const int prot, int **r, int **w, int **e);
264 #ifndef FIRETALK
265 extern fte_t	firetalkerror;
266 /* internal function, exported because dan reed is lazy */
267 int firetalk_internal_connect_host(const char *const host, const int port);
268 #endif
269 
270 #define FF_SUBSTANDARD                  0x0001
271 #define FF_NORMAL                       0x0002
272 #define FF_ADMIN                        0x0004
273 
274 #ifndef MSG_DONTWAIT
275 # define MSG_DONTWAIT	0
276 #endif
277 
278 #ifndef MSG_NOSIGNAL
279 # define MSG_NOSIGNAL	0
280 #endif
281 
282 #endif
283