X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/bd71fa88aafe5184b226f6c2260b21abf5ec0722..0e2be2725c40e5687a034a075a5dbe65c46d45a9:/faim/aim.h diff --git a/faim/aim.h b/faim/aim.h index 9c790d5..bf813bc 100644 --- a/faim/aim.h +++ b/faim/aim.h @@ -62,6 +62,8 @@ struct aim_login_struct { char cookie[AIM_COOKIELEN]; char *email; u_short regstatus; + char *errorurl; + u_short errorcode; }; /* @@ -174,6 +176,13 @@ struct aim_session_t { 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 * @@ -197,6 +206,15 @@ struct aim_userinfo_s { 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 */ @@ -225,7 +243,12 @@ int aim_puttlv (u_char *dest, struct aim_tlv_t *newtlv); 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 @@ -245,6 +268,8 @@ u_long aim_genericreq_l(struct aim_session_t *, struct aim_conn_t *conn, u_short 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 *); @@ -315,7 +340,7 @@ void aim_session_init(struct aim_session_t *); 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 *); @@ -327,6 +352,7 @@ u_long aim_bos_reqrights(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 *); @@ -335,6 +361,7 @@ int aim_handleredirect_middle(struct aim_session_t *, struct command_rx_struct * 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 */ @@ -365,6 +392,41 @@ u_long aim_remove_buddy(struct aim_session_t *, struct aim_conn_t *, char *); 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);