X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/5b79dc938f4e84b913b53d35aa229e54f041252d..313a06b7b4be217e90a17413862dc04552f693c3:/aim_buddylist.c diff --git a/aim_buddylist.c b/aim_buddylist.c index 04572b3..26165bc 100644 --- a/aim_buddylist.c +++ b/aim_buddylist.c @@ -7,9 +7,9 @@ * Adds a single buddy to your buddy list after login. * */ -u_long aim_add_buddy(struct aim_session_t *sess, - struct aim_conn_t *conn, - char *sn ) +faim_export unsigned long aim_add_buddy(struct aim_session_t *sess, + struct aim_conn_t *conn, + char *sn ) { struct command_tx_struct *newpacket; int i; @@ -17,7 +17,7 @@ u_long aim_add_buddy(struct aim_session_t *sess, if(!sn) return -1; - if (!(newpacket = aim_tx_new(0x0002, conn, 10+1+strlen(sn)))) + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+1+strlen(sn)))) return -1; newpacket->lock = 1; @@ -28,6 +28,7 @@ u_long aim_add_buddy(struct aim_session_t *sess, aim_tx_enqueue(sess, newpacket ); +#if 0 /* do we really need this code? */ { struct aim_snac_t snac; @@ -41,13 +42,14 @@ u_long aim_add_buddy(struct aim_session_t *sess, aim_newsnac(sess, &snac); } +#endif return( sess->snac_nextid++ ); } -u_long aim_remove_buddy(struct aim_session_t *sess, - struct aim_conn_t *conn, - char *sn ) +faim_export unsigned long aim_remove_buddy(struct aim_session_t *sess, + struct aim_conn_t *conn, + char *sn ) { struct command_tx_struct *newpacket; int i; @@ -55,7 +57,7 @@ u_long aim_remove_buddy(struct aim_session_t *sess, if(!sn) return -1; - if (!(newpacket = aim_tx_new(0x0002, conn, 10+1+strlen(sn)))) + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+1+strlen(sn)))) return -1; newpacket->lock = 1; @@ -84,3 +86,43 @@ u_long aim_remove_buddy(struct aim_session_t *sess, return( sess->snac_nextid++ ); } +faim_internal int aim_parse_buddyrights(struct aim_session_t *sess, + struct command_rx_struct *command, ...) +{ + rxcallback_t userfunc = NULL; + int ret=1; + struct aim_tlvlist_t *tlvlist; + struct aim_tlv_t *tlv; + unsigned short maxbuddies = 0, maxwatchers = 0; + + /* + * TLVs follow + */ + if (!(tlvlist = aim_readtlvchain(command->data+10, command->commandlen-10))) + return ret; + + /* + * TLV type 0x0001: Maximum number of buddies. + */ + if ((tlv = aim_gettlv(tlvlist, 0x0001, 1))) { + maxbuddies = aimutil_get16(tlv->value); + } + + /* + * TLV type 0x0002: Maximum number of watchers. + * + * XXX: what the hell is a watcher? + * + */ + if ((tlv = aim_gettlv(tlvlist, 0x0002, 1))) { + maxwatchers = aimutil_get16(tlv->value); + } + + userfunc = aim_callhandler(command->conn, 0x0003, 0x0003); + if (userfunc) + ret = userfunc(sess, command, maxbuddies, maxwatchers); + + aim_freetlvchain(&tlvlist); + + return ret; +}