Mercurial > pidgin
annotate libfaim/aim.h @ 279:501e09c51cbc
[gaim-migrate @ 289]
Updates to libfaim -> updates to gaim.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Mon, 29 May 2000 20:30:48 +0000 |
parents | 810c595258c8 |
children | 7b06ba09ffe2 |
rev | line source |
---|---|
237 | 1 /* |
2 * Main libfaim header. Must be included in client for prototypes/macros. | |
3 * | |
4 */ | |
5 | |
2 | 6 #ifndef __AIM_H__ |
7 #define __AIM_H__ | |
8 | |
9 #include <faimconfig.h> | |
237 | 10 #include <aim_cbtypes.h> |
2 | 11 |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
12 #ifndef FAIM_USEPTHREADS |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
13 #error pthreads are currently required. |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
14 #endif |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
15 |
2 | 16 #include <stdio.h> |
17 #include <string.h> | |
18 #include <fcntl.h> | |
19 #include <sys/types.h> | |
20 #include <stdlib.h> | |
21 #include <stdarg.h> | |
22 #include <errno.h> | |
23 | |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
24 #ifdef FAIM_USEPTHREADS |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
25 #include <pthread.h> |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
26 #define faim_mutex_t pthread_mutex_t |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
27 #define faim_mutex_init pthread_mutex_init |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
28 #define faim_mutex_lock pthread_mutex_lock |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
29 #define faim_mutex_unlock pthread_mutex_unlock |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
30 #endif |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
31 |
237 | 32 #ifdef _WIN32 |
33 #include <windows.h> | |
34 #include <time.h> | |
35 #include <io.h> | |
36 #else | |
37 #include <netdb.h> | |
38 #include <sys/socket.h> | |
39 #include <netinet/in.h> | |
40 #include <sys/time.h> | |
41 #include <unistd.h> | |
42 #endif | |
43 | |
44 /* Portability stuff (DMP) */ | |
2 | 45 |
237 | 46 #ifdef _WIN32 |
47 #define sleep Sleep | |
48 #define strlen(x) (int)strlen(x) /* win32 has a unsigned size_t */ | |
49 #endif | |
50 | |
51 #if defined(_WIN32) || (defined(mach) && defined(__APPLE__)) | |
52 #define gethostbyname2(x,y) gethostbyname(x) /* revert to IPv4 */ | |
53 #endif | |
54 | |
55 /* | |
56 * Current Maximum Length for Screen Names (not including NULL) | |
57 */ | |
58 #define MAXSNLEN 16 | |
2 | 59 |
60 /* | |
237 | 61 * Standard size of an AIM authorization cookie |
2 | 62 */ |
237 | 63 #define AIM_COOKIELEN 0x100 |
2 | 64 |
237 | 65 #if debug > 0 |
66 #define faimdprintf(l, x...) {if (l >= debug) printf(x); } | |
67 #else | |
68 #define faimdprintf(l, x...) | |
69 #endif | |
2 | 70 |
237 | 71 /* |
72 * Login info. Passes information from the Authorization | |
73 * stage of login to the service (BOS, etc) connection | |
74 * phase. | |
75 * | |
76 */ | |
77 struct aim_login_struct { | |
78 char screen_name[MAXSNLEN+1]; | |
2 | 79 char *BOSIP; |
237 | 80 char cookie[AIM_COOKIELEN]; |
2 | 81 char *email; |
237 | 82 u_short regstatus; |
83 char *errorurl; | |
84 u_short errorcode; | |
2 | 85 }; |
86 | |
237 | 87 /* |
88 * Client info. Filled in by the client and passed | |
89 * in to aim_login(). The information ends up | |
90 * getting passed to OSCAR through the initial | |
91 * login command. | |
92 * | |
93 * XXX: Should this be per-session? -mid | |
94 * | |
95 */ | |
2 | 96 struct client_info_s { |
237 | 97 char clientstring[100]; /* arbitrary size */ |
2 | 98 int major; |
99 int minor; | |
100 int build; | |
101 char country[3]; | |
102 char lang[3]; | |
103 }; | |
104 | |
105 #ifndef TRUE | |
106 #define TRUE 1 | |
107 #define FALSE 0 | |
108 #endif | |
109 | |
237 | 110 /* |
111 * These could be arbitrary, but its easier to use the actual AIM values | |
112 */ | |
113 #define AIM_CONN_TYPE_AUTH 0x0007 | |
114 #define AIM_CONN_TYPE_ADS 0x0005 | |
115 #define AIM_CONN_TYPE_BOS 0x0002 | |
116 #define AIM_CONN_TYPE_CHAT 0x000e | |
117 #define AIM_CONN_TYPE_CHATNAV 0x000d | |
2 | 118 |
237 | 119 /* |
120 * Status values returned from aim_conn_new(). ORed together. | |
121 */ | |
122 #define AIM_CONN_STATUS_READY 0x0001 | |
2 | 123 #define AIM_CONN_STATUS_INTERNALERR 0x0002 |
237 | 124 #define AIM_CONN_STATUS_RESOLVERR 0x0080 |
125 #define AIM_CONN_STATUS_CONNERR 0x0040 | |
2 | 126 |
127 struct aim_conn_t { | |
128 int fd; | |
129 int type; | |
130 int seqnum; | |
131 int status; | |
237 | 132 void *priv; /* misc data the client may want to store */ |
133 time_t lastactivity; /* time of last transmit */ | |
134 int forcedlatency; | |
135 struct aim_rxcblist_t *handlerlist; | |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
136 #ifdef FAIM_USEPTHREADS |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
137 faim_mutex_t active; |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
138 #endif |
2 | 139 }; |
140 | |
141 /* struct for incoming commands */ | |
142 struct command_rx_struct { | |
143 /* byte 1 assumed to always be 0x2a */ | |
144 char type; /* type code (byte 2) */ | |
237 | 145 u_int seqnum; /* sequence number (bytes 3 and 4) */ |
146 u_int commandlen; /* total packet len - 6 (bytes 5 and 6) */ | |
147 u_char *data; /* packet data (from 7 byte on) */ | |
148 u_int lock; /* 0 = open, !0 = locked */ | |
149 u_int handled; /* 0 = new, !0 = been handled */ | |
150 u_int nofree; /* 0 = free data on purge, 1 = only unlink */ | |
2 | 151 struct aim_conn_t *conn; /* the connection it came in on... */ |
152 struct command_rx_struct *next; /* ptr to next struct in list */ | |
153 }; | |
154 | |
155 /* struct for outgoing commands */ | |
156 struct command_tx_struct { | |
157 /* byte 1 assumed to be 0x2a */ | |
158 char type; /* type/family code */ | |
237 | 159 u_int seqnum; /* seqnum dynamically assigned on tx */ |
160 u_int commandlen; /* SNAC length */ | |
161 u_char *data; /* packet data */ | |
162 u_int lock; /* 0 = open, !0 = locked */ | |
163 u_int sent; /* 0 = pending, !0 = has been sent */ | |
2 | 164 struct aim_conn_t *conn; |
165 struct command_tx_struct *next; /* ptr to next struct in list */ | |
166 }; | |
167 | |
237 | 168 |
169 /* | |
170 * AIM Session: The main client-data interface. | |
171 * | |
172 */ | |
173 struct aim_session_t { | |
174 | |
175 /* ---- Client Accessible ------------------------ */ | |
176 /* | |
177 * Login information. See definition above. | |
178 * | |
179 */ | |
180 struct aim_login_struct logininfo; | |
181 | |
182 /* | |
183 * Pointer to anything the client wants to | |
184 * explicitly associate with this session. | |
185 */ | |
186 void *aux_data; | |
187 | |
188 | |
189 /* ---- Internal Use Only ------------------------ */ | |
190 /* | |
191 * Connection information | |
192 */ | |
193 struct aim_conn_t conns[AIM_CONN_MAX]; | |
194 | |
195 /* | |
196 * TX/RX queues | |
197 */ | |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
198 struct command_tx_struct *queue_outgoing; |
237 | 199 struct command_rx_struct *queue_incoming; |
200 | |
201 /* | |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
202 * Tx Enqueuing function |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
203 */ |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
204 int (*tx_enqueue)(struct aim_session_t *, struct command_tx_struct *); |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
205 |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
206 /* |
237 | 207 * This is a dreadful solution to the what-room-are-we-joining |
208 * problem. (There's no connection between the service | |
209 * request and the resulting redirect.) | |
210 */ | |
211 char *pendingjoin; | |
212 | |
213 /* | |
214 * Outstanding snac handling | |
215 * | |
216 * XXX: Should these be per-connection? -mid | |
217 **/ | |
218 struct aim_snac_t *outstanding_snacs; | |
219 u_long snac_nextid; | |
220 }; | |
221 | |
222 | |
223 /* | |
224 * AIM User Info, Standard Form. | |
225 */ | |
226 struct aim_userinfo_s { | |
227 char sn[MAXSNLEN+1]; | |
228 u_short warnlevel; | |
229 u_short idletime; | |
230 u_short class; | |
231 u_long membersince; | |
232 u_long onlinesince; | |
233 u_long sessionlen; | |
234 u_short capabilities; | |
235 }; | |
236 | |
237 #define AIM_CLASS_TRIAL 0x0001 | |
238 #define AIM_CLASS_UNKNOWN2 0x0002 | |
239 #define AIM_CLASS_AOL 0x0004 | |
240 #define AIM_CLASS_UNKNOWN4 0x0008 | |
241 #define AIM_CLASS_FREE 0x0010 | |
242 #define AIM_CLASS_AWAY 0x0020 | |
243 #define AIM_CLASS_UNKNOWN40 0x0040 | |
244 #define AIM_CLASS_UNKNOWN80 0x0080 | |
245 | |
246 /* | |
247 * TLV handling | |
248 */ | |
249 | |
250 /* Generic TLV structure. */ | |
2 | 251 struct aim_tlv_t { |
252 u_short type; | |
253 u_short length; | |
254 u_char *value; | |
255 }; | |
256 | |
237 | 257 /* List of above. */ |
258 struct aim_tlvlist_t { | |
259 struct aim_tlv_t *tlv; | |
260 struct aim_tlvlist_t *next; | |
261 }; | |
262 | |
263 /* TLV-handling functions */ | |
264 struct aim_tlvlist_t *aim_readtlvchain(u_char *buf, int maxlen); | |
265 void aim_freetlvchain(struct aim_tlvlist_t **list); | |
2 | 266 struct aim_tlv_t *aim_grabtlv(u_char *src); |
267 struct aim_tlv_t *aim_grabtlvstr(u_char *src); | |
237 | 268 struct aim_tlv_t *aim_gettlv(struct aim_tlvlist_t *, u_short, int); |
269 char *aim_gettlv_str(struct aim_tlvlist_t *, u_short, int); | |
2 | 270 int aim_puttlv (u_char *dest, struct aim_tlv_t *newtlv); |
271 struct aim_tlv_t *aim_createtlv(void); | |
272 int aim_freetlv(struct aim_tlv_t **oldtlv); | |
273 int aim_puttlv_16(u_char *, u_short, u_short); | |
237 | 274 int aim_puttlv_32(u_char *, u_short, u_long); |
275 int aim_puttlv_str(u_char *buf, u_short t, u_short l, u_char *v); | |
276 int aim_writetlvchain(u_char *buf, int buflen, struct aim_tlvlist_t **list); | |
277 int aim_addtlvtochain16(struct aim_tlvlist_t **list, unsigned short type, unsigned short val); | |
278 int aim_addtlvtochain32(struct aim_tlvlist_t **list, unsigned short type, unsigned long val); | |
279 int aim_addtlvtochain_str(struct aim_tlvlist_t **list, unsigned short type, char *str, int len); | |
280 int aim_counttlvchain(struct aim_tlvlist_t **list); | |
2 | 281 |
237 | 282 /* |
283 * Get command from connections / Dispatch commands | |
284 * already in queue. | |
285 */ | |
286 int aim_get_command(struct aim_session_t *, struct aim_conn_t *); | |
287 int aim_rxdispatch(struct aim_session_t *); | |
2 | 288 |
237 | 289 int aim_logoff(struct aim_session_t *); |
2 | 290 |
291 | |
237 | 292 typedef int (*rxcallback_t)(struct aim_session_t *, struct command_rx_struct *, ...); |
293 int aim_register_callbacks(rxcallback_t *); | |
2 | 294 |
237 | 295 u_long aim_genericreq_n(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype); |
296 u_long aim_genericreq_l(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype, u_long *); | |
297 u_long aim_genericreq_s(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype, u_short *); | |
2 | 298 |
237 | 299 /* aim_login.c */ |
300 int aim_sendconnack(struct aim_session_t *sess, struct aim_conn_t *conn); | |
301 int aim_request_login (struct aim_session_t *sess, struct aim_conn_t *conn, char *sn); | |
302 int aim_send_login (struct aim_session_t *, struct aim_conn_t *, char *, char *, struct client_info_s *); | |
303 int aim_encode_password(const char *, u_char *); | |
304 unsigned long aim_sendauthresp(struct aim_session_t *sess, | |
305 struct aim_conn_t *conn, | |
306 char *sn, char *bosip, | |
307 char *cookie, char *email, | |
308 int regstatus); | |
309 int aim_gencookie(unsigned char *buf); | |
310 int aim_sendserverready(struct aim_session_t *sess, struct aim_conn_t *conn); | |
311 unsigned long aim_sendredirect(struct aim_session_t *sess, | |
312 struct aim_conn_t *conn, | |
313 unsigned short servid, | |
314 char *ip, | |
315 char *cookie); | |
316 void aim_purge_rxqueue(struct aim_session_t *); | |
2 | 317 |
318 | |
237 | 319 int aim_parse_unknown(struct aim_session_t *, struct command_rx_struct *command, ...); |
320 int aim_parse_missed_im(struct aim_session_t *, struct command_rx_struct *, ...); | |
321 int aim_parse_last_bad(struct aim_session_t *, struct command_rx_struct *, ...); | |
322 | |
323 struct command_tx_struct *aim_tx_new(int, struct aim_conn_t *, int); | |
279
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
324 int aim_tx_enqueue__queuebased(struct aim_session_t *, struct command_tx_struct *); |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
325 int aim_tx_enqueue__immediate(struct aim_session_t *, struct command_tx_struct *); |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
326 #define aim_tx_enqueue(x, y) ((*(x->tx_enqueue))(x, y)) |
501e09c51cbc
[gaim-migrate @ 289]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
249
diff
changeset
|
327 int aim_tx_sendframe(struct command_tx_struct *cur); |
237 | 328 u_int aim_get_next_txseqnum(struct aim_conn_t *); |
329 int aim_tx_flushqueue(struct aim_session_t *); | |
330 int aim_tx_printqueue(struct aim_session_t *); | |
331 void aim_tx_purgequeue(struct aim_session_t *); | |
2 | 332 |
237 | 333 struct aim_rxcblist_t { |
334 u_short family; | |
335 u_short type; | |
336 rxcallback_t handler; | |
337 u_short flags; | |
338 struct aim_rxcblist_t *next; | |
339 }; | |
2 | 340 |
237 | 341 int aim_conn_setlatency(struct aim_conn_t *conn, int newval); |
342 | |
343 int aim_conn_addhandler(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short type, rxcallback_t newhandler, u_short flags); | |
344 rxcallback_t aim_callhandler(struct aim_conn_t *conn, u_short family, u_short type); | |
345 int aim_clearhandlers(struct aim_conn_t *conn); | |
346 | |
347 /* | |
348 * Generic SNAC structure. Rarely if ever used. | |
349 */ | |
2 | 350 struct aim_snac_t { |
351 u_long id; | |
352 u_short family; | |
353 u_short type; | |
354 u_short flags; | |
355 void *data; | |
356 time_t issuetime; | |
357 struct aim_snac_t *next; | |
358 }; | |
237 | 359 u_long aim_newsnac(struct aim_session_t *, struct aim_snac_t *newsnac); |
360 struct aim_snac_t *aim_remsnac(struct aim_session_t *, u_long id); | |
361 int aim_cleansnacs(struct aim_session_t *, int maxage); | |
2 | 362 int aim_putsnac(u_char *, int, int, int, u_long); |
363 | |
237 | 364 |
365 void aim_connrst(struct aim_session_t *); | |
366 struct aim_conn_t *aim_conn_getnext(struct aim_session_t *); | |
2 | 367 void aim_conn_close(struct aim_conn_t *deadconn); |
237 | 368 struct aim_conn_t *aim_getconn_type(struct aim_session_t *, int type); |
369 struct aim_conn_t *aim_newconn(struct aim_session_t *, int type, char *dest); | |
370 int aim_conngetmaxfd(struct aim_session_t *); | |
371 struct aim_conn_t *aim_select(struct aim_session_t *, struct timeval *, int *); | |
2 | 372 int aim_conn_isready(struct aim_conn_t *); |
373 int aim_conn_setstatus(struct aim_conn_t *, int); | |
237 | 374 void aim_session_init(struct aim_session_t *); |
2 | 375 |
376 /* aim_misc.c */ | |
377 | |
237 | 378 #define AIM_VISIBILITYCHANGE_PERMITADD 0x05 |
2 | 379 #define AIM_VISIBILITYCHANGE_PERMITREMOVE 0x06 |
237 | 380 #define AIM_VISIBILITYCHANGE_DENYADD 0x07 |
381 #define AIM_VISIBILITYCHANGE_DENYREMOVE 0x08 | |
2 | 382 |
237 | 383 u_long aim_bos_setidle(struct aim_session_t *, struct aim_conn_t *, u_long); |
384 u_long aim_bos_changevisibility(struct aim_session_t *, struct aim_conn_t *, int, char *); | |
385 u_long aim_bos_setbuddylist(struct aim_session_t *, struct aim_conn_t *, char *); | |
386 u_long aim_bos_setprofile(struct aim_session_t *, struct aim_conn_t *, char *, char *, unsigned int); | |
387 u_long aim_bos_setgroupperm(struct aim_session_t *, struct aim_conn_t *, u_long); | |
388 u_long aim_bos_clientready(struct aim_session_t *, struct aim_conn_t *); | |
389 u_long aim_bos_reqrate(struct aim_session_t *, struct aim_conn_t *); | |
390 u_long aim_bos_ackrateresp(struct aim_session_t *, struct aim_conn_t *); | |
391 u_long aim_bos_setprivacyflags(struct aim_session_t *, struct aim_conn_t *, u_long); | |
392 u_long aim_bos_reqpersonalinfo(struct aim_session_t *, struct aim_conn_t *); | |
393 u_long aim_bos_reqservice(struct aim_session_t *, struct aim_conn_t *, u_short); | |
394 u_long aim_bos_reqrights(struct aim_session_t *, struct aim_conn_t *); | |
395 u_long aim_bos_reqbuddyrights(struct aim_session_t *, struct aim_conn_t *); | |
396 u_long aim_bos_reqlocaterights(struct aim_session_t *, struct aim_conn_t *); | |
397 u_long aim_bos_reqicbmparaminfo(struct aim_session_t *, struct aim_conn_t *); | |
398 u_long aim_setversions(struct aim_session_t *sess, struct aim_conn_t *conn); | |
2 | 399 |
400 /* aim_rxhandlers.c */ | |
237 | 401 int aim_rxdispatch(struct aim_session_t *); |
402 int aim_authparse(struct aim_session_t *, struct command_rx_struct *); | |
403 int aim_handleredirect_middle(struct aim_session_t *, struct command_rx_struct *, ...); | |
404 int aim_parse_unknown(struct aim_session_t *, struct command_rx_struct *, ...); | |
405 int aim_parse_last_bad(struct aim_session_t *, struct command_rx_struct *, ...); | |
406 int aim_parse_generalerrs(struct aim_session_t *, struct command_rx_struct *command, ...); | |
407 int aim_parsemotd_middle(struct aim_session_t *sess, struct command_rx_struct *command, ...); | |
2 | 408 |
409 /* aim_im.c */ | |
410 #define AIM_IMFLAGS_AWAY 0x01 /* mark as an autoreply */ | |
237 | 411 #define AIM_IMFLAGS_ACK 0x02 /* request a receipt notice */ |
412 | |
413 u_long aim_send_im(struct aim_session_t *, struct aim_conn_t *, char *, u_int, char *); | |
414 int aim_parse_incoming_im_middle(struct aim_session_t *, struct command_rx_struct *); | |
415 u_long aim_seticbmparam(struct aim_session_t *, struct aim_conn_t *conn); | |
416 int aim_parse_msgerror_middle(struct aim_session_t *, struct command_rx_struct *); | |
2 | 417 |
418 /* aim_info.c */ | |
237 | 419 #define AIM_CAPS_BUDDYICON 0x01 |
420 #define AIM_CAPS_VOICE 0x02 | |
421 #define AIM_CAPS_IMIMAGE 0x04 | |
422 #define AIM_CAPS_CHAT 0x08 | |
423 #define AIM_CAPS_GETFILE 0x10 | |
424 #define AIM_CAPS_SENDFILE 0x20 | |
425 extern u_char aim_caps[6][16]; | |
249
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
426 |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
427 #define AIM_GETINFO_GENERALINFO 0x00001 |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
428 #define AIM_GETINFO_AWAYMESSAGE 0x00003 |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
429 |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
430 u_long aim_getinfo(struct aim_session_t *, struct aim_conn_t *, const char *, unsigned short); |
237 | 431 int aim_extractuserinfo(u_char *, struct aim_userinfo_s *); |
432 int aim_parse_userinfo_middle(struct aim_session_t *, struct command_rx_struct *); | |
433 int aim_parse_oncoming_middle(struct aim_session_t *, struct command_rx_struct *); | |
434 int aim_parse_offgoing_middle(struct aim_session_t *, struct command_rx_struct *); | |
435 int aim_putuserinfo(u_char *buf, int buflen, struct aim_userinfo_s *info); | |
436 int aim_sendbuddyoncoming(struct aim_session_t *sess, struct aim_conn_t *conn, struct aim_userinfo_s *info); | |
437 int aim_sendbuddyoffgoing(struct aim_session_t *sess, struct aim_conn_t *conn, char *sn); | |
438 | |
2 | 439 |
440 /* aim_auth.c */ | |
237 | 441 int aim_auth_sendcookie(struct aim_session_t *, struct aim_conn_t *, u_char *); |
442 u_long aim_auth_clientready(struct aim_session_t *, struct aim_conn_t *); | |
443 u_long aim_auth_changepasswd(struct aim_session_t *, struct aim_conn_t *, char *, char *); | |
2 | 444 |
445 /* aim_buddylist.c */ | |
237 | 446 u_long aim_add_buddy(struct aim_session_t *, struct aim_conn_t *, char *); |
447 u_long aim_remove_buddy(struct aim_session_t *, struct aim_conn_t *, char *); | |
2 | 448 |
449 /* aim_search.c */ | |
237 | 450 u_long aim_usersearch_address(struct aim_session_t *, struct aim_conn_t *, char *); |
451 /* u_long aim_usersearch_name(struct aim_session_t *, struct aim_conn_t *, char *); */ | |
452 | |
453 | |
454 struct aim_chat_roominfo { | |
455 u_short exchange; | |
456 char *name; | |
457 u_short instance; | |
458 }; | |
459 int aim_chat_readroominfo(u_char *buf, struct aim_chat_roominfo *outinfo); | |
460 int aim_chat_parse_infoupdate(struct aim_session_t *sess, struct command_rx_struct *command); | |
461 int aim_chat_parse_joined(struct aim_session_t *sess, struct command_rx_struct *command); | |
462 int aim_chat_parse_leave(struct aim_session_t *sess, struct command_rx_struct *command); | |
463 int aim_chat_parse_incoming(struct aim_session_t *sess, struct command_rx_struct *command); | |
464 u_long aim_chat_send_im(struct aim_session_t *sess, struct aim_conn_t *conn, char *msg); | |
465 u_long aim_chat_join(struct aim_session_t *sess, struct aim_conn_t *conn, u_short exchange, const char *roomname); | |
466 u_long aim_chat_clientready(struct aim_session_t *sess, struct aim_conn_t *conn); | |
467 int aim_chat_attachname(struct aim_conn_t *conn, char *roomname); | |
468 char *aim_chat_getname(struct aim_conn_t *conn); | |
469 struct aim_conn_t *aim_chat_getconn(struct aim_session_t *, char *name); | |
470 | |
471 u_long aim_chatnav_reqrights(struct aim_session_t *sess, struct aim_conn_t *conn); | |
472 u_long aim_chatnav_clientready(struct aim_session_t *sess, struct aim_conn_t *conn); | |
473 | |
474 u_long aim_chat_invite(struct aim_session_t *sess, struct aim_conn_t *conn, char *sn, char *msg, u_short exchange, char *roomname, u_short instance); | |
475 | |
476 struct aim_chat_exchangeinfo { | |
477 u_short number; | |
478 char *name; | |
479 char *charset1; | |
480 char *lang1; | |
481 char *charset2; | |
482 char *lang2; | |
483 }; | |
484 int aim_chatnav_parse_info(struct aim_session_t *sess, struct command_rx_struct *command); | |
485 u_long aim_chatnav_createroom(struct aim_session_t *sess, struct aim_conn_t *conn, char *name, u_short exchange); | |
486 int aim_chat_leaveroom(struct aim_session_t *sess, char *name); | |
2 | 487 |
488 /* aim_util.c */ | |
237 | 489 #ifdef AIMUTIL_USEMACROS |
490 /* | |
491 * These are really ugly. You'd think this was LISP. I wish it was. | |
492 */ | |
493 #define aimutil_put8(buf, data) ((*(buf) = (u_char)(data)&0xff),1) | |
494 #define aimutil_get8(buf) ((*(buf))&0xff) | |
495 #define aimutil_put16(buf, data) ( \ | |
496 (*(buf) = (u_char)((data)>>8)&0xff), \ | |
497 (*((buf)+1) = (u_char)(data)&0xff), \ | |
498 2) | |
499 #define aimutil_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff)) | |
500 #define aimutil_put32(buf, data) ( \ | |
501 (*((buf)) = (u_char)((data)>>24)&0xff), \ | |
502 (*((buf)+1) = (u_char)((data)>>16)&0xff), \ | |
503 (*((buf)+2) = (u_char)((data)>>8)&0xff), \ | |
504 (*((buf)+3) = (u_char)(data)&0xff), \ | |
505 4) | |
506 #define aimutil_get32(buf) ((((*(buf))<<24)&0xff000000) + \ | |
507 (((*((buf)+1))<<16)&0x00ff0000) + \ | |
508 (((*((buf)+2))<< 8)&0x0000ff00) + \ | |
509 (((*((buf)+3) )&0x000000ff))) | |
510 #else | |
511 #warning Not using aimutil macros. May have performance problems. | |
512 int aimutil_put8(u_char *, u_char); | |
513 u_char aimutil_get8(u_char *buf); | |
2 | 514 int aimutil_put16(u_char *, u_short); |
237 | 515 u_short aimutil_get16(u_char *); |
2 | 516 int aimutil_put32(u_char *, u_long); |
237 | 517 u_long aimutil_get32(u_char *); |
518 #endif | |
2 | 519 |
237 | 520 int aimutil_putstr(u_char *, const u_char *, int); |
521 int aimutil_tokslen(char *toSearch, int index, char dl); | |
522 int aimutil_itemcnt(char *toSearch, char dl); | |
523 char *aimutil_itemidx(char *toSearch, int index, char dl); | |
524 | |
525 int aim_snlen(const char *sn); | |
526 int aim_sncmp(const char *sn1, const char *sn2); | |
2 | 527 |
528 #endif /* __AIM_H__ */ | |
529 |