powered by Jive Software

Openfire v4.2.3 does not compliant to XEP-0045: Multi-User Chat - Presence Broadcast standard


#1

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>

https://xmpp.org/extensions/xep-0045.html#enter-pres

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)

Smack 4.3.0 Join server chat room receive <presence/> NoResponseException even the response is received
#2

This is a very important problem. I want to understand at least an approximate time for its elimination.


#3

Openfire is an open source project with only a bunch of volunteers working on it. If nobody provides a patch, it won’t get fixed.


#4

created https://issues.igniterealtime.org/browse/OF-1598