[gaim-migrate @ 2206]

Thu, 30 Aug 2001 00:19:06 +0000

author
Adam Fritzler <mid@auk.cx>
date
Thu, 30 Aug 2001 00:19:06 +0000
changeset 2196
f39aeaa5f829
parent 2195
0f7d11f927e5
child 2197
e2b0aae53d01

[gaim-migrate @ 2206]
thanks adam

committer: Eric Warmenhoven <warmenhoven@yahoo.com>

src/protocols/oscar/CHANGES file | annotate | diff | comparison | revisions
src/protocols/oscar/aim.h file | annotate | diff | comparison | revisions
src/protocols/oscar/im.c file | annotate | diff | comparison | revisions
src/protocols/oscar/oscar.c file | annotate | diff | comparison | revisions
--- 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
--- 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;
--- 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;
--- 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;
 		}
 

mercurial