Mercurial > pidgin.yaz
annotate src/protocols/icq/icq.h @ 8684:046dd8ef2920
[gaim-migrate @ 9437]
Excess whitespace bad, especially *that* much.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sat, 17 Apr 2004 18:29:20 +0000 |
parents | 5e7ffea3f76a |
children |
rev | line source |
---|---|
2086 | 1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | |
3 /* | |
8244
5e7ffea3f76a
[gaim-migrate @ 8967]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
2086
diff
changeset
|
4 * $Id: icq.h 8967 2004-02-12 19:54:18Z hermanator $ |
2086 | 5 * |
6 * Copyright (C) 1998-2001, Denis V. Dmitrienko <denis@null.net> and | |
7 * Bill Soudan <soudan@kde.org> | |
8 * | |
9 * This program is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * This program is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License | |
20 * along with this program; if not, write to the Free Software | |
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
22 * | |
23 */ | |
24 | |
25 #ifndef _ICQ_H_ | |
26 #define _ICQ_H_ | |
27 | |
28 #ifdef HAVE_CONFIG_H | |
29 #include <config.h> | |
30 #endif | |
31 | |
32 #ifndef _WIN32 | |
33 #include <sys/time.h> | |
34 #include <sys/types.h> | |
35 #include <unistd.h> | |
36 #else | |
8244
5e7ffea3f76a
[gaim-migrate @ 8967]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
2086
diff
changeset
|
37 #include "libc_interface.h" |
2086 | 38 #endif /* _WIN32 */ |
39 | |
40 #ifdef __BEOS__ | |
41 #include <socket.h> | |
42 #endif | |
43 | |
44 #include <time.h> | |
45 | |
46 /* ICQLIB version defines */ | |
47 #define ICQLIBVER 0x010200 | |
48 #define ICQLIBMAJOR 1 | |
49 #define ICQLIBMINOR 2 | |
50 #define ICQLIBMICRO 0 | |
51 | |
52 | |
53 #define ICQ_LOG_OFF 0 | |
54 #define ICQ_LOG_FATAL 1 | |
55 #define ICQ_LOG_ERROR 2 | |
56 #define ICQ_LOG_WARNING 3 | |
57 #define ICQ_LOG_MESSAGE 4 | |
58 | |
59 #define STATUS_OFFLINE (-1L) | |
60 #define STATUS_ONLINE 0x0000L | |
61 #define STATUS_AWAY 0x0001L | |
62 #define STATUS_DND 0x0002L /* 0x13L */ | |
63 #define STATUS_NA 0x0004L /* 0x05L */ | |
64 #define STATUS_OCCUPIED 0x0010L /* 0x11L */ | |
65 #define STATUS_FREE_CHAT 0x0020L | |
66 #define STATUS_INVISIBLE 0x0100L | |
67 | |
68 #define ICQ_SEND_THRUSERVER 0 | |
69 #define ICQ_SEND_DIRECT 1 | |
70 #define ICQ_SEND_BESTWAY 2 | |
71 | |
72 #define ICQ_NOTIFY_SUCCESS 0 | |
73 #define ICQ_NOTIFY_FAILED 1 | |
74 #define ICQ_NOTIFY_CONNECTING 2 | |
75 #define ICQ_NOTIFY_CONNECTED 3 | |
76 #define ICQ_NOTIFY_SENT 4 | |
77 #define ICQ_NOTIFY_ACK 5 | |
78 | |
79 #define ICQ_NOTIFY_CHATSESSION 7 | |
80 #define ICQ_NOTIFY_FILESESSION 8 | |
81 | |
82 #define ICQ_MAX_MESSAGE_SIZE 1024 | |
83 #define ICQ_MAX_UDP_MESSAGE_SIZE 480 | |
84 | |
85 #ifdef __cplusplus | |
86 extern "C" { | |
87 #endif /* __cplusplus */ | |
88 | |
89 typedef struct | |
90 { | |
91 const char *name; | |
92 unsigned short code; | |
93 } icq_ArrayType; | |
94 | |
95 /* dummy forward declarations */ | |
96 typedef struct icq_LinkPrivate_s icq_LinkPrivate; | |
97 typedef struct icq_TCPLink_s icq_TCPLink; | |
98 typedef struct icq_FileSession_s icq_FileSession; | |
99 typedef struct icq_ChatSession_s icq_ChatSession; | |
100 typedef struct icq_Link_s icq_Link; | |
101 | |
102 /* Legacy compatibility - remove for icqlib 2.0.0 */ | |
103 typedef struct icq_Link_s ICQLINK; | |
104 #define icq_ICQLINKNew icq_LinkNew | |
105 #define icq_ICQLINKDelete icq_LinkDelete | |
106 | |
107 /** | |
108 * The icq_Link structure represents a single connection to the ICQ servers. | |
109 * It is returned as the result of an icq_ICQLINKNew function, and contains | |
110 * connection-specific parameters such as uin, sockets, current status, etc. | |
111 * | |
112 * This structure should be considered read-only. Modifying it will cause | |
113 * undefined results. | |
114 */ | |
115 struct icq_Link_s | |
116 { | |
117 /* General parameters */ | |
118 | |
119 /** User Identification Number. This is your ICQ 'account' number. */ | |
120 unsigned long icq_Uin; | |
121 | |
122 /** Our IP as understood by the ICQ server. This will be set once an | |
123 * UDP_SRV_LOGIN_REPLY has been received from the ICQ servers, in host | |
124 * byteorder. Note this may be different from the actual IP in cases | |
125 * such as firewalls, ip masquerading, etc. */ | |
126 unsigned long icq_OurIP; | |
127 | |
128 /** The UDP port used to connect to the ICQ server, in host byteorder. */ | |
129 unsigned short icq_OurPort; | |
130 | |
131 /** Our current ICQ status: one of the STATUS_* defines. | |
132 * @see icq_StatusUpdate */ | |
133 unsigned long icq_Status; | |
134 | |
135 /** The password used to log into the ICQ server. */ | |
136 char *icq_Password; | |
137 | |
138 /** The user's desired nickname. */ | |
139 char *icq_Nick; | |
140 | |
141 /* UDP stuff */ | |
142 | |
143 /** socket used to send and received UDP messages */ | |
144 int icq_UDPSok; | |
145 | |
146 /** Time, in seconds, that a sent UDP message can go without an ACK from the | |
147 * server before being retransmitted. */ | |
148 int icq_UDPExpireInterval; | |
149 | |
150 /* TCP stuff */ | |
151 | |
152 /** TCP listen port, in host byte order. The TCP implementation will listen | |
153 * here for new connections from other clients. This is transmitted as | |
154 * part of the ICQ login process. */ | |
155 unsigned short icq_TCPSrvPort; | |
156 | |
157 /** Has TCP been enabled for this connection? | |
158 * @see icq_Newicq_Link */ | |
159 unsigned char icq_UseTCP; | |
160 | |
161 /* SOCKS5 Proxy stuff */ | |
162 | |
163 /** Should all network traffic be redirected through a proxy? | |
164 * @see icq_SetProxy */ | |
165 unsigned char icq_UseProxy; | |
166 | |
167 /** Hostname of the SOCKS5 proxy to use. */ | |
168 char *icq_ProxyHost; | |
169 | |
170 /** IP Address of the SOCKS5 proxy after DNS resolution, in host byteorder. */ | |
171 unsigned long icq_ProxyIP; | |
172 | |
173 /** Port of the SOCKS5 proxy to use, in host byteorder. */ | |
174 unsigned short icq_ProxyPort; | |
175 | |
176 /** What's this? :) */ | |
177 int icq_ProxyAuth; | |
178 | |
179 /** Username used when logging into the proxy. */ | |
180 char *icq_ProxyName; | |
181 | |
182 /** Password used when logging into the proxy. */ | |
183 char *icq_ProxyPass; | |
184 | |
185 /** TCP socket used to communicate with the proxy. */ | |
186 int icq_ProxySok; | |
187 | |
188 unsigned short icq_ProxyOurPort; /* HOST byteorder */ | |
189 unsigned long icq_ProxyDestIP; /* HOST byteorder */ | |
190 unsigned short icq_ProxyDestPort; /* HOST byteorder */ | |
191 | |
192 /* Begin Callbacks */ | |
193 void (*icq_Logged)(icq_Link *icqlink); | |
194 void (*icq_Disconnected)(icq_Link *icqlink); | |
195 void (*icq_RecvMessage)(icq_Link *icqlink, unsigned long uin, | |
196 unsigned char hour, unsigned char minute, unsigned char day, | |
197 unsigned char month, unsigned short year, const char *msg); | |
198 void (*icq_RecvURL)(icq_Link *icqlink, unsigned long uin, | |
199 unsigned char hour, unsigned char minute, unsigned char day, | |
200 unsigned char month, unsigned short year, const char *url, | |
201 const char *descr); | |
202 void (*icq_RecvContactList)(icq_Link *icqlink, unsigned long uin, | |
203 unsigned char hour, unsigned char minute, unsigned char day, | |
204 unsigned char month, unsigned short year, int nr, | |
205 const char **contact_uin, const char **contact_nick); | |
206 void (*icq_RecvWebPager)(icq_Link *icqlink,unsigned char hour, | |
207 unsigned char minute, unsigned char day, unsigned char month, | |
208 unsigned short year, const char *nick, const char *email, | |
209 const char *msg); | |
210 void (*icq_RecvMailExpress)(icq_Link *icqlink,unsigned char hour, | |
211 unsigned char minute, unsigned char day, unsigned char month, | |
212 unsigned short year, const char *nick, const char *email, | |
213 const char *msg); | |
214 void (*icq_RecvChatReq)(icq_Link *icqlink, unsigned long uin, | |
215 unsigned char hour, unsigned char minute, unsigned char day, | |
216 unsigned char month, unsigned short year, const char *descr, | |
217 unsigned long seq); | |
218 void (*icq_RecvFileReq)(icq_Link *icqlink, unsigned long uin, | |
219 unsigned char hour, unsigned char minute, unsigned char day, | |
220 unsigned char month, unsigned short year, const char *descr, | |
221 const char *filename, unsigned long filesize, unsigned long seq); | |
222 void (*icq_RecvAdded)(icq_Link *icqlink, unsigned long uin, | |
223 unsigned char hour, unsigned char minute, unsigned char day, | |
224 unsigned char month, unsigned short year, const char *nick, | |
225 const char *first, const char *last, const char *email); | |
226 void (*icq_RecvAuthReq)(icq_Link *icqlink, unsigned long uin, | |
227 unsigned char hour, unsigned char minute, unsigned char day, | |
228 unsigned char month, unsigned short year, const char *nick, | |
229 const char *first, const char *last, const char *email, | |
230 const char *reason); | |
231 void (*icq_UserFound)(icq_Link *icqlink, unsigned long uin, | |
232 const char *nick, const char *first, const char *last, | |
233 const char *email, char auth); | |
234 void (*icq_SearchDone)(icq_Link *icqlink); | |
235 void (*icq_UpdateSuccess)(icq_Link *icqlink); | |
236 void (*icq_UpdateFailure)(icq_Link *icqlink); | |
237 void (*icq_UserOnline)(icq_Link *icqlink, unsigned long uin, | |
238 unsigned long status, unsigned long ip, unsigned short port, | |
239 unsigned long real_ip, unsigned char tcp_flag ); | |
240 void (*icq_UserOffline)(icq_Link *icqlink, unsigned long uin); | |
241 void (*icq_UserStatusUpdate)(icq_Link *icqlink, unsigned long uin, | |
242 unsigned long status); | |
243 void (*icq_RecvAwayMsg)(icq_Link *icqlink, unsigned long id, | |
244 const char *msg); | |
245 void (*icq_InfoReply)(icq_Link *icqlink, unsigned long uin, | |
246 const char *nick, const char *first, const char *last, | |
247 const char *email, char auth); | |
248 void (*icq_ExtInfoReply)(icq_Link *icqlink, unsigned long uin, | |
249 const char *city, unsigned short country_code, char country_stat, | |
250 const char *state, unsigned short age, char gender, | |
251 const char *phone, const char *hp, const char *about); | |
252 void (*icq_WrongPassword)(icq_Link *icqlink); | |
253 void (*icq_InvalidUIN)(icq_Link *icqlink); | |
254 void (*icq_Log)(icq_Link *icqlink, time_t log_time, unsigned char level, | |
255 const char *str); | |
256 void (*icq_SrvAck)(icq_Link *icqlink, unsigned short seq); | |
257 void (*icq_RequestNotify)(icq_Link *icqlink, unsigned long id, | |
258 int type, int arg, void *data); | |
259 void (*icq_FileNotify)(icq_FileSession *session, int type, int arg, | |
260 void *data); | |
261 void (*icq_ChatNotify)(icq_ChatSession *session, int type, int arg, | |
262 void *data); | |
263 void (*icq_NewUIN)(icq_Link *icqlink, unsigned long uin); | |
264 void (*icq_MetaUserFound)(icq_Link *icqlink, unsigned short seq2, | |
265 unsigned long uin, const char *nick, const char *first, | |
266 const char *last, const char *email, char auth); | |
267 void (*icq_MetaUserInfo)(icq_Link *icqlink, unsigned short seq2, | |
268 const char *nick, const char *first, const char *last, | |
269 const char *pri_eml, const char *sec_eml, const char *old_eml, | |
270 const char *city, const char *state, const char *phone, const char *fax, | |
271 const char *street, const char *cellular, unsigned long zip, | |
272 unsigned short country, unsigned char timezone, unsigned char auth, | |
273 unsigned char webaware, unsigned char hideip); | |
274 void (*icq_MetaUserWork)(icq_Link *icqlink, unsigned short seq2, | |
275 const char *wcity, const char *wstate, const char *wphone, | |
276 const char *wfax, const char *waddress, unsigned long wzip, | |
277 unsigned short wcountry, const char *company, const char *department, | |
278 const char *job, unsigned short occupation, const char *whomepage); | |
279 void (*icq_MetaUserMore)(icq_Link *icqlink, unsigned short seq2, | |
280 unsigned short age, unsigned char gender, const char *homepage, | |
281 unsigned char byear, unsigned char bmonth, unsigned char bday, | |
282 unsigned char lang1, unsigned char lang2, unsigned char lang3); | |
283 void (*icq_MetaUserAbout)(icq_Link *icqlink, unsigned short seq2, | |
284 const char *about); | |
285 void (*icq_MetaUserInterests)(icq_Link *icqlink, unsigned short seq2, | |
286 unsigned char num, unsigned short icat1, const char *int1, | |
287 unsigned short icat2, const char *int2, unsigned short icat3, | |
288 const char *int3, unsigned short icat4, const char *int4); | |
289 void (*icq_MetaUserAffiliations)(icq_Link *icqlink, unsigned short seq2, | |
290 unsigned char anum, unsigned short acat1, const char *aff1, | |
291 unsigned short acat2, const char *aff2, unsigned short acat3, | |
292 const char *aff3, unsigned short acat4, const char *aff4, | |
293 unsigned char bnum, unsigned short bcat1, const char *back1, | |
294 unsigned short bcat2, const char *back2, unsigned short bcat3, | |
295 const char *back3, unsigned short bcat4, const char *back4); | |
296 void (*icq_MetaUserHomePageCategory)(icq_Link *icqlink, | |
297 unsigned short seq2, unsigned char num, unsigned short hcat1, | |
298 const char *htext1); | |
299 /* End Callbacks */ | |
300 | |
301 /** Private data pointer. */ | |
302 icq_LinkPrivate *d; | |
303 | |
304 /** Space for user data */ | |
305 void *icq_UserData; | |
306 }; | |
307 | |
308 extern int icq_Russian; | |
309 extern unsigned char icq_LogLevel; | |
310 extern icq_ArrayType icq_Countries[]; | |
311 extern icq_ArrayType icq_Genders[]; | |
312 | |
313 icq_Link *icq_LinkNew(unsigned long uin, const char *password, | |
314 const char *nick, unsigned char useTCP); | |
315 void icq_LinkInit(icq_Link *icqlink, unsigned long uin, const char *password, | |
316 const char *nick, unsigned char useTCP); | |
317 void icq_LinkDestroy(icq_Link *icqlink); | |
318 void icq_LinkDelete(icq_Link *icqlink); | |
319 | |
320 void icq_Main(void); | |
321 const char *icq_GetCountryName(unsigned short code); | |
322 const char *icq_GetMetaOccupationName(unsigned short code); | |
323 const char *icq_GetMetaBackgroundName(unsigned short code); | |
324 const char *icq_GetMetaAffiliationName(unsigned short code); | |
325 const char *icq_GetMetaLanguageName(unsigned short code); | |
326 | |
327 /* Begin icq_Link methods */ | |
328 void icq_SetProxy(icq_Link *icqlink, const char *phost, unsigned short pport, | |
329 int pauth, const char *pname, const char *ppass); | |
330 void icq_UnsetProxy(icq_Link *icqlink); | |
331 | |
332 int icq_Connect(icq_Link *icqlink, const char *hostname, int port); | |
333 void icq_Disconnect(icq_Link *icqlink); | |
334 int icq_GetSok(icq_Link *icqlink); | |
335 int icq_GetProxySok(icq_Link *icqlink); | |
336 void icq_HandleServerResponse(icq_Link *icqlink); | |
337 void icq_HandleProxyResponse(icq_Link *icqlink); | |
338 unsigned short icq_KeepAlive(icq_Link *icqlink); | |
339 void icq_Login(icq_Link *icqlink, unsigned long status); | |
340 void icq_Logout(icq_Link *icqlink); | |
341 void icq_SendContactList(icq_Link *icqlink); | |
342 void icq_SendVisibleList(icq_Link *icqlink); | |
343 void icq_SendInvisibleList(icq_Link *icqlink); | |
344 void icq_SendNewUser(icq_Link *icqlink, unsigned long uin); | |
345 unsigned long icq_SendMessage(icq_Link *icqlink, unsigned long uin, | |
346 const char *text, unsigned char thruSrv); | |
347 unsigned long icq_SendURL(icq_Link *icqlink, unsigned long uin, const char *url, | |
348 const char *descr, unsigned char thruSrv); | |
349 void icq_ChangeStatus(icq_Link *icqlink, unsigned long status); | |
350 unsigned short icq_SendInfoReq(icq_Link *icqlink, unsigned long uin); | |
351 unsigned short icq_SendExtInfoReq(icq_Link *icqlink, unsigned long uin); | |
352 unsigned short icq_SendAuthMsg(icq_Link *icqlink, unsigned long uin); | |
353 void icq_SendSearchReq(icq_Link *icqlink, const char *email, const char *nick, | |
354 const char* first, const char* last); | |
355 void icq_SendSearchUINReq(icq_Link *icqlink, unsigned long uin); | |
356 | |
357 void icq_RegNewUser(icq_Link *icqlink, const char *pass); | |
358 unsigned short icq_UpdateUserInfo(icq_Link *icqlink, const char *nick, | |
359 const char *first, const char *last, const char *email); | |
360 unsigned short icq_UpdateAuthInfo(icq_Link *icqlink, unsigned long auth); | |
361 unsigned short icq_UpdateMetaInfoSet(icq_Link *icqlink, const char *nick, | |
362 const char *first, const char *last, const char *email, | |
363 const char *email2, const char *email3, const char *city, | |
364 const char *state, const char *phone, const char *fax, const char *street, | |
365 const char *cellular, unsigned long zip, unsigned short cnt_code, | |
366 unsigned char cnt_stat, unsigned char emailhide); | |
367 unsigned short icq_UpdateMetaInfoHomepage(icq_Link *icqlink, unsigned char age, | |
368 const char *homepage, unsigned char year, unsigned char month, | |
369 unsigned char day, unsigned char lang1, unsigned char lang2, | |
370 unsigned char lang3); | |
371 unsigned short icq_UpdateMetaInfoAbout(icq_Link *icqlink, const char *about); | |
372 unsigned short icq_UpdateMetaInfoSecurity(icq_Link *icqlink, unsigned char reqauth, | |
373 unsigned char webpresence, unsigned char pubip); | |
374 unsigned short icq_UpdateNewUserInfo(icq_Link *icqlink, const char *nick, | |
375 const char *first, const char *last, const char *email); | |
376 unsigned short icq_SendMetaInfoReq(icq_Link *icqlink, unsigned long uin); | |
377 | |
378 void icq_FmtLog(icq_Link *icqlink, int level, const char *fmt, ...); | |
379 | |
380 void icq_ContactAdd(icq_Link *icqlink, unsigned long cuin); | |
381 void icq_ContactRemove(icq_Link *icqlink, unsigned long cuin); | |
382 void icq_ContactClear(icq_Link *icqlink ); | |
383 void icq_ContactSetVis(icq_Link *icqlink, unsigned long cuin, unsigned char on); | |
384 void icq_ContactSetInvis(icq_Link *icqlink, unsigned long cuin, unsigned char on); | |
385 | |
386 /*** TCP ***/ | |
387 void icq_TCPMain(icq_Link *icqlink); | |
388 | |
389 void icq_TCPProcessReceived(icq_Link *icqlink); | |
390 | |
391 unsigned long icq_TCPSendMessage(icq_Link *icqlink, unsigned long uin, | |
392 const char *message); | |
393 unsigned long icq_TCPSendURL(icq_Link *icqlink, unsigned long uin, | |
394 const char *message, const char *url); | |
395 unsigned long icq_TCPSendAwayMessageReq(icq_Link *icqlink, unsigned long | |
396 uin, int status); | |
397 unsigned long icq_SendChatRequest(icq_Link *icqlink, unsigned long uin, | |
398 const char *message); | |
399 void icq_AcceptChatRequest(icq_Link *icqlink, unsigned long uin, unsigned long seq); | |
400 | |
401 void icq_CancelChatRequest(icq_Link *icqlink, unsigned long uin, | |
402 unsigned long sequence); | |
403 void icq_RefuseChatRequest(icq_Link *icqlink, unsigned long uin, | |
404 unsigned long sequence, const char *reason); | |
405 | |
406 /* End icq_Link Methods */ | |
407 | |
408 /*** TCP ***/ | |
409 | |
410 /** \defgroup ChatSession Chat Session Documentation | |
411 * icqlib's 'Chat Session' abstraction represents ICQ's 'chat' function | |
412 * between two participants. Multi-party chat is not yet supported. | |
413 * | |
414 * An icq_ChatSession is instantiated when a 'Chat Request' event is | |
415 * accepted. Upon receipt of a 'Chat Accept' event or a call to | |
416 * icq_AcceptChatRequest, icqlib will create a new chat session and pass the | |
417 * new chat session pointer back to the library client through the | |
418 * icq_RequestNotify / ICQ_NOTIFY_CHATSESSION callback. This pointer should | |
419 * be stored by the library client, as multiple chat sessions may be in | |
420 * progress at any given time. The icq_ChatSession pointer is used as a key | |
421 * for all future communication between the library and the library client to | |
422 * indicate which icq_ChatSession is currently being dealt with. | |
423 * | |
424 * icqlib communicates chat session events through use of the icq_ChatNotify | |
425 * callback, such as the CHAT_NOTIFY_DATA event. The library client | |
426 * can perform operations on a chat session by use of the icq_ChatSession* | |
427 * functions, such as sending data to the remote uin by using the | |
428 * icq_ChatSessionSendData function. | |
429 * | |
430 * A new chat session must first undergo an initialization sequence before is | |
431 * ready to transmit and receive data. As this initialization is in progress | |
432 * the chat session will transition through various statuses depending on | |
433 * whether icqlib sent the accept event or it received the accept event. | |
434 * Each change in chat session status will be reported to the library | |
435 * client through use of the icq_ChatNotify callback, with a @type parameter | |
436 * of CHAT_NOTIFY_STATUS and an @a arg parameter of the status value. | |
437 * | |
438 * Once the chat session initialization is complete, both sides will enter | |
439 * the CHAT_STATUS_READY state, indicating that the chat session is | |
440 * ready to send and receive data. Received data is reported through the | |
441 * icq_ChatNotify callback, with a @type of CHAT_NOTIFY_DATA. The library | |
442 * client can send data using icq_ChatSessionSendData or | |
443 * icq_ChatSessionSendData_n. | |
444 * | |
445 * Chat sessions may be terminated at any time, by either side. The library | |
446 * client may terminate a chat session by using icq_ChatSessionClose, or | |
447 * the remote uin may terminate a chat session. In either instance, a | |
448 * CHAT_STATUS_CLOSE event will be reported through the icq_ChatNotify | |
449 * callback. Once this callback is complete (e.g. your application's | |
450 * callback handler returns), the icq_ChatSession will be deleted by icqlib | |
451 * and the session pointer becomes invalid. | |
452 */ | |
453 | |
454 /** @name Type Constants | |
455 * @ingroup ChatSession | |
456 * These values are used as the @a type parameter in the icq_ChatNotify | |
457 * callback to indicate the type of chat session event that has occured. | |
458 * The remaining @a arg and @a data parameters passed by the callback | |
459 * are specific to each event; see the documentation for each type | |
460 * constant. | |
461 */ | |
462 | |
463 /*@{*/ | |
464 | |
465 /** Status has changed. | |
466 * @param arg new session status - one of the CHAT_STATUS_* defines | |
467 * @param data unused. | |
468 * @ingroup ChatSession | |
469 */ | |
470 #define CHAT_NOTIFY_STATUS 1 | |
471 | |
472 /** Data has been received from a chat participant. | |
473 * @param arg length of data received | |
474 * @param data pointer to buffer containing received data | |
475 * @ingroup ChatSession | |
476 */ | |
477 #define CHAT_NOTIFY_DATA 2 | |
478 | |
479 /** Session has been closed, either automatically by icqlib or | |
480 * explicitly by a call to icq_ChatSessionClose. | |
481 * @param arg unused | |
482 * @param data unused | |
483 * @ingroup ChatSession | |
484 */ | |
485 #define CHAT_NOTIFY_CLOSE 3 | |
486 | |
487 /*@}*/ | |
488 | |
489 /** @name Status Constants | |
490 * @ingroup ChatSession | |
491 * These constants are used as the @a arg parameter during in the | |
492 * icq_ChatNotify/CHAT_NOTIFY_STATUS callback to indicate the | |
493 * new status of the chat session. | |
494 */ | |
495 | |
496 /*@{*/ | |
497 | |
498 /** icqlib is listening for a chat connection from the remote uin. | |
499 * @ingroup ChatSession | |
500 */ | |
501 #define CHAT_STATUS_LISTENING 1 | |
502 | |
503 /** A connection has been established with the remote uin. | |
504 * @ingroup ChatSession | |
505 */ | |
506 #define CHAT_STATUS_CONNECTED 3 | |
507 | |
508 /** icqlib is currently waiting for the remote uin to send the chat | |
509 * initialization packet which contains the remote uin's chat handle. | |
510 * @ingroup ChatSession | |
511 */ | |
512 #define CHAT_STATUS_WAIT_NAME 4 | |
513 | |
514 /** icqlib is currently waiting for the remote uin to send the chat | |
515 * initialization packet which contains the remote uin's font information. | |
516 * @ingroup ChatSession | |
517 */ | |
518 #define CHAT_STATUS_WAIT_FONT 6 | |
519 | |
520 /** A connection to the chat session port of the remote uin is in | |
521 * progress. | |
522 * @ingroup ChatSession | |
523 */ | |
524 /* chat session statuses - request sender */ | |
525 #define CHAT_STATUS_CONNECTING 2 | |
526 | |
527 /** icqlib is currently waiting for the remote uin to send the chat | |
528 * initialization packet which contains the remote uin's chat handle | |
529 * and font information. | |
530 * @ingroup ChatSession | |
531 */ | |
532 #define CHAT_STATUS_WAIT_ALLINFO 5 | |
533 | |
534 /** Chat session initialization has completed successfully. The session | |
535 * is now fully established - both sides can begin to send data and | |
536 * should be prepared to accept data. | |
537 * @ingroup ChatSession | |
538 */ | |
539 #define CHAT_STATUS_READY 7 | |
540 | |
541 /*@}*/ | |
542 | |
543 /** Chat Session state structure. This structure is used internally by | |
544 * icqlib to maintain state information about each chat session. All | |
545 * members should be considered read-only! Use the appropriate | |
546 * icq_ChatSession* function to change the state of a chat session, | |
547 * results are undefined if your application attempts to manipulate this | |
548 * structure itself. | |
549 */ | |
550 struct icq_ChatSession_s { | |
551 | |
552 /** For internal icqlib use only. */ | |
553 unsigned long id; | |
554 | |
555 /** Current status of the chat session. See 'Status Constants' group. */ | |
556 int status; | |
557 | |
558 /** ICQLINK that spawned this chat session. */ | |
559 icq_Link *icqlink; | |
560 | |
561 /** For internal icqlib use only. */ | |
562 icq_TCPLink *tcplink; | |
563 | |
564 /** Remote uin number. */ | |
565 unsigned long remote_uin; | |
566 | |
567 /** Remote uin's chat handle. */ | |
568 char remote_handle[64]; | |
569 | |
570 /** Space for user data */ | |
571 void *user_data; | |
572 }; | |
573 | |
574 void icq_ChatSessionClose(icq_ChatSession *session); | |
575 void icq_ChatSessionSendData(icq_ChatSession *session, const char *data); | |
576 void icq_ChatSessionSendData_n(icq_ChatSession *session, const char *data, | |
577 int length); | |
578 | |
579 | |
580 /* FileNotify constants */ | |
581 #define FILE_NOTIFY_DATAPACKET 1 | |
582 #define FILE_NOTIFY_STATUS 2 | |
583 #define FILE_NOTIFY_CLOSE 3 | |
584 #define FILE_NOTIFY_NEW_SPEED 4 | |
585 #define FILE_NOTIFY_STOP_FILE 5 | |
586 | |
587 /* file session statuses- request receiver */ | |
588 #define FILE_STATUS_LISTENING 1 | |
589 #define FILE_STATUS_CONNECTED 3 | |
590 | |
591 /* file session statuses- request sender */ | |
592 #define FILE_STATUS_CONNECTING 2 | |
593 | |
594 #define FILE_STATUS_INITIALIZING 4 | |
595 | |
596 #define FILE_STATUS_NEXT_FILE 5 | |
597 | |
598 /* once negotiation is complete, file session enters proper state */ | |
599 #define FILE_STATUS_SENDING 6 | |
600 #define FILE_STATUS_RECEIVING 7 | |
601 | |
602 struct icq_FileSession_s { | |
603 | |
604 unsigned long id; | |
605 int status; | |
606 icq_Link *icqlink; | |
607 icq_TCPLink *tcplink; | |
608 | |
609 int direction; | |
610 | |
611 unsigned long remote_uin; | |
612 char remote_handle[64]; | |
613 | |
614 char **files; | |
615 int total_files; | |
616 int current_file_num; | |
617 unsigned long total_bytes; | |
618 unsigned long total_transferred_bytes; | |
619 | |
620 char working_dir[512]; | |
621 char current_file[64]; | |
622 int current_fd; | |
623 unsigned long current_file_size; | |
624 unsigned long current_file_progress; | |
625 | |
626 int current_speed; | |
627 | |
628 /** Space for user data */ | |
629 void *user_data; | |
630 }; | |
631 | |
632 icq_FileSession *icq_AcceptFileRequest(icq_Link *icqlink, unsigned long uin, | |
633 unsigned long sequence); | |
634 unsigned long icq_SendFileRequest(icq_Link *icqlink, unsigned long uin, | |
635 const char *message, char **files); | |
636 void icq_CancelFileRequest(icq_Link *icqlink, unsigned long uin, | |
637 unsigned long sequence); | |
638 void icq_RefuseFileRequest(icq_Link *icqlink, unsigned long uin, | |
639 unsigned long sequence, const char *reason); | |
640 | |
641 void icq_FileSessionSetSpeed(icq_FileSession *p, int speed); | |
642 void icq_FileSessionClose(icq_FileSession *p); | |
643 void icq_FileSessionSetWorkingDir(icq_FileSession *p, const char *dir); | |
644 void icq_FileSessionSetFiles(icq_FileSession *p, char **files); | |
645 | |
646 /* Socket Manager */ | |
647 | |
648 #define ICQ_SOCKET_READ 0 | |
649 #define ICQ_SOCKET_WRITE 1 | |
650 #define ICQ_SOCKET_MAX 2 | |
651 | |
652 extern void (*icq_SocketNotify)(int socket_fd, int type, int status); | |
653 | |
654 void icq_HandleReadySocket(int socket_fd, int type); | |
655 | |
656 /* Timeout Manager */ | |
657 | |
658 extern void (*icq_SetTimeout)(long interval); | |
659 | |
660 void icq_HandleTimeout(void); | |
661 | |
662 #ifdef __cplusplus | |
663 } | |
664 #endif /* __cplusplus */ | |
665 | |
666 #endif /* _ICQ_H_ */ |