]> andersk Git - libfaim.git/blame - aim.h
Removed my passwords.
[libfaim.git] / aim.h
CommitLineData
9de3ca7e 1#ifndef __AIM_H__
2#define __AIM_H__
3
4#include <faimconfig.h>
5
6#include <stdio.h>
7#include <string.h>
8#include <fcntl.h>
9#include <sys/types.h>
10#include <stdlib.h>
11#include <stdarg.h>
12#include <errno.h>
13
14#ifdef _WIN32
15#include <windows.h>
16#include <time.h>
17#include <io.h>
18#else
19#include <netdb.h>
20#include <sys/socket.h>
21#include <netinet/in.h>
22#include <sys/time.h>
23#include <unistd.h>
24#endif
25
26/* Portability stuff (DMP) */
27
28#ifdef _WIN32
29#define sleep Sleep
30#define strlen(x) (int)strlen(x) /* win32 has a unsigned size_t */
31#endif
32
33#if defined(_WIN32) || (defined(mach) && defined(__APPLE__))
34#define gethostbyname2(x,y) gethostbyname(x) /* revert to IPv4 */
35#endif
36
37/*
38 * Login Error codes
39 */
40#define AIM_CONNECT_ERROR -0x1
41#define AIM_SIGNON_TOO_SOON -0x4
42#define AIM_SERVICE_FULL -0x6f
43
44/* Current Maximum Length for Screen Names (not including NULL) */
45#define MAXSNLEN 16
46
47struct login_phase1_struct {
48 char *screen_name;
49 char *BOSIP;
50 char *cookie;
51 char *email;
52 u_short regstatus;
53};
54
55extern struct login_phase1_struct aim_logininfo;
56
57struct client_info_s {
58 char clientstring[100]; /* arbitrary number */
59 int major;
60 int minor;
61 int build;
62 char country[3];
63 char lang[3];
64};
65
66struct connection_info_struct {
67 u_int local_seq_num_origin; /* our first seq num */
68 int local_command_count;
69
70 u_int remote_seq_num_origin; /* oscar's first seqnum */
71 int remote_command_count; /* command_count + seq_num_origin = cur_seq_num */
72
73 char *sn; /* our screen name */
74
75 int fd; /* socket descriptor */
76};
77
78#ifndef TRUE
79#define TRUE 1
80#define FALSE 0
81#endif
82
83#define AIM_CONN_MAX 5
84/* these could be arbitrary, but its easier to use the actual AIM values */
85#define AIM_CONN_TYPE_AUTH 0x0007
86#define AIM_CONN_TYPE_ADS 0x0005
87#define AIM_CONN_TYPE_BOS 2
88#define AIM_CONN_TYPE_CHAT 0x000e
89#define AIM_CONN_TYPE_CHATNAV 0x000d
90
91#define AIM_CONN_STATUS_READY 0x0001
92#define AIM_CONN_STATUS_INTERNALERR 0x0002
93#define AIM_CONN_STATUS_RESOLVERR 0x80
94#define AIM_CONN_STATUS_CONNERR 0x40
95
96
97struct aim_conn_t {
98 int fd;
99 int type;
100 int seqnum;
101 int status;
102 time_t lastactivity; /* time of last transmit */
103 int forcedlatency;
104 struct aim_rxcblist_t *handlerlist;
105};
106struct aim_conn_t aim_conns[AIM_CONN_MAX];
107
108
109/* struct for incoming commands */
110struct command_rx_struct {
111 /* byte 1 assumed to always be 0x2a */
112 char type; /* type code (byte 2) */
113 u_int seqnum; /* sequence number (bytes 3 and 4) */
114 u_int commandlen; /* total packet len - 6 (bytes 5 and 6) */
115 u_char *data; /* packet data (from 7 byte on) */
116 u_int lock; /* 0 = open, !0 = locked */
117 u_int handled; /* 0 = new, !0 = been handled */
118 struct aim_conn_t *conn; /* the connection it came in on... */
119 struct command_rx_struct *next; /* ptr to next struct in list */
120};
121
122/* struct for outgoing commands */
123struct command_tx_struct {
124 /* byte 1 assumed to be 0x2a */
125 char type; /* type/family code */
126 u_int seqnum; /* seqnum dynamically assigned on tx */
127 u_int commandlen; /* SNAC length */
128 u_char *data; /* packet data */
129 u_int lock; /* 0 = open, !0 = locked */
130 u_int sent; /* 0 = pending, !0 = has been sent */
131 struct aim_conn_t *conn;
132 struct command_tx_struct *next; /* ptr to next struct in list */
133};
134
135/*
136 * AIM User Info, Standard Form.
137 */
138struct aim_userinfo_s {
139 char sn[MAXSNLEN+1];
140 u_short warnlevel;
141 u_short idletime;
142 u_short class;
143 u_long membersince;
144 u_long onlinesince;
145 u_long sessionlen;
146};
147
148/* TLV-related tidbits */
149struct aim_tlv_t {
150 u_short type;
151 u_short length;
152 u_char *value;
153};
154
155struct aim_tlv_t *aim_grabtlv(u_char *src);
156struct aim_tlv_t *aim_grabtlvstr(u_char *src);
157int aim_puttlv (u_char *dest, struct aim_tlv_t *newtlv);
158struct aim_tlv_t *aim_createtlv(void);
159int aim_freetlv(struct aim_tlv_t **oldtlv);
160int aim_puttlv_16(u_char *, u_short, u_short);
161
162/* some prototypes... */
163
164/* implicitly or explicitly called */
165int aim_get_command(void);
166int aim_rxdispatch(void);
167int aim_logoff(void);
168
169typedef int (*rxcallback_t)(struct command_rx_struct *, ...);
170int aim_register_callbacks(rxcallback_t *);
171
172u_long aim_genericreq_n(struct aim_conn_t *conn, u_short family, u_short subtype);
173u_long aim_genericreq_l(struct aim_conn_t *conn, u_short family, u_short subtype, u_long *);
174u_long aim_genericreq_s(struct aim_conn_t *conn, u_short family, u_short subtype, u_short *);
175
176/* aim_login.c */
177int aim_send_login (struct aim_conn_t *, char *, char *, struct client_info_s *);
178int aim_encode_password(const char *, char *);
179
180
181struct command_rx_struct *aim_purge_rxqueue(struct command_rx_struct *queue);
182
183
184int aim_parse_unknown(struct command_rx_struct *command, ...);
185int aim_parse_missed_im(struct command_rx_struct *, ...);
186int aim_parse_last_bad(struct command_rx_struct *, ...);
187
188int aim_tx_enqueue(struct command_tx_struct *);
189u_int aim_get_next_txseqnum(struct aim_conn_t *);
190int aim_tx_flushqueue(void);
191int aim_tx_printqueue(void);
192int aim_tx_purgequeue(void);
193
194/* queue (linked list) pointers */
195extern struct command_tx_struct *aim_queue_outgoing; /* incoming commands */
196extern struct command_rx_struct *aim_queue_incoming; /* outgoing commands */
197
198/* The default callback handler array */
199extern rxcallback_t aim_callbacks[];
200
201struct aim_rxcblist_t {
202 u_short family;
203 u_short type;
204 rxcallback_t handler;
205 u_short flags;
206 struct aim_rxcblist_t *next;
207};
208
209int aim_conn_setlatency(struct aim_conn_t *conn, int newval);
210
211int aim_conn_addhandler(struct aim_conn_t *conn, u_short family, u_short type, rxcallback_t newhandler, u_short flags);
212rxcallback_t aim_callhandler(struct aim_conn_t *conn, u_short family, u_short type);
213int aim_clearhandlers(struct aim_conn_t *conn);
214
215extern struct aim_snac_t *aim_outstanding_snacs;
216extern u_long aim_snac_nextid;
217
218#define AIM_CB_FAM_ACK 0x0000
219#define AIM_CB_FAM_GEN 0x0001
220#define AIM_CB_FAM_LOC 0x0002
221#define AIM_CB_FAM_BUD 0x0003
222#define AIM_CB_FAM_MSG 0x0004
223#define AIM_CB_FAM_ADS 0x0005
224#define AIM_CB_FAM_INV 0x0006
225#define AIM_CB_FAM_ADM 0x0007
226#define AIM_CB_FAM_POP 0x0008
227#define AIM_CB_FAM_BOS 0x0009
228#define AIM_CB_FAM_LOK 0x000a
229#define AIM_CB_FAM_STS 0x000b
230#define AIM_CB_FAM_TRN 0x000c
231#define AIM_CB_FAM_CTN 0x000d /* ChatNav */
232#define AIM_CB_FAM_CHT 0x000e /* Chat */
233#define AIM_CB_FAM_SPECIAL 0xffff /* Internal libfaim use */
234
235#define AIM_CB_ACK_ACK 0x0001
236
237#define AIM_CB_GEN_ERROR 0x0001
238#define AIM_CB_GEN_CLIENTREADY 0x0002
239#define AIM_CB_GEN_SERVERREADY 0x0003
240#define AIM_CB_GEN_SERVICEREQ 0x0004
241#define AIM_CB_GEN_REDIRECT 0x0005
242#define AIM_CB_GEN_RATEINFOREQ 0x0006
243#define AIM_CB_GEN_RATEINFO 0x0007
244#define AIM_CB_GEN_RATEINFOACK 0x0008
245#define AIM_CB_GEN_RATECHANGE 0x000a
246#define AIM_CB_GEN_SERVERPAUSE 0x000b
247#define AIM_CB_GEN_SERVERRESUME 0x000d
248#define AIM_CB_GEN_REQSELFINFO 0x000e
249#define AIM_CB_GEN_SELFINFO 0x000f
250#define AIM_CB_GEN_EVIL 0x0010
251#define AIM_CB_GEN_SETIDLE 0x0011
252#define AIM_CB_GEN_MIGRATIONREQ 0x0012
253#define AIM_CB_GEN_MOTD 0x0013
254#define AIM_CB_GEN_SETPRIVFLAGS 0x0014
255#define AIM_CB_GEN_WELLKNOWNURL 0x0015
256#define AIM_CB_GEN_NOP 0x0016
257#define AIM_CB_GEN_DEFAULT 0xffff
258
259#define AIM_CB_LOC_ERROR 0x0001
260#define AIM_CB_LOC_REQRIGHTS 0x0002
261#define AIM_CB_LOC_RIGHTSINFO 0x0003
262#define AIM_CB_LOC_SETUSERINFO 0x0004
263#define AIM_CB_LOC_REQUSERINFO 0x0005
264#define AIM_CB_LOC_USERINFO 0x0006
265#define AIM_CB_LOC_WATCHERSUBREQ 0x0007
266#define AIM_CB_LOC_WATCHERNOT 0x0008
267#define AIM_CB_LOC_DEFAULT 0xffff
268
269#define AIM_CB_BUD_ERROR 0x0001
270#define AIM_CB_BUD_REQRIGHTS 0x0002
271#define AIM_CB_BUD_RIGHTSINFO 0x0003
272#define AIM_CB_BUD_ADDBUDDY 0x0004
273#define AIM_CB_BUD_REMBUDDY 0x0005
274#define AIM_CB_BUD_REJECT 0x000a
275#define AIM_CB_BUD_ONCOMING 0x000b
276#define AIM_CB_BUD_OFFGOING 0x000c
277#define AIM_CB_BUD_DEFAULT 0xffff
278
279#define AIM_CB_MSG_ERROR 0x0001
280#define AIM_CB_MSG_PARAMINFO 0x0005
281#define AIM_CB_MSG_INCOMING 0x0007
282#define AIM_CB_MSG_EVIL 0x0009
283#define AIM_CB_MSG_MISSEDCALL 0x000a
284#define AIM_CB_MSG_CLIENTERROR 0x000b
285#define AIM_CB_MSG_ACK 0x000c
286#define AIM_CB_MSG_DEFAULT 0xffff
287
288#define AIM_CB_ADS_ERROR 0x0001
289#define AIM_CB_ADS_DEFAULT 0xffff
290
291#define AIM_CB_INV_ERROR 0x0001
292#define AIM_CB_INV_DEFAULT 0xffff
293
294#define AIM_CB_ADM_ERROR 0x0001
295#define AIM_CB_ADM_INFOCHANGE_REPLY 0x0005
296#define AIM_CB_ADM_DEFAULT 0xffff
297
298#define AIM_CB_POP_ERROR 0x0001
299#define AIM_CB_POP_DEFAULT 0xffff
300
301#define AIM_CB_BOS_ERROR 0x0001
302#define AIM_CB_BOS_DEFAULT 0xffff
303
304#define AIM_CB_LOK_ERROR 0x0001
305#define AIM_CB_LOK_DEFAULT 0xffff
306
307#define AIM_CB_STS_ERROR 0x0001
308#define AIM_CB_STS_SETREPORTINTERVAL 0x0002
309#define AIM_CB_STS_REPORTACK 0x0004
310#define AIM_CB_STS_DEFAULT 0xffff
311
312#define AIM_CB_TRN_ERROR 0x0001
313#define AIM_CB_TRN_DEFAULT 0xffff
314
315#define AIM_CB_CTN_ERROR 0x0001
316#define AIM_CB_CTN_DEFAULT 0xffff
317
318#define AIM_CB_CHT_ERROR 0x0001
319#define AIM_CB_CHT_DEFAULT 0xffff
320
321#define AIM_CB_SPECIAL_AUTHSUCCESS 0x0001
322#define AIM_CB_SPECIAL_AUTHOTHER 0x0002
323#define AIM_CB_SPECIAL_UNKNOWN 0xffff
324#define AIM_CB_SPECIAL_DEFAULT AIM_CB_SPECIAL_UNKNOWN
325
326#if 0
327#define AIM_CB_INCOMING_IM 0
328#define AIM_CB_ONCOMING_BUDDY 1
329#define AIM_CB_OFFGOING_BUDDY 2
330#define AIM_CB_MISSED_IM 3
331#define AIM_CB_MISSED_CALL 4
332#define AIM_CB_LOGIN_P4_C1 5
333#define AIM_CB_LOGIN_P4_C2 6
334#define AIM_CB_LOGIN_P2_1 7
335#define AIM_CB_LOGIN_P2_2 8
336#define AIM_CB_LOGIN_P3_B 9
337#define AIM_CB_LOGIN_P3D_A 10
338#define AIM_CB_LOGIN_P3D_B 11
339#define AIM_CB_LOGIN_P3D_C 12
340#define AIM_CB_LOGIN_P3D_D 13
341#define AIM_CB_LOGIN_P3D_E 14
342#define AIM_CB_LOGIN_P3D_F 15
343#define AIM_CB_RATECHANGE 16
344#define AIM_CB_USERERROR 17
345#define AIM_CB_UNKNOWN 18
346#define AIM_CB_USERINFO 19
347#define AIM_CB_SEARCH_ADDRESS 20
348#define AIM_CB_SEARCH_NAME 21
349#define AIM_CB_SEARCH_FAIL 22
350
351#define AIM_CB_AUTH_ERROR 23
352#define AIM_CB_AUTH_SUCCESS 24
353#define AIM_CB_AUTH_SVRREADY 25
354
355#define AIM_CB_AUTH_OTHER 26
356#define AIM_CB_AUTH_INFOCHNG_REPLY 27
357#define AIM_CB_CHATNAV_SVRREADY 28
358#endif
359
360int Read(int, u_char *, int);
361
362struct aim_snac_t {
363 u_long id;
364 u_short family;
365 u_short type;
366 u_short flags;
367 void *data;
368 time_t issuetime;
369 struct aim_snac_t *next;
370};
371u_long aim_newsnac(struct aim_snac_t *newsnac);
372struct aim_snac_t *aim_remsnac(u_long id);
373int aim_cleansnacs(int maxage);
374int aim_putsnac(u_char *, int, int, int, u_long);
375
376void aim_connrst(void);
377struct aim_conn_t *aim_conn_getnext(void);
378void aim_conn_close(struct aim_conn_t *deadconn);
379struct aim_conn_t *aim_getconn_type(int type);
380struct aim_conn_t *aim_newconn(int type, char *dest);
381int aim_conngetmaxfd(void);
382struct aim_conn_t *aim_select(struct timeval *);
383int aim_conn_isready(struct aim_conn_t *);
384int aim_conn_setstatus(struct aim_conn_t *, int);
385
386/* aim_misc.c */
387
388#define AIM_VISIBILITYCHANGE_PERMITADD 0x05
389#define AIM_VISIBILITYCHANGE_PERMITREMOVE 0x06
390#define AIM_VISIBILITYCHANGE_DENYADD 0x07
391#define AIM_VISIBILITYCHANGE_DENYREMOVE 0x08
392
393u_long aim_bos_setidle(struct aim_conn_t *, u_long);
394u_long aim_bos_changevisibility(struct aim_conn_t *, int, char *);
395u_long aim_bos_setbuddylist(struct aim_conn_t *, char *);
396u_long aim_bos_setprofile(struct aim_conn_t *, char *);
397u_long aim_bos_setgroupperm(struct aim_conn_t *, u_long);
398u_long aim_bos_clientready(struct aim_conn_t *);
399u_long aim_bos_reqrate(struct aim_conn_t *);
400u_long aim_bos_ackrateresp(struct aim_conn_t *);
401u_long aim_bos_setprivacyflags(struct aim_conn_t *, u_long);
402u_long aim_bos_reqpersonalinfo(struct aim_conn_t *);
403u_long aim_bos_reqservice(struct aim_conn_t *, u_short);
404u_long aim_bos_reqrights(struct aim_conn_t *);
405u_long aim_bos_reqbuddyrights(struct aim_conn_t *);
406u_long aim_bos_reqlocaterights(struct aim_conn_t *);
407u_long aim_bos_reqicbmparaminfo(struct aim_conn_t *);
408
409/* aim_rxhandlers.c */
410int aim_register_callbacks(rxcallback_t *);
411int aim_rxdispatch(void);
412int aim_authparse(struct command_rx_struct *);
413int aim_handleredirect_middle(struct command_rx_struct *, ...);
414int aim_parse_unknown(struct command_rx_struct *, ...);
415int aim_parse_missed_im(struct command_rx_struct *, ...);
416int aim_parse_last_bad(struct command_rx_struct *, ...);
417int aim_parse_generalerrs(struct command_rx_struct *command, ...);
418
419/* aim_im.c */
420#define AIM_IMFLAGS_AWAY 0x01 /* mark as an autoreply */
421#define AIM_IMFLAGS_ACK 0x02 /* request a receipt notice */
422u_long aim_send_im(struct aim_conn_t *, char *, int, char *);
423int aim_parse_incoming_im_middle(struct command_rx_struct *);
424
425/* aim_info.c */
426u_long aim_getinfo(struct aim_conn_t *, const char *);
427int aim_extractuserinfo(u_char *, struct aim_userinfo_s *);
428int aim_parse_userinfo_middle(struct command_rx_struct *);
429int aim_parse_oncoming_middle(struct command_rx_struct *);
430
431/* aim_auth.c */
432int aim_auth_sendcookie(struct aim_conn_t *, char *);
433u_long aim_auth_clientready(struct aim_conn_t *);
434u_long aim_auth_changepasswd(struct aim_conn_t *, char *, char *);
435
436/* aim_buddylist.c */
437u_long aim_add_buddy(struct aim_conn_t *, char *);
438u_long aim_remove_buddy(struct aim_conn_t *, char *);
439
440/* aim_search.c */
441u_long aim_usersearch_address(struct aim_conn_t *, char *);
442/* u_long aim_usersearch_name(struct aim_conn_t *, char *); */
443
444/* aim_util.c */
445int aimutil_put8(u_char *, u_char);
446int aimutil_put16(u_char *, u_short);
447u_short aimutil_get16(u_char *);
448int aimutil_put32(u_char *, u_long);
449u_long aimutil_get32(u_char *);
450int aimutil_putstr(u_char *, const u_char *, int);
451int aimutil_tokslen(char *toSearch, int index, char dl);
452int aimutil_itemcnt(char *toSearch, char dl);
453char *aimutil_itemidx(char *toSearch, int index, char dl);
454
455
456#endif /* __AIM_H__ */
457
This page took 0.118457 seconds and 5 git commands to generate.