Hi All,
I have identified an issue in the XIFF library.I was working with the IMGateway and creating an application with that plugin. I have found that when a users login his roster’s presence is not reflected correctly. Some of the roster’s presence was missing.
Issue Description
- Roster’s presence was not getting updated correctly as and when you login.
Analysis
- When a user login and request for his rosters list. openfire sends the presence-packets of the rosters after sending the roster-packet.
- Now those presence packets are send in bunch, and XIFF library code is written such a way that it can handle an array of presence packets. below is the actual code which is doing that (Code snipet from org.jivesoftware.xiff.im.Roster.as )
private function handlePresences( presenceArray:Array):void
{
for each(var aPresence:Presence in presenceArray)
{
........
........
........
}
}
- When i was debugging this issue, i found that the code was acually processing only the first presence packet of the presence-array. and rest all is discarded. Thats why the presence of some roster are not processed by xiff.
Fix
-
In the handlePresences() method, there are two places where “return;” statements are being used.
Actual Code
.........
.........
if(!unavailableItem) return;
updateRosterItemPresence( unavailableItem, aPresence ); ........
........ if(!availableItem) return;
updateRosterItemPresence( availableItem, aPresence ); ........
........
**Fix** : Removed the return statements
.........
.........
if(unavailableItem)
updateRosterItemPresence( unavailableItem, aPresence ); ........
........ if(availableItem)
updateRosterItemPresence( availableItem, aPresence ); ........
........