Re: [OpenSIPStack] SipUri Parse Error
Brought to you by:
joegenbaclor
From: Joegen E. B. <joe...@gm...> - 2007-07-05 00:30:14
|
Hi Gustavo, Yes, I see the fault in the code. Patch is again in CVS. Thanks for reporting the bug. Joegen Gustavo Curetti wrote: > Hi Joegen: > > I have checked the patch, but the comparation: > > BOOL hasEnclosure = begin != P_MAX_INDEX && end != P_MAX_INDEX; > > is still wrong if the "begin" value is set like: > > PINDEX begin = value.Find( '<' ) + 1; > > I suggest: > > PINDEX begin = value.Find( '<' ); > PINDEX end = value.Find( '>' ); > BOOL hasEnclosure = begin != P_MAX_INDEX && end != P_MAX_INDEX; > PString uri; > > if( hasEnclosure ) > { > PINDEX rightOffSet = value.GetLength() - end; > PINDEX length = value.GetLength() - begin *- 1* - rightOffSet; > uri = value.Mid( begin *+ 1*, length ).Trim(); > } > > And in the code: > > PString tBuff = uri; > > PINDEX atIndex = *value*.FindLast( '@' <mailto:%27@%27> ); > > if( atIndex != P_MAX_INDEX ) > tBuff = uri.Mid( atIndex + 1 ); > > The value of atIndex is obtained from value instead of from uri. > I suggest: > > PINDEX atIndex = *uri*.FindLast( '@' <mailto:%27@%27> ); > > Or: > > PString tBuff = value; > PINDEX atIndex = value.FindLast( '@' ); > > if( atIndex != P_MAX_INDEX ) > { > if( !hasEnclosure ) > { > tBuff = value.Mid( atIndex + 1 ); > } else { > atIndex = uri.FindLast( '@' ); > tBuff = uri.Mid( atIndex + 1 ); > } > } > > Regards, > Gustavo > > ------------------------------------------------------------------------ > > > Date: Wed, 4 Jul 2007 14:57:16 +0800 > > To: cur...@gm... > > From: joe...@gm... > > CC: ope...@li... > > Subject: Re: [OpenSIPStack] SipUri Parse Error > > > > I have committed a patch for this bug. Thanks for reporting it. > > > > > > Gustavo Curetti wrote: > > > Joegen: > > > > > > When an uri like: > > > > > > <sip:782706@192.168.0.1:5060;transport=udp;user=phone> > > > > > > is parsed by SIPURI & SIPURI::operator=(const MimeHeader & header) > > > > > > the '>' is kept in the param user (user=phone>). > > > > > > Then the result uri is: > > > > > > sip:782706@192.168.0.1:5060;transport=udp;user=phone> > > > > > > When this uri is parsed again by SIPURI & SIPURI::operator=(const > > > MimeHeader & header), > > > > > > the uri is detected like it has enclosure, but the uri is not > extracted. > > > > > > I made a few changes to correct the second error: > > > > > > PINDEX begin = value.Find( '<' ) + 1; --> PINDEX begin = value.Find( > > > '<' ); (to be compared with P_MAX_INDEX) > > > PINDEX end = value.Find( '>' ); > > > BOOL hasEnclosure = begin != P_MAX_INDEX && end != P_MAX_INDEX; > > > PString uri; > > > > > > if( hasEnclosure ) > > > { > > > PINDEX rightOffSet = value.GetLength() - end; > > > PINDEX length = value.GetLength() - begin - rightOffSet; --> PINDEX > > > length = value.GetLength() - begin - 1 - rightOffSet; > > > uri = value.Mid( begin, length ).Trim(); --> uri = value.Mid( begin + > > > 1, length ).Trim(); > > > } > > > > > > And to correct the first error: > > > > > > PStringArray t1, t2; > > > PString tBuff = value; > > > PINDEX atIndex = value.FindLast( '@' ); > > > > > > if( atIndex != P_MAX_INDEX ) > > > tBuff = value.Mid( atIndex + 1 ); > > > | > > > V > > > PStringArray t1, t2; > > > PString tBuff = value; > > > PINDEX atIndex = value.FindLast( '@' ); > > > > > > if( atIndex != P_MAX_INDEX ) > > > { > > > if( !hasEnclosure ) > > > { > > > tBuff = value.Mid( atIndex + 1 ); > > > } else { > > > atIndex = uri.FindLast( '@' ); > > > tBuff = uri.Mid( atIndex + 1 ); > > > } > > > } > > > > > > Please check if these changes are ok. > > > > > > Regards, > > > Gustavo > > > > > > > ------------------------------------------------------------------------ > > > Comunícate al instante con Windows Live Messenger Windows Live > > > Messenger > > > > <http://imagine-msn.com/messenger/launch80/default.aspx?locale=es-ar&source=joinmsncom/messenger> > > > > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by DB2 Express > > Download DB2 Express C - the FREE version of DB2 express and take > > control of your XML. No limits. Just data. Click to get it now. > > http://sourceforge.net/powerbar/db2/ > > _______________________________________________ > > opensipstack-devel mailing list > > ope...@li... > > https://lists.sourceforge.net/lists/listinfo/opensipstack-devel > > > ------------------------------------------------------------------------ > Se uno de los primeros en probar Windows Live Mail. Windows Live Mail. > <http://ideas.live.com/programpage.aspx?versionId=5d21c51a-b161-4314-9b0e-4911fb2b2e6d> |