diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2015-12-09 11:16:03 +0100 |
---|---|---|
committer | Christian S <christian@pix-art.de> | 2015-12-12 15:50:40 +0100 |
commit | 2ad59260245a11f852db005bbf95046942238120 (patch) | |
tree | e43c18c8dbfa864ad5ac88e7465c105792dbb95a /src/main | |
parent | 751f92fa2d7606fbc78085cb5ff7688b71f21d87 (diff) |
wait with status change to online after all disco queries have been made
Diffstat (limited to '')
-rw-r--r-- | src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 9ec4d9bbb..7455ff8d3 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -116,6 +116,7 @@ public class XmppConnection implements Runnable { private long lastPingSent = 0; private long lastConnect = 0; private long lastSessionStarted = 0; + private int mPendingServiceDiscoveries = 0; private boolean mInteractive = false; private int attempt = 0; private final Hashtable<String, Pair<IqPacket, OnIqPacketReceived>> packetCallbacks = new Hashtable<>(); @@ -926,18 +927,16 @@ public class XmppConnection implements Runnable { synchronized (this.disco) { this.disco.clear(); } + mPendingServiceDiscoveries = 0; + sendServiceDiscoveryItems(account.getServer()); sendServiceDiscoveryInfo(account.getServer()); sendServiceDiscoveryInfo(account.getJid().toBareJid()); - sendServiceDiscoveryItems(account.getServer()); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource()); this.lastSessionStarted = SystemClock.elapsedRealtime(); - changeStatus(Account.State.ONLINE); - if (bindListener != null) { - bindListener.onBind(account); - } } private void sendServiceDiscoveryInfo(final Jid jid) { + mPendingServiceDiscoveries++; final IqPacket iq = new IqPacket(IqPacket.TYPE.GET); iq.setTo(jid); iq.query("http://jabber.org/protocol/disco#info"); @@ -988,6 +987,16 @@ public class XmppConnection implements Runnable { } else { Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": could not query disco info for " + jid.toString()); } + if (packet.getType() != IqPacket.TYPE.TIMEOUT) { + mPendingServiceDiscoveries--; + if (mPendingServiceDiscoveries <= 0) { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": done with service discovery"); + changeStatus(Account.State.ONLINE); + if (bindListener != null) { + bindListener.onBind(account); + } + } + } } }); } |