NoResponseException Occured when join a room

When “invitationReceived” get an invitation, i use

DiscussionHistory history = new DiscussionHistory();
history.setMaxStanzas(20);
multiUserChat.join(RuntimeConstants.LoginUsername, password, history,timeout);

to join a room.

But it throw NoResponseException after “timeout” seconds.

I debugged the code in file AbstractXMPPConnection in method createPacketCollectorAndSend in line 649.

The “resultQueue” filed in “packetCollector” is always empty.

Smack version is 4.1.0 alpha5

log:

SENT:

RCV:

72d317a59bd28792676a28c19676df928f17abd6</ph oto>72d317a59bd28792676a28c19676df928f17abd6</ x>

Is the RCV Log has something wrong?

Thanks in advance!

Is see no problems wrt to the exchanged stanzas. The initial presence (XEP-45 7.2.2)

is answered with

which should be matched by the responseFilter in MultiUserChat’s join() method, which is then used in the packet collector.

Note that the filter displayed in the screenshot does match a different MUC: aaaaa_0z2. Also note that alpha7 is the most recent version of Smack 4.1, But don’t think that it should matter in this case. I’ve also deleted your comment on github. Let’s keep the discussion in one place.

thanks for your reply.

The screenhot and log were not collected in the same time.

But I’m sure the address marked in screnshot is equal to “from” attribute (like ’aaaaa_og6@conference.bzwang‘) in

“”

I test it step by step again.

smack 4.1.0 alpha5

1、aaaaa login by spark. bbbbb login by my android app.

2、aaaaa invite bbbbb to join an Room, and aaaaa send message to bbbbb.

请把我加入会议中。

3、bbbbb received the invitation, add use join() to join the room, so it will be sent message as below.

[

the XEP45 7.2.2 give an example :

Example 20. User Seeks to Enter a Room (Multi-User Chat)


<x xmlns='http://jabber.org/protocol/muc’/>

my app send message to join an room do not contains “from” attribute, is that necessary?

I debugged smack source in file AbstractXMPPConnection.java in line 649 mothed public PacketCollector createPacketCollectorAndSend(PacketFilter packetFilter, Packet packet), and can not find when add “packet” to the filed resultQueue in object packetCollector(add breakpoints at all the possible line).

]

4、and then bbbbb receive the reponse Message:

72d317a59bd28792676a28c19676df928f17abd6</ph oto>72d317a59bd28792676a28c19676df928f17abd6</ x>

<presence id=“XBxJG-11” to=“bbbbb@bzwang/Smack” from=“aaaaa_dqj@conference.bzwang/bbbbb”>

my app send message to join an room do not contains “from” attribute, is that necessary?
In XMPP c2s, the from attribute is always implicitly the clients full JID (RFC 6120 8.1.2.1)

can not find when add "packet"
The stanza is added when the filter matches. How does the filter look in this case, and which stanza is it trying to filter? Try to figure that out before reading the answer.

The filter is created in Smack/MultiUserChat.java at master · igniterealtime/Smack · GitHub and does filter presence stanzas from the JID of the MUC occupant. For example, it should match the stanza with the id “XBxJG-11”. With the provided information, I can’t tell you why this doesn’t work in your case, but I hope to gave you enough information to debug the cause yourself.

Thanks for your help.

I think I should go through the source code to check the process again.

PS:

it should match the stanza with the id “XBxJG-11”.
but the responseFilter like as below, and how it match the stanza with the id field?

PPS: I use “asmack” to realize “receiving invitation and join the chat room” process, but without any problems, very strange.

but the responseFilter like as below, and how it match the stanza with the id field?

It doesn’t need to match the ID. The from and presence type match is sufficient.