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.
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;
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 *);
}
/* 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;
sum = ((sum & 0xffff0000) >> 16) + (sum & 0x0000ffff);
- return sum & 0xffff;
+ return sum;
}
/*
* 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);
}
* 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];
/* 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);
*/
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;
}
+ 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;
}
} 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 {