#define AIM_MD5_STRING "AOL Instant Messenger (SM)"
-/*
- * Login info. Passes information from the Authorization
- * stage of login to the service (BOS, etc) connection
- * phase.
- *
- */
-struct aim_login_struct {
- char screen_name[MAXSNLEN+1];
- char *BOSIP;
- unsigned char cookie[AIM_COOKIELEN];
- char *email;
- u_short regstatus;
- char *errorurl;
- u_short errorcode;
-};
-
/*
* Client info. Filled in by the client and passed
* in to aim_login(). The information ends up
/* ---- Client Accessible ------------------------ */
/*
- * Login information. See definition above.
+ * Our screen name.
*
*/
- struct aim_login_struct logininfo;
+ char sn[MAXSNLEN+1];
/*
* Pointer to anything the client wants to
* explicitly associate with this session.
+ *
+ * This is for use in the callbacks mainly. In any
+ * callback, you can access this with sess->aux_data.
+ *
*/
void *aux_data;
/*
* OFT Data
*/
-
struct aim_oft_session_t oft;
/* ---- Internal Use Only ------------------------ */
faim_internal struct aim_tlv_t *aim_grabtlvstr(u_char *src);
faim_internal struct aim_tlv_t *aim_gettlv(struct aim_tlvlist_t *, u_short, int);
faim_internal char *aim_gettlv_str(struct aim_tlvlist_t *, u_short, int);
+faim_internal unsigned char aim_gettlv8(struct aim_tlvlist_t *list, unsigned short type, int num);
+faim_internal unsigned short aim_gettlv16(struct aim_tlvlist_t *list, unsigned short type, int num);
+faim_internal unsigned long aim_gettlv32(struct aim_tlvlist_t *list, unsigned short type, int num);
faim_internal int aim_puttlv (u_char *dest, struct aim_tlv_t *newtlv);
faim_internal struct aim_tlv_t *aim_createtlv(void);
faim_internal int aim_freetlv(struct aim_tlv_t **oldtlv);
+faim_export int aim_puttlv_8(unsigned char *buf, unsigned short t, unsigned char v);
faim_internal int aim_puttlv_16(u_char *, u_short, u_short);
faim_internal int aim_puttlv_32(u_char *, u_short, u_long);
faim_internal int aim_puttlv_str(u_char *buf, u_short t, int l, char *v);
faim_internal int aim_addtlvtochain32(struct aim_tlvlist_t **list, unsigned short type, unsigned long val);
faim_internal int aim_addtlvtochain_str(struct aim_tlvlist_t **list, unsigned short type, char *str, int len);
faim_internal int aim_addtlvtochain_caps(struct aim_tlvlist_t **list, unsigned short type, unsigned short caps);
+faim_internal int aim_addtlvtochain_noval(struct aim_tlvlist_t **list, unsigned short type);
faim_internal int aim_counttlvchain(struct aim_tlvlist_t **list);
/*
faim_internal struct aim_fileheader_t *aim_oft_getfh(unsigned char *hdr);
faim_export int aim_oft_registerlisting(struct aim_session_t *sess, FILE *file, char* listingdir);
faim_export int aim_getfile_send(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh);
+faim_export int aim_getfile_send_chunk(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh, int pos, int bufsize);
/* aim_login.c */
faim_export int aim_sendconnack(struct aim_session_t *sess, struct aim_conn_t *conn);
faim_export int aim_request_login (struct aim_session_t *sess, struct aim_conn_t *conn, char *sn);
faim_export int aim_send_login (struct aim_session_t *, struct aim_conn_t *, char *, char *, struct client_info_s *, char *key);
-faim_export unsigned long aim_sendauthresp(struct aim_session_t *sess, struct aim_conn_t *conn, char *sn, char *bosip, char *cookie, char *email, int regstatus);
+faim_export unsigned long aim_sendauthresp(struct aim_session_t *sess, struct aim_conn_t *conn, char *sn, int errorcode, char *errorurl, char *bosip, char *cookie, char *email, int regstatus);
faim_export int aim_gencookie(unsigned char *buf);
faim_export int aim_sendserverready(struct aim_session_t *sess, struct aim_conn_t *conn);
faim_internal int aim_authkeyparse(struct aim_session_t *sess, struct command_rx_struct *command);
faim_export int aim_tx_flushqueue(struct aim_session_t *);
faim_internal int aim_tx_printqueue(struct aim_session_t *);
faim_export void aim_tx_purgequeue(struct aim_session_t *);
+faim_internal int aim_parse_hostonline(struct aim_session_t *sess, struct command_rx_struct *command, ...);
+faim_internal int aim_parse_hostversions(struct aim_session_t *sess, struct command_rx_struct *command, ...);
+
struct aim_rxcblist_t {
u_short family;
};
faim_internal void aim_initsnachash(struct aim_session_t *sess);
faim_internal unsigned long aim_newsnac(struct aim_session_t *, struct aim_snac_t *newsnac);
+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);
faim_internal struct aim_snac_t *aim_remsnac(struct aim_session_t *, u_long id);
faim_internal int aim_cleansnacs(struct aim_session_t *, int maxage);
faim_internal int aim_putsnac(u_char *, int, int, int, u_long);
int aim_parse_last_bad(struct aim_session_t *, struct command_rx_struct *, ...);
faim_internal int aim_parse_generalerrs(struct aim_session_t *, struct command_rx_struct *command, ...);
faim_internal int aim_parsemotd_middle(struct aim_session_t *sess, struct command_rx_struct *command, ...);
+
+#define AIM_RATE_CODE_CHANGE 0x0001
+#define AIM_RATE_CODE_WARNING 0x0002
+#define AIM_RATE_CODE_LIMIT 0x0003
+#define AIM_RATE_CODE_CLEARLIMIT 0x0004
faim_internal int aim_parse_ratechange_middle(struct aim_session_t *sess, struct command_rx_struct *command);
+
faim_internal int aim_parse_evilnotify_middle(struct aim_session_t *sess, struct command_rx_struct *command);
faim_internal int aim_parse_msgack_middle(struct aim_session_t *sess, struct command_rx_struct *command);
#define AIM_CAPS_CHAT 0x08
#define AIM_CAPS_GETFILE 0x10
#define AIM_CAPS_SENDFILE 0x20
+#define AIM_CAPS_GAMES 0x40
+#define AIM_CAPS_SAVESTOCKS 0x80
-extern u_char aim_caps[6][16];
+extern u_char aim_caps[8][16];
faim_internal unsigned short aim_getcap(unsigned char *capblock, int buflen);
faim_internal int aim_putcap(unsigned char *capblock, int buflen, u_short caps);