| |
1 /* |
| |
2 * aim_internal.h -- prototypes/structs for the guts of libfaim |
| |
3 * |
| |
4 */ |
| |
5 |
| |
6 #ifdef FAIM_INTERNAL |
| |
7 #ifndef __AIM_INTERNAL_H__ |
| |
8 #define __AIM_INTERNAL_H__ 1 |
| |
9 |
| |
10 typedef struct { |
| |
11 unsigned short family; |
| |
12 unsigned short subtype; |
| |
13 unsigned short flags; |
| |
14 unsigned long id; |
| |
15 } aim_modsnac_t; |
| |
16 |
| |
17 #define AIM_MODULENAME_MAXLEN 16 |
| |
18 #define AIM_MODFLAG_MULTIFAMILY 0x0001 |
| |
19 typedef struct aim_module_s { |
| |
20 unsigned short family; |
| |
21 unsigned short flags; |
| |
22 unsigned short version; |
| |
23 char name[AIM_MODULENAME_MAXLEN+1]; |
| |
24 int (*snachandler)(struct aim_session_t *sess, struct aim_module_s *mod, struct command_rx_struct *rx, aim_modsnac_t *snac, unsigned char *data, int datalen); |
| |
25 void (*shutdown)(struct aim_session_t *sess, struct aim_module_s *mod); |
| |
26 void *priv; |
| |
27 struct aim_module_s *next; |
| |
28 } aim_module_t; |
| |
29 |
| |
30 faim_internal int aim__registermodule(struct aim_session_t *sess, int (*modfirst)(struct aim_session_t *, aim_module_t *)); |
| |
31 faim_internal void aim__shutdownmodules(struct aim_session_t *sess); |
| |
32 |
| |
33 |
| |
34 faim_internal int buddylist_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
35 faim_internal int admin_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
36 faim_internal int bos_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
37 faim_internal int search_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
38 faim_internal int stats_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
39 faim_internal int auth_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
40 faim_internal int msg_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
41 faim_internal int misc_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
42 faim_internal int chatnav_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
43 faim_internal int chat_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
44 faim_internal int locate_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
45 faim_internal int general_modfirst(struct aim_session_t *sess, aim_module_t *mod); |
| |
46 |
| |
47 faim_internal unsigned long aim_genericreq_n(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype); |
| |
48 faim_internal unsigned long aim_genericreq_n_snacid(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype); |
| |
49 faim_internal unsigned long aim_genericreq_l(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype, u_long *); |
| |
50 faim_internal unsigned long aim_genericreq_s(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype, u_short *); |
| |
51 |
| |
52 faim_internal void aim_rxqueue_cleanbyconn(struct aim_session_t *sess, struct aim_conn_t *conn); |
| |
53 faim_internal int aim_recv(int fd, void *buf, size_t count); |
| |
54 |
| |
55 faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct aim_conn_t *conn); |
| |
56 |
| |
57 faim_internal int aim_tx_sendframe(struct aim_session_t *sess, struct command_tx_struct *cur); |
| |
58 faim_internal unsigned int aim_get_next_txseqnum(struct aim_conn_t *); |
| |
59 faim_internal struct command_tx_struct *aim_tx_new(struct aim_session_t *sess, struct aim_conn_t *conn, unsigned char framing, int chan, int datalen); |
| |
60 faim_internal int aim_tx_enqueue(struct aim_session_t *, struct command_tx_struct *); |
| |
61 faim_internal int aim_tx_printqueue(struct aim_session_t *); |
| |
62 faim_internal int aim_tx_cleanqueue(struct aim_session_t *, struct aim_conn_t *); |
| |
63 |
| |
64 faim_internal aim_rxcallback_t aim_callhandler(struct aim_session_t *sess, struct aim_conn_t *conn, u_short family, u_short type); |
| |
65 faim_internal int aim_callhandler_noparam(struct aim_session_t *sess, struct aim_conn_t *conn, u_short family, u_short type, struct command_rx_struct *ptr); |
| |
66 |
| |
67 /* |
| |
68 * Generic SNAC structure. Rarely if ever used. |
| |
69 */ |
| |
70 struct aim_snac_t { |
| |
71 u_long id; |
| |
72 u_short family; |
| |
73 u_short type; |
| |
74 u_short flags; |
| |
75 void *data; |
| |
76 time_t issuetime; |
| |
77 struct aim_snac_t *next; |
| |
78 }; |
| |
79 faim_internal void aim_initsnachash(struct aim_session_t *sess); |
| |
80 faim_internal unsigned long aim_newsnac(struct aim_session_t *, struct aim_snac_t *newsnac); |
| |
81 faim_internal unsigned long aim_cachesnac(struct aim_session_t *sess, const unsigned short family, const unsigned short type, const unsigned short flags, const void *data, const int datalen); |
| |
82 faim_internal struct aim_snac_t *aim_remsnac(struct aim_session_t *, u_long id); |
| |
83 faim_internal int aim_cleansnacs(struct aim_session_t *, int maxage); |
| |
84 faim_internal int aim_putsnac(u_char *, int, int, int, u_long); |
| |
85 |
| |
86 faim_internal struct aim_conn_t *aim_cloneconn(struct aim_session_t *sess, struct aim_conn_t *src); |
| |
87 |
| |
88 faim_internal int aim_oft_buildheader(unsigned char *,struct aim_fileheader_t *); |
| |
89 faim_internal int aim_listenestablish(u_short); |
| |
90 faim_internal int aim_tx_destroy(struct command_tx_struct *); |
| |
91 |
| |
92 faim_internal int aim_parse_unknown(struct aim_session_t *, struct command_rx_struct *, ...); |
| |
93 |
| |
94 /* these are used by aim_*_clientready */ |
| |
95 #define AIM_TOOL_JAVA 0x0001 |
| |
96 #define AIM_TOOL_MAC 0x0002 |
| |
97 #define AIM_TOOL_WIN16 0x0003 |
| |
98 #define AIM_TOOL_WIN32 0x0004 |
| |
99 #define AIM_TOOL_MAC68K 0x0005 |
| |
100 #define AIM_TOOL_MACPPC 0x0006 |
| |
101 #define AIM_TOOL_NEWWIN 0x0010 |
| |
102 struct aim_tool_version { |
| |
103 unsigned short group; |
| |
104 unsigned short version; |
| |
105 unsigned short tool; |
| |
106 unsigned short toolversion; |
| |
107 }; |
| |
108 |
| |
109 faim_internal int aim_negchan_middle(struct aim_session_t *sess, struct command_rx_struct *command); |
| |
110 |
| |
111 faim_internal unsigned short aim_getcap(struct aim_session_t *sess, unsigned char *capblock, int buflen); |
| |
112 faim_internal int aim_putcap(unsigned char *capblock, int buflen, unsigned short caps); |
| |
113 |
| |
114 faim_internal int aim_cachecookie(struct aim_session_t *sess, struct aim_msgcookie_t *cookie); |
| |
115 faim_internal struct aim_msgcookie_t *aim_uncachecookie(struct aim_session_t *sess, unsigned char *cookie, int type); |
| |
116 faim_internal struct aim_msgcookie_t *aim_mkcookie(unsigned char *, int, void *); |
| |
117 faim_internal struct aim_msgcookie_t *aim_checkcookie(struct aim_session_t *, const unsigned char *, const int); |
| |
118 faim_internal int aim_freecookie(struct aim_session_t *sess, struct aim_msgcookie_t *cookie); |
| |
119 faim_internal int aim_msgcookie_gettype(int reqclass); |
| |
120 faim_internal int aim_cookie_free(struct aim_session_t *sess, struct aim_msgcookie_t *cookie); |
| |
121 |
| |
122 faim_internal int aim_extractuserinfo(struct aim_session_t *sess, unsigned char *, struct aim_userinfo_s *); |
| |
123 faim_internal int aim_putuserinfo(u_char *buf, int buflen, struct aim_userinfo_s *info); |
| |
124 |
| |
125 faim_internal int aim_chat_readroominfo(u_char *buf, struct aim_chat_roominfo *outinfo); |
| |
126 |
| |
127 faim_internal void faimdprintf(struct aim_session_t *sess, int dlevel, const char *format, ...); |
| |
128 |
| |
129 #ifndef FAIM_INTERNAL_INSANE |
| |
130 /* why the hell wont cpp let you use #error inside #define's? */ |
| |
131 /* isn't it single-pass? so the #error would get passed to the compiler --jbm */ |
| |
132 #define printf() printf called inside libfaim |
| |
133 #define sprintf() unbounded sprintf used inside libfaim |
| |
134 #endif |
| |
135 |
| |
136 #endif /* __AIM_INTERNAL_H__ */ |
| |
137 #endif /* FAIM_INTERNAL */ |