[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#123303: kyahoo: ";0,0 0" appended to things written in a chat



On Sat, Jan 12, 2002 at 07:16:00PM +0000, Aquarius wrote:
> On Sun, Dec 16, 2001 at 03:23:21PM -0600, Colin Watson wrote:
> > On Mon, Dec 10, 2001 at 09:02:07PM +0000, Aquarius wrote:
> > > KYahoo seems to be appending the string ";0,00" to things other 
> > > chatters type. See transcript excerpt below.
> > 
> > Could you try it with debugging messages turned on (Yahoo / Debug
> > Messages)? I'd try myself, but it wants me to do registration stuff, and
> > life's too short, as you know. :)
> 
> The suffixed characters seem to be coming up in the debug messages too:
> 
> Received packet:
> 	Service = (6) Message
> 	Real ID = [my ID snipped]
> 	Active ID = [my ID snipped]
> 	Connection ID = 6E963178
> 	Magic ID = 72C6
> 	Unknown Flag 1 = 72C11F3E
> 	Message Type = 1
> 	Raw Content = [other user ID snipped],,right I'll call you....;0,00
> 	Message ID = [other user ID snipped]
> 	Message = right I'll call you....;0,00

OK. There's a patch in libyahoo CVS that looks relevant. It would
probably be better to build kyahoo against the new libyahoo packages
rather than hacking its local copy, though.

I see somebody is planning to adopt kyahoo, so I'm cc'ing this to him.
The libyahoo patch is below in case it's useful.

--- kyahoo-0.7.0/kyahoo/libyahoo/libyahoo.c	Mon May  7 03:57:31 2001
+++ cvs/libyahoo/libyahoo.c	Tue Dec  4 01:35:26 2001
@@ -3222,6 +3574,8 @@ int yahoo_parsepacket_message(struct yah
 {
 	char *content;
 	char *tmp_id;
+	char *tmp_msg;
+	char *tmp_imvironment;
 	int i, j, section;
 
 	if (pkt->msgtype == YAHOO_MSGTYPE_OFFLINE)
@@ -3232,9 +3586,14 @@ int yahoo_parsepacket_message(struct yah
 	/* Make working copy of content */
 	content = strdup(inpkt->content);
 	tmp_id = strdup(content);
+	tmp_msg = strdup(content);
+	tmp_imvironment = strdup(content);
 
 	/* initialize */
 	pkt->msg_status = 0;
+	pkt->imvironment_enabled = 0;
+	pkt->imvironment_unkn1 = 0;
+	pkt->imvironment_unkn2 = 0;
 
 	/* possible message content formats: */
 /*     userid(#) *//* msgtype == YAHOO_MSGTYPE_STATUS */
@@ -3248,6 +3607,8 @@ int yahoo_parsepacket_message(struct yah
 	j = 0;
 	section = 0;
 	tmp_id[0] = 0;
+	tmp_msg[0] = 0;
+	tmp_imvironment[0] = 0;
 	while (i < strlen(content))
 	{
 		char ch = content[i];
@@ -3294,10 +3655,71 @@ int yahoo_parsepacket_message(struct yah
 				}
 			}
 		}
+		else if (section == 3) /* parsing message text */
+		{
+			if ( ch == 6 )
+			{
+				j = 0;
+				section = 4;
+			}
+			else
+			{
+				tmp_msg[j++] = ch;
+				tmp_msg[j] = 0;
+			}
+		}
+		else if (section == 4) /* parsing invironment name */
+		{
+			if ( ch == ';' )
+			{
+				j = 0;
+				section = 5;
+			}
+			else
+			{
+				tmp_imvironment[j++] = ch;
+				tmp_imvironment[j] = 0;
+			}
+		}
+		else if (section == 5) /* parsing imvir enabled flag */
+		{
+			if (ch == ',')
+			{
+				j = 0;
+				section = 6;
+			}
+			else
+			{
+				if (isdigit((int) ch))
+				{
+					pkt->imvironment_enabled *= 10;
+					pkt->imvironment_enabled += ch - '0';
+				}
+			}
+		}
+		else if (section == 6) /* parsing imvir unkn1 flag */
+		{
+			if (ch == 7)
+			{
+				j = 0;
+				section = 7;
+			}
+			else
+			{
+				if (isdigit((int) ch))
+				{
+					pkt->imvironment_unkn1 *= 10;
+					pkt->imvironment_unkn1 += ch - '0';
+				}
+			}
+		}
 		else
 		{
-			pkt->msg = strdup(&content[i]);
-			break;
+			if (isdigit((int) ch))
+			{
+				pkt->imvironment_unkn2 *= 10;
+				pkt->imvironment_unkn2 += ch - '0';
+			}
 		}
 
 		i++;
@@ -3305,6 +3727,11 @@ int yahoo_parsepacket_message(struct yah
 
 	/* do stuff with extracted parts */
 	pkt->msg_id = strdup(tmp_id);
+	if ( tmp_msg[0] != 0 )
+	{
+		pkt->msg = strdup(tmp_msg);
+	}
+	pkt->imvironment_name = strdup(tmp_imvironment);
 
 	/* handle empty message case */
 	/* don't pass a message if it's just a status update */
@@ -3313,8 +3740,32 @@ int yahoo_parsepacket_message(struct yah
 		pkt->msg = strdup("");
 	}
 
+#if 0  
+    /*
+	Note: 
+	    Temporarily disable this, see if there're any side effect(s).
+	    We don't want to strip the escape sequence for bold, underline and
+	    italic.  (with this disabled, we'll have that 'squiggle' trailing
+	    character after each msg.  Any idea what it's for?)
+     */
+
+	if (NULL != pkt->msg)
+	{
+		/* strip off any trailing control-chars */
+		for (i = 0; i <= strlen(pkt->msg); i++)
+		{
+			if (!isprint(pkt->msg[i]))
+			{
+				pkt->msg[i] = '\0';
+			}
+		}
+	}
+#endif
+
 	/* free working variables */
 	FREE(tmp_id);
+	FREE(tmp_imvironment);
+	FREE(tmp_msg);
 	FREE(content);
 
 	/* Return ok for success */
--- kyahoo-0.7.0/kyahoo/libyahoo/libyahoo.h	Mon May  7 03:53:30 2001
+++ cvs/libyahoo/libyahoo.h	Sat Dec  1 01:22:17 2001
@@ -245,6 +256,12 @@ struct yahoo_packet
 	/* Group names for renaming */
 	char *group_old;			/* Old group name */
 	char *group_new;			/* New group name */
+
+	/* New IMvironments stuff "name;[01],0 0" */
+	char *imvironment_name;     /* Name of IMvironment */
+	int imvironment_enabled;    /* ? - is an imvironment in use? */
+	int imvironment_unkn1;
+	int imvironment_unkn2;
 };
 
 /* Misc contants */

Cheers,

-- 
Colin Watson                                  [cjwatson@flatline.org.uk]



Reply to: