char cookie[AIM_COOKIELEN];
char *email;
u_short regstatus;
+ char *errorurl;
+ u_short errorcode;
};
/*
struct command_tx_struct *queue_outgoing;
struct command_rx_struct *queue_incoming;
+ /*
+ * This is a dreadful solution to the what-room-are-we-joining
+ * problem. (There's no connection between the service
+ * request and the resulting redirect.)
+ */
+ char *pendingjoin;
+
/*
* Outstanding snac handling
*
u_long sessionlen;
};
+#define AIM_CLASS_TRIAL 0x0001
+#define AIM_CLASS_UNKNOWN2 0x0002
+#define AIM_CLASS_AOL 0x0004
+#define AIM_CLASS_UNKNOWN4 0x0008
+#define AIM_CLASS_FREE 0x0010
+#define AIM_CLASS_AWAY 0x0020
+#define AIM_CLASS_UNKNOWN40 0x0040
+#define AIM_CLASS_UNKNOWN80 0x0080
+
/*
* TLV handling
*/
struct aim_tlv_t *aim_createtlv(void);
int aim_freetlv(struct aim_tlv_t **oldtlv);
int aim_puttlv_16(u_char *, u_short, u_short);
-
+int aim_puttlv_32(u_char *, u_short, u_long);
+int aim_puttlv_str(u_char *buf, u_short t, u_short l, u_char *v);
+int aim_writetlvchain(u_char *buf, int buflen, struct aim_tlvlist_t **list);
+int aim_addtlvtochain16(struct aim_tlvlist_t **list, unsigned short type, unsigned short val);
+int aim_addtlvtochain32(struct aim_tlvlist_t **list, unsigned short type, unsigned long val);
+int aim_addtlvtochain_str(struct aim_tlvlist_t **list, unsigned short type, char *str);
/*
* Get command from connections / Dispatch commands
u_long aim_genericreq_s(struct aim_session_t *, struct aim_conn_t *conn, u_short family, u_short subtype, u_short *);
/* aim_login.c */
+int aim_sendconnack(struct aim_session_t *sess, struct aim_conn_t *conn);
+int aim_request_login (struct aim_session_t *sess, struct aim_conn_t *conn, char *sn);
int aim_send_login (struct aim_session_t *, struct aim_conn_t *, char *, char *, struct client_info_s *);
int aim_encode_password(const char *, u_char *);
u_long aim_bos_setidle(struct aim_session_t *, struct aim_conn_t *, u_long);
u_long aim_bos_changevisibility(struct aim_session_t *, struct aim_conn_t *, int, char *);
u_long aim_bos_setbuddylist(struct aim_session_t *, struct aim_conn_t *, char *);
-u_long aim_bos_setprofile(struct aim_session_t *, struct aim_conn_t *, char *);
+u_long aim_bos_setprofile(struct aim_session_t *, struct aim_conn_t *, char *, char *);
u_long aim_bos_setgroupperm(struct aim_session_t *, struct aim_conn_t *, u_long);
u_long aim_bos_clientready(struct aim_session_t *, struct aim_conn_t *);
u_long aim_bos_reqrate(struct aim_session_t *, struct aim_conn_t *);
u_long aim_bos_reqbuddyrights(struct aim_session_t *, struct aim_conn_t *);
u_long aim_bos_reqlocaterights(struct aim_session_t *, struct aim_conn_t *);
u_long aim_bos_reqicbmparaminfo(struct aim_session_t *, struct aim_conn_t *);
+u_long aim_setversions(struct aim_session_t *sess, struct aim_conn_t *conn);
/* aim_rxhandlers.c */
int aim_rxdispatch(struct aim_session_t *);
int aim_parse_unknown(struct aim_session_t *, struct command_rx_struct *, ...);
int aim_parse_last_bad(struct aim_session_t *, struct command_rx_struct *, ...);
int aim_parse_generalerrs(struct aim_session_t *, struct command_rx_struct *command, ...);
+int aim_parsemotd_middle(struct aim_session_t *sess, struct command_rx_struct *command, ...);
/* aim_im.c */
#define AIM_IMFLAGS_AWAY 0x01 /* mark as an autoreply */
u_long aim_usersearch_address(struct aim_session_t *, struct aim_conn_t *, char *);
/* u_long aim_usersearch_name(struct aim_session_t *, struct aim_conn_t *, char *); */
+
+struct aim_chat_roominfo {
+ u_short exchange;
+ char *name;
+ u_short instance;
+};
+int aim_chat_readroominfo(u_char *buf, struct aim_chat_roominfo *outinfo);
+int aim_chat_parse_infoupdate(struct aim_session_t *sess, struct command_rx_struct *command);
+int aim_chat_parse_joined(struct aim_session_t *sess, struct command_rx_struct *command);
+int aim_chat_parse_leave(struct aim_session_t *sess, struct command_rx_struct *command);
+int aim_chat_parse_incoming(struct aim_session_t *sess, struct command_rx_struct *command);
+u_long aim_chat_send_im(struct aim_session_t *sess, struct aim_conn_t *conn, char *msg);
+u_long aim_chat_join(struct aim_session_t *sess, struct aim_conn_t *conn, u_short exchange, const char *roomname);
+u_long aim_chat_clientready(struct aim_session_t *sess, struct aim_conn_t *conn);
+int aim_chat_attachname(struct aim_conn_t *conn, char *roomname);
+char *aim_chat_getname(struct aim_conn_t *conn);
+struct aim_conn_t *aim_chat_getconn(struct aim_session_t *, char *name);
+
+u_long aim_chatnav_reqrights(struct aim_session_t *sess, struct aim_conn_t *conn);
+u_long aim_chatnav_clientready(struct aim_session_t *sess, struct aim_conn_t *conn);
+
+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);
+
+struct aim_chat_exchangeinfo {
+ u_short number;
+ char *name;
+ char *charset1;
+ char *lang1;
+ char *charset2;
+ char *lang2;
+};
+int aim_chatnav_parse_info(struct aim_session_t *sess, struct command_rx_struct *command);
+u_long aim_chatnav_createroom(struct aim_session_t *sess, struct aim_conn_t *conn, char *name, u_short exchange);
+int aim_chat_leaveroom(struct aim_session_t *sess, char *name);
+
/* aim_util.c */
int aimutil_put8(u_char *, u_char);
u_char aimutil_get8(u_char *buf);