+struct aim_msgcookie_t {
+ unsigned char cookie[8];
+ int type;
+ void *data;
+ time_t addtime;
+ struct aim_msgcookie_t *next;
+};
+
+struct aim_fileheader_t {
+#if 0
+ char magic[4]; /* 0 */
+ short hdrlen; /* 4 */
+ short hdrtype; /* 6 */
+#endif
+ char bcookie[8]; /* 8 */
+ short encrypt; /* 16 */
+ short compress; /* 18 */
+ short totfiles; /* 20 */
+ short filesleft; /* 22 */
+ short totparts; /* 24 */
+ short partsleft; /* 26 */
+ long totsize; /* 28 */
+ long size; /* 32 */
+ long modtime; /* 36 */
+ long checksum; /* 40 */
+ long rfrcsum; /* 44 */
+ long rfsize; /* 48 */
+ long cretime; /* 52 */
+ long rfcsum; /* 56 */
+ long nrecvd; /* 60 */
+ long recvcsum; /* 64 */
+ char idstring[32]; /* 68 */
+ char flags; /* 100 */
+ char lnameoffset; /* 101 */
+ char lsizeoffset; /* 102 */
+ char dummy[69]; /* 103 */
+ char macfileinfo[16]; /* 172 */
+ short nencode; /* 188 */
+ short nlanguage; /* 190 */
+ char name[64]; /* 192 */
+ /* 256 */
+};
+
+struct aim_filetransfer_priv {
+ char sn[MAXSNLEN];
+ char cookie[8];
+ char ip[30];
+ int state;
+ struct aim_fileheader_t fh;
+};
+
+#define AIM_COOKIETYPE_UNKNOWN 0x00
+#define AIM_COOKIETYPE_ICBM 0x01
+#define AIM_COOKIETYPE_ADS 0x02
+#define AIM_COOKIETYPE_BOS 0x03
+#define AIM_COOKIETYPE_IM 0x04
+#define AIM_COOKIETYPE_CHAT 0x05
+#define AIM_COOKIETYPE_CHATNAV 0x06
+/* we'll move OFT up a bit to give breathing room. not like it really
+ * matters. */
+#define AIM_COOKIETYPE_OFTIM 0x10
+#define AIM_COOKIETYPE_OFTGET 0x11
+#define AIM_COOKIETYPE_OFTSEND 0x12
+#define AIM_COOKIETYPE_OFTVOICE 0x13
+#define AIM_COOKIETYPE_OFTIMAGE 0x14
+#define AIM_COOKIETYPE_OFTICON 0x15
+
+int aim_cachecookie(struct aim_session_t *sess, struct aim_msgcookie_t *cookie);
+int aim_purgecookies(struct aim_session_t *sess, int maxage);
+struct aim_msgcookie_t *aim_uncachecookie(struct aim_session_t *sess, char *cookie, int type);
+struct aim_msgcookie_t *aim_mkcookie(unsigned char *, int, void *);
+struct aim_msgcookie_t *aim_checkcookie(struct aim_session_t *, char *, int);
+int aim_getcookietype(int);
+
+int aim_handlerendconnect(struct aim_session_t *sess, struct aim_conn_t *cur);
+
+#define AIM_TRANSFER_DENY_NOTSUPPORTED 0x0000
+#define AIM_TRANSFER_DENY_DECLINE 0x0001
+#define AIM_TRANSFER_DENY_NOTACCEPTING 0x0002
+u_long aim_denytransfer(struct aim_session_t *sess, struct aim_conn_t *conn, char *sender, char *cookie, unsigned short code);
+u_long aim_accepttransfer(struct aim_session_t *sess, struct aim_conn_t *conn,struct aim_conn_t *oftconn, char *sender, char *cookie, unsigned short rendid);
+