Test environment: XMPP client aTalk with smack 4.4.0 with an account registered on example.ru service which runs on openfire v4.2.3:
Please refer also to:
It is found that openfire v4.2.3 does not compliant to the following standard:
XEP-0045: Multi-User Chat - Presence Broadcast specifications (self presence)
<presence
from='coven@chat.shakespeare.lit/thirdwitch'
id='026B3509-2CCE-4D69-96D6-25F41FFDC408'
to='hag66@shakespeare.lit/pda'>
<x xmlns='http://jabber.org/protocol/muc#user'>
<item affiliation='member' role='participant'/>
<status code='110'/>
</x>
</presence>
As shown in the last stanza, the âself-presenceâ sent by the room to the new user MUST include a status code of 110 so that the user knows this presence refers to itself as an occupant. This self-presence MUST NOT be sent to the new occupant until the room has sent the presence of all other occupants to the new occupant; this enables the new occupant to know when it has finished receiving the room roster.
Following is aTalk error log, while trying to join chatroom âpuhlya@conference.example.ruâ created on openfire server. Smack rejected the âself presenceâ returns from server as it does not contain status code 110 causing the user join chat room to fail.
========== aTalk log in joining chatRoom ===========
09-06 09:34:45.967 23398-23606/org.atalk.android D/SMACK: SENT (0): <presence to='puhlya@conference.example.ru/test' id='7IJP8-100'><x xmlns='http://jabber.org/protocol/muc'></x><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://android.atalk.org' ver='SPANeHrMhKxipyDRRXFZu1T21So='/><x xmlns='vcard-temp:x:update'></x></presence>
09-06 09:34:46.794 23398-23607/org.atalk.android D/SMACK: RECV (0): <presence to="test@example.ru/atalk" id="7IJP8-100" from="puhlya@conference.example.ru/test"><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://android.atalk.org" ver="SPANeHrMhKxipyDRRXFZu1T21So="></c><x xmlns="vcard-temp:x:update"></x><x xmlns="http://jabber.org/protocol/muc#user"><item jid="test@example.ru/atalk" affiliation="none" role="participant"/></x></presence>
09-06 09:35:00.996 23398-23670/org.atalk.android E/aTalk: [7704] impl.protocol.jabber.ChatRoomJabberImpl.joinAs().668 Failed to join room puhlya@conference.example.ru with nickname: test.
org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 15000ms (~15s). Waited for response using: AndFilter: (StanzaTypeFilter: Presence, OrFilter: (AndFilter: (FromMatchesFilter (ignoreResourcepart): puhlya@conference.example.ru, MUCUserStatusCodeFilter: status=110), AndFilter: (FromMatchesFilter (full): puhlya@conference.example.ru/test, StanzaIdFilter: id=7IJP8-100, PresenceTypeFilter: type=error))).
at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:265)
at org.jivesoftware.smackx.muc.MultiUserChat.enter(MultiUserChat.java:376)
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:666)
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:601)
at net.java.sip.communicator.impl.protocol.jabber.ChatRoomJabberImpl.joinAs(ChatRoomJabberImpl.java:623)
at net.java.sip.communicator.impl.protocol.jabber.ChatRoomJabberImpl.joinAs(ChatRoomJabberImpl.java:594)
at net.java.sip.communicator.impl.muc.MUCServiceImpl$JoinChatRoomTask.run(MUCServiceImpl.java:517)