wait for session iq to return sucessfully before sending other stanzas. fixed #1017
This commit is contained in:
parent
5793fb680f
commit
da099e5fa4
|
@ -687,14 +687,44 @@ public class XmppConnection implements Runnable {
|
|||
} catch (final InvalidJidException e) {
|
||||
// TODO: Handle the case where an external JID is technically invalid?
|
||||
}
|
||||
if (streamFeatures.hasChild("session")) {
|
||||
sendStartSession();
|
||||
} else {
|
||||
sendPostBindInitialization();
|
||||
}
|
||||
} else {
|
||||
disconnect(true);
|
||||
}
|
||||
} else {
|
||||
disconnect(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void sendStartSession() {
|
||||
final IqPacket startSession = new IqPacket(IqPacket.TYPE.SET);
|
||||
startSession.addChild("session","urn:ietf:params:xml:ns:xmpp-session");
|
||||
this.sendUnmodifiedIqPacket(startSession, new OnIqPacketReceived() {
|
||||
@Override
|
||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
||||
sendPostBindInitialization();
|
||||
} else {
|
||||
disconnect(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void sendPostBindInitialization() {
|
||||
smVersion = 0;
|
||||
if (streamFeatures.hasChild("sm", "urn:xmpp:sm:3")) {
|
||||
smVersion = 3;
|
||||
final EnablePacket enable = new EnablePacket(smVersion);
|
||||
tagWriter.writeStanzaAsync(enable);
|
||||
stanzasSent = 0;
|
||||
messageReceipts.clear();
|
||||
} else if (streamFeatures.hasChild("sm", "urn:xmpp:sm:2")) {
|
||||
smVersion = 2;
|
||||
}
|
||||
if (smVersion != 0) {
|
||||
final EnablePacket enable = new EnablePacket(smVersion);
|
||||
tagWriter.writeStanzaAsync(enable);
|
||||
stanzasSent = 0;
|
||||
|
@ -709,20 +739,6 @@ public class XmppConnection implements Runnable {
|
|||
bindListener.onBind(account);
|
||||
}
|
||||
sendInitialPing();
|
||||
} else {
|
||||
disconnect(true);
|
||||
}
|
||||
} else {
|
||||
disconnect(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (this.streamFeatures.hasChild("session")) {
|
||||
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": sending deprecated session");
|
||||
final IqPacket startSession = new IqPacket(IqPacket.TYPE.SET);
|
||||
startSession.addChild("session","urn:ietf:params:xml:ns:xmpp-session");
|
||||
this.sendUnmodifiedIqPacket(startSession, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendServiceDiscoveryInfo(final Jid server) {
|
||||
|
|
Loading…
Reference in New Issue