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