X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/9f1a40132a2c6642e3544205c31c091051127ae0..b1eac25ac75949707e082afcb8e0d702e536cef1:/src/misc.c diff --git a/src/misc.c b/src/misc.c index c8f8a80..29f736f 100644 --- a/src/misc.c +++ b/src/misc.c @@ -215,10 +215,10 @@ faim_export unsigned long aim_bos_setprofile(struct aim_session_t *sess, return -1; i += aim_putsnac(newpacket->data, 0x0002, 0x004, 0x0000, sess->snac_nextid); - i += aim_puttlv_str(newpacket->data+i, 0x0001, strlen("text/x-aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); + i += aim_puttlv_str(newpacket->data+i, 0x0001, strlen("text/aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); i += aim_puttlv_str(newpacket->data+i, 0x0002, strlen(profile), profile); /* why do we send this twice? */ - i += aim_puttlv_str(newpacket->data+i, 0x0003, strlen("text/x-aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); + i += aim_puttlv_str(newpacket->data+i, 0x0003, strlen("text/aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); /* Away message -- we send this no matter what, even if its blank */ if (awaymsg) @@ -361,7 +361,7 @@ faim_export unsigned long aim_setversions(struct aim_session_t *sess, struct command_tx_struct *newpacket; int i; - if (!(newpacket = aim_tx_new(sess, conn, AIM_FRAMETYPE_OSCAR, 0x0002, 10 + (4*12)))) + if (!(newpacket = aim_tx_new(sess, conn, AIM_FRAMETYPE_OSCAR, 0x0002, 10 + (4*16)))) return -1; newpacket->lock = 1; @@ -372,9 +372,6 @@ faim_export unsigned long aim_setversions(struct aim_session_t *sess, i += aimutil_put16(newpacket->data+i, 0x0001); i += aimutil_put16(newpacket->data+i, 0x0003); - i += aimutil_put16(newpacket->data+i, 0x0013); - i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket->data+i, 0x0002); i += aimutil_put16(newpacket->data+i, 0x0001); @@ -397,11 +394,17 @@ faim_export unsigned long aim_setversions(struct aim_session_t *sess, i += aimutil_put16(newpacket->data+i, 0x0001); i += aimutil_put16(newpacket->data+i, 0x000b); - i += aimutil_put16(newpacket->data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0002); i += aimutil_put16(newpacket->data+i, 0x000c); i += aimutil_put16(newpacket->data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0013); + i += aimutil_put16(newpacket->data+i, 0x0001); + + i += aimutil_put16(newpacket->data+i, 0x0015); + i += aimutil_put16(newpacket->data+i, 0x0001); + newpacket->commandlen = i; newpacket->lock = 0; aim_tx_enqueue(sess, newpacket); @@ -818,3 +821,56 @@ faim_export unsigned long aim_icq_setstatus(struct aim_session_t *sess, return(sess->snac_nextid); } + +/* + * Should be generic enough to handle the errors for all families... + * + */ +static int generror(struct aim_session_t *sess, aim_module_t *mod, struct command_rx_struct *rx, aim_modsnac_t *snac, unsigned char *data, int datalen) +{ + int ret = 0; + int error = 0; + rxcallback_t userfunc; + struct aim_snac_t *snac2; + + snac2 = aim_remsnac(sess, snac->id); + + if (datalen) + error = aimutil_get16(data); + + if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype))) + ret = userfunc(sess, rx, error, snac2?snac2->data:NULL); + + if (snac2) + free(snac2->data); + free(snac2); + + return ret; +} + +static int snachandler(struct aim_session_t *sess, aim_module_t *mod, struct command_rx_struct *rx, aim_modsnac_t *snac, unsigned char *data, int datalen) +{ + + if (snac->subtype == 0x0001) + return generror(sess, mod, rx, snac, data, datalen); + else if ((snac->family == 0xffff) && (snac->subtype == 0xffff)) { + rxcallback_t userfunc; + + if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype))) + return userfunc(sess, rx); + } + + return 0; +} + +faim_internal int misc_modfirst(struct aim_session_t *sess, aim_module_t *mod) +{ + + mod->family = 0xffff; + mod->version = 0x0000; + mod->flags = AIM_MODFLAG_MULTIFAMILY; + strncpy(mod->name, "misc", sizeof(mod->name)); + mod->snachandler = snachandler; + + return 0; +}