From: mid Date: Sat, 8 Sep 2001 03:11:47 +0000 (+0000) Subject: - Fri Sep 7 19:59:43 PDT 2001 X-Git-Tag: rel_0_99_2~17 X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/commitdiff_plain/e1b8c5758522703bd928651f41e1abc0d7cf08d2 - Fri Sep 7 19:59:43 PDT 2001 - Fix buddyicons. Yay! (checksums are 32bits all the time. duh.) --- diff --git a/CHANGES b/CHANGES index 7506427..10bfd15 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ No release numbers ------------------ + - Fri Sep 7 19:59:43 PDT 2001 + - Fix buddyicons. Yay! (checksums are 32bits all the time. duh.) + - Mon Sep 3 18:48:26 PDT 2001 - Reformat everything to use real tabs (and to my latest coding style) - Abstract out the numerical data types to fu8/16/32_t for portability. diff --git a/include/aim.h b/include/aim.h index a12b95c..fc125fa 100644 --- a/include/aim.h +++ b/include/aim.h @@ -702,10 +702,10 @@ struct aim_incomingim_ch2_args { unsigned short status; union { struct { - unsigned long checksum; - unsigned int length; + fu32_t checksum; + fu32_t length; time_t timestamp; - unsigned char *icon; + fu8_t *icon; } icon; struct { } voice; @@ -727,8 +727,8 @@ struct aim_incomingim_ch2_args { faim_export int aim_send_im_ext(aim_session_t *sess, aim_conn_t *conn, struct aim_sendimext_args *args); faim_export int aim_send_im(aim_session_t *, aim_conn_t *, const char *destsn, unsigned short flags, const char *msg); -faim_export int aim_send_icon(aim_session_t *sess, aim_conn_t *conn, const char *sn, const unsigned char *icon, int iconlen, time_t stamp, unsigned short iconsum); -faim_export unsigned short aim_iconsum(const unsigned char *buf, int buflen); +faim_export int aim_send_icon(aim_session_t *sess, aim_conn_t *conn, const char *sn, const fu8_t *icon, int iconlen, time_t stamp, fu32_t iconsum); +faim_export fu32_t aim_iconsum(const fu8_t *buf, int buflen); faim_export int aim_send_im_direct(aim_session_t *, aim_conn_t *, const char *msg); faim_export aim_conn_t *aim_directim_initiate(aim_session_t *, aim_conn_t *, struct aim_directim_priv *, const char *destsn); faim_export aim_conn_t *aim_directim_connect(aim_session_t *, aim_conn_t *, struct aim_directim_priv *); diff --git a/src/im.c b/src/im.c index 6494b6d..c656557 100644 --- a/src/im.c +++ b/src/im.c @@ -84,7 +84,7 @@ faim_export fu16_t aim_fingerprintclient(fu8_t *msghdr, int len) } /* This should be endian-safe now... but who knows... */ -faim_export fu16_t aim_iconsum(const fu8_t *buf, int buflen) +faim_export fu32_t aim_iconsum(const fu8_t *buf, int buflen) { fu32_t sum; int i; @@ -94,7 +94,7 @@ faim_export fu16_t aim_iconsum(const fu8_t *buf, int buflen) sum = ((sum & 0xffff0000) >> 16) + (sum & 0x0000ffff); - return sum & 0xffff; + return sum; } /* @@ -260,11 +260,10 @@ faim_export int aim_send_im_ext(aim_session_t *sess, aim_conn_t *conn, struct ai * Set the I HAVE A REALLY PURTY ICON flag. */ if (args->flags & AIM_IMFLAGS_HASICON) { - aimbs_put16(&fr->data, 0x0009); + aimbs_put16(&fr->data, 0x0008); aimbs_put16(&fr->data, 0x000c); aimbs_put32(&fr->data, args->iconlen); - aimbs_put16(&fr->data, 0x0001); /* XXX is this right?! */ - aimbs_put16(&fr->data, args->iconsum); + aimbs_put32(&fr->data, args->iconsum); aimbs_put32(&fr->data, args->iconstamp); } @@ -303,7 +302,7 @@ faim_export int aim_send_im(aim_session_t *sess, aim_conn_t *conn, const char *d * This is also performance sensative. (If you can believe it...) * */ -faim_export int aim_send_icon(aim_session_t *sess, aim_conn_t *conn, const char *sn, const fu8_t *icon, int iconlen, time_t stamp, fu16_t iconsum) +faim_export int aim_send_icon(aim_session_t *sess, aim_conn_t *conn, const char *sn, const fu8_t *icon, int iconlen, time_t stamp, fu32_t iconsum) { int i; fu8_t ck[8]; @@ -365,8 +364,7 @@ faim_export int aim_send_icon(aim_session_t *sess, aim_conn_t *conn, const char /* TLV t(2711) */ aimbs_put16(&fr->data, 0x2711); aimbs_put16(&fr->data, 4+4+4+iconlen+strlen(AIM_ICONIDENT)); - aimbs_put16(&fr->data, 0x0000); /* XXX is this right?! */ - aimbs_put16(&fr->data, iconsum); + aimbs_put32(&fr->data, iconsum); aimbs_put32(&fr->data, iconlen); aimbs_put32(&fr->data, stamp); aimbs_putraw(&fr->data, icon, iconlen); diff --git a/utils/faimtest/faimtest.c b/utils/faimtest/faimtest.c index 2ad710b..e339f30 100644 --- a/utils/faimtest/faimtest.c +++ b/utils/faimtest/faimtest.c @@ -1105,6 +1105,7 @@ static int faimtest_handlecmd(aim_session_t *sess, aim_conn_t *conn, struct aim_ */ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, va_list ap) { + struct faimtest_priv *priv = (struct faimtest_priv *)sess->aux_data; char *tmpstr; struct aim_incomingim_ch1_args *args; int clienttype = AIM_CLIENTTYPE_UNKNOWN; @@ -1209,6 +1210,9 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con } + if (priv->buddyicon && (args->icbmflags & AIM_IMFLAGS_BUDDYREQ)) + aim_send_icon(sess, conn, userinfo->sn, priv->buddyicon, priv->buddyiconlen, priv->buddyiconstamp, priv->buddyiconsum); + return 1; } @@ -1272,7 +1276,7 @@ static int faimtest_parse_incoming_im_chan2(aim_session_t *sess, aim_conn_t *con } else if (args->reqclass == AIM_CAPS_BUDDYICON) { - dvprintf("faimtest: Buddy Icon from %s, length = %u\n", userinfo->sn, args->info.icon.length); + dvprintf("faimtest: Buddy Icon from %s, length = %lu\n", userinfo->sn, args->info.icon.length); } else {