# HG changeset patch # User Eric Warmenhoven # Date 999130746 0 # Node ID 016c5307f26b083857b34e29e148dea7953057fe # Parent d615f7e2d8c45ce0544f217b97cad294db1e4b07 [gaim-migrate @ 2206] thanks adam committer: Tailor Script diff -r d615f7e2d8c4 -r 016c5307f26b src/protocols/oscar/CHANGES --- a/src/protocols/oscar/CHANGES Thu Aug 30 00:04:54 2001 +0000 +++ b/src/protocols/oscar/CHANGES Thu Aug 30 00:19:06 2001 +0000 @@ -1,6 +1,11 @@ No release numbers ------------------ + - Wed Aug 29 16:59:24 PDT 2001 + - Pass up entire icon triplet (checksum/length/timestamp) in all cases + that it is recieved. + - Eric was paying more attention than I am. + - Sat Aug 25 19:46:38 PDT 2001 - Pass "Maximum visible message length" to client in chat info update - This is the real maximum message length now. There is still a diff -r d615f7e2d8c4 -r 016c5307f26b src/protocols/oscar/aim.h --- a/src/protocols/oscar/aim.h Thu Aug 30 00:04:54 2001 +0000 +++ b/src/protocols/oscar/aim.h Thu Aug 30 00:19:06 2001 +0000 @@ -674,6 +674,8 @@ int finlen; unsigned char fingerprint[10]; time_t iconstamp; + unsigned long iconlength; + unsigned long iconchecksum; int extdatalen; unsigned char *extdata; }; @@ -683,6 +685,7 @@ unsigned short status; union { struct { + unsigned long checksum; unsigned int length; time_t timestamp; unsigned char *icon; diff -r d615f7e2d8c4 -r 016c5307f26b src/protocols/oscar/im.c --- a/src/protocols/oscar/im.c Thu Aug 30 00:04:54 2001 +0000 +++ b/src/protocols/oscar/im.c Thu Aug 30 00:19:06 2001 +0000 @@ -578,6 +578,8 @@ } else if ((type == 0x0008) && (length == 0x000c)) { /* I-HAVE-A-REALLY-PURTY-ICON Flag */ + args.iconchecksum = aimutil_get32(data+i); + args.iconlength = aimutil_get32(data+i+4); args.iconstamp = aimutil_get32(data+i+8); args.icbmflags |= AIM_IMFLAGS_HASICON; @@ -655,11 +657,11 @@ } /* - * What follows may be TLVs or nothing, depending on the - * purpose of the message. - * - * Ack packets for instance have nothing more to them. - */ + * What follows may be TLVs or nothing, depending on the + * purpose of the message. + * + * Ack packets for instance have nothing more to them. + */ list2 = aim_readtlvchain(block1->value+2+8+16, block1->length-2-8-16); if (!list2 || ((args.reqclass != AIM_CAPS_IMIMAGE) && !(aim_gettlv(list2, 0x2711, 1)))) { @@ -719,7 +721,7 @@ miscinfo = aim_gettlv(list2, 0x2711, 1); - /* aimutil_get32(miscinfo->value+curpos); i don't know what this is */ + args.info.icon.checksum = aimutil_get32(miscinfo->value+curpos); curpos += 4; args.info.icon.length = aimutil_get32(miscinfo->value+curpos); curpos += 4; diff -r d615f7e2d8c4 -r 016c5307f26b src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Thu Aug 30 00:04:54 2001 +0000 +++ b/src/protocols/oscar/oscar.c Thu Aug 30 00:19:06 2001 +0000 @@ -116,6 +116,7 @@ struct icon_req { char *user; time_t timestamp; + unsigned long length; unsigned long checksum; gboolean request; }; @@ -1274,8 +1275,12 @@ ir->user = g_strdup(who); od->hasicons = g_slist_append(od->hasicons, ir); } - if (args->iconstamp > ir->timestamp) + if ((args->iconlength != ir->length) || + (args->iconchecksum != ir->checksum) || + (args->iconstamp != ir->timestamp)) ir->request = TRUE; + ir->length = args->iconlength; + ir->checksum = args->iconchecksum; ir->timestamp = args->iconstamp; }