deal with another set of stream:features after bind

This commit is contained in:
Daniel Gultsch 2015-08-23 17:26:50 +02:00
parent 560e63564d
commit d51c4b9655

View File

@ -83,7 +83,7 @@ public class XmppConnection implements Runnable {
private XmlReader tagReader;
private TagWriter tagWriter;
private final Features features = new Features(this);
private boolean shouldBind = true;
private boolean needsBinding = true;
private boolean shouldAuthenticate = true;
private Element streamFeatures;
private final HashMap<Jid, Info> disco = new HashMap<>();
@ -145,7 +145,7 @@ public class XmppConnection implements Runnable {
lastPingSent = SystemClock.elapsedRealtime();
this.attempt++;
try {
shouldAuthenticate = shouldBind = !account.isOptionSet(Account.OPTION_REGISTER);
shouldAuthenticate = needsBinding = !account.isOptionSet(Account.OPTION_REGISTER);
tagReader = new XmlReader(wakeLock);
tagWriter = new TagWriter();
this.changeStatus(Account.State.CONNECTING);
@ -634,11 +634,12 @@ public class XmppConnection implements Runnable {
}
final ResumePacket resume = new ResumePacket(this.streamId, stanzasReceived, smVersion);
this.tagWriter.writeStanzaAsync(resume);
} else if (this.streamFeatures.hasChild("bind") && shouldBind) {
sendBindRequest();
} else {
disconnect(true);
changeStatus(Account.State.INCOMPATIBLE_SERVER);
} else if (needsBinding) {
if (this.streamFeatures.hasChild("bind")) {
sendBindRequest();
} else {
throw new IncompatibleServerException();
}
}
}
@ -705,6 +706,7 @@ public class XmppConnection implements Runnable {
} catch (final InterruptedException ignored) {
}
}
needsBinding = false;
clearIqCallbacks();
final IqPacket iq = new IqPacket(IqPacket.TYPE.SET);
iq.addChild("bind", "urn:ietf:params:xml:ns:xmpp-bind")