nimbuzz.com: don't wait for disco replies to set account to online
This commit is contained in:
parent
635210d278
commit
c5743067ad
|
@ -2478,7 +2478,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
|
||||||
Thread thread = new Thread(account.getXmppConnection());
|
Thread thread = new Thread(account.getXmppConnection());
|
||||||
account.getXmppConnection().setInteractive(interactive);
|
account.getXmppConnection().setInteractive(interactive);
|
||||||
thread.start();
|
thread.start();
|
||||||
scheduleWakeUpCall(Config.CONNECT_TIMEOUT, account.getUuid().hashCode());
|
scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode());
|
||||||
} else {
|
} else {
|
||||||
account.getRoster().clearPresences();
|
account.getRoster().clearPresences();
|
||||||
account.setXmppConnection(null);
|
account.setXmppConnection(null);
|
||||||
|
|
|
@ -226,8 +226,16 @@ public class XmppConnection implements Runnable {
|
||||||
lastPingSent = SystemClock.elapsedRealtime();
|
lastPingSent = SystemClock.elapsedRealtime();
|
||||||
lastDiscoStarted = Long.MAX_VALUE;
|
lastDiscoStarted = Long.MAX_VALUE;
|
||||||
this.attempt++;
|
this.attempt++;
|
||||||
if (account.getJid().getDomainpart().equals("chat.facebook.com")) {
|
switch (account.getJid().getDomainpart()) {
|
||||||
mServerIdentity = Identity.FACEBOOK;
|
case "chat.facebook.com":
|
||||||
|
mServerIdentity = Identity.FACEBOOK;
|
||||||
|
break;
|
||||||
|
case "nimbuzz.com":
|
||||||
|
mServerIdentity = Identity.NIMBUZZ;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mServerIdentity = Identity.UNKNOWN;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
shouldAuthenticate = needsBinding = !account.isOptionSet(Account.OPTION_REGISTER);
|
shouldAuthenticate = needsBinding = !account.isOptionSet(Account.OPTION_REGISTER);
|
||||||
|
@ -718,10 +726,12 @@ public class XmppConnection implements Runnable {
|
||||||
this.streamFeatures = tagReader.readElement(currentTag);
|
this.streamFeatures = tagReader.readElement(currentTag);
|
||||||
if (this.streamFeatures.hasChild("starttls") && !features.encryptionEnabled) {
|
if (this.streamFeatures.hasChild("starttls") && !features.encryptionEnabled) {
|
||||||
sendStartTLS();
|
sendStartTLS();
|
||||||
} else if (this.streamFeatures.hasChild("register")
|
} else if (this.streamFeatures.hasChild("register") && account.isOptionSet(Account.OPTION_REGISTER)) {
|
||||||
&& account.isOptionSet(Account.OPTION_REGISTER)
|
if (features.encryptionEnabled) {
|
||||||
&& features.encryptionEnabled) {
|
sendRegistryRequest();
|
||||||
sendRegistryRequest();
|
} else {
|
||||||
|
throw new IncompatibleServerException();
|
||||||
|
}
|
||||||
} else if (!this.streamFeatures.hasChild("register")
|
} else if (!this.streamFeatures.hasChild("register")
|
||||||
&& account.isOptionSet(Account.OPTION_REGISTER)) {
|
&& account.isOptionSet(Account.OPTION_REGISTER)) {
|
||||||
changeStatus(Account.State.REGISTRATION_NOT_SUPPORTED);
|
changeStatus(Account.State.REGISTRATION_NOT_SUPPORTED);
|
||||||
|
@ -987,7 +997,7 @@ public class XmppConnection implements Runnable {
|
||||||
synchronized (this.disco) {
|
synchronized (this.disco) {
|
||||||
this.disco.clear();
|
this.disco.clear();
|
||||||
}
|
}
|
||||||
mPendingServiceDiscoveries = 0;
|
mPendingServiceDiscoveries = mServerIdentity == Identity.NIMBUZZ ? 1 : 0;
|
||||||
lastDiscoStarted = SystemClock.elapsedRealtime();
|
lastDiscoStarted = SystemClock.elapsedRealtime();
|
||||||
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": starting service discovery");
|
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": starting service discovery");
|
||||||
mXmppConnectionService.scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode());
|
mXmppConnectionService.scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode());
|
||||||
|
@ -998,7 +1008,9 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendServiceDiscoveryInfo(final Jid jid) {
|
private void sendServiceDiscoveryInfo(final Jid jid) {
|
||||||
mPendingServiceDiscoveries++;
|
if (mServerIdentity != Identity.NIMBUZZ) {
|
||||||
|
mPendingServiceDiscoveries++;
|
||||||
|
}
|
||||||
final IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
|
final IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
|
||||||
iq.setTo(jid);
|
iq.setTo(jid);
|
||||||
iq.query("http://jabber.org/protocol/disco#info");
|
iq.query("http://jabber.org/protocol/disco#info");
|
||||||
|
@ -1007,7 +1019,7 @@ public class XmppConnection implements Runnable {
|
||||||
@Override
|
@Override
|
||||||
public void onIqPacketReceived(final Account account, final IqPacket packet) {
|
public void onIqPacketReceived(final Account account, final IqPacket packet) {
|
||||||
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
||||||
boolean advancedStreamFeaturesLoaded = false;
|
boolean advancedStreamFeaturesLoaded;
|
||||||
synchronized (XmppConnection.this.disco) {
|
synchronized (XmppConnection.this.disco) {
|
||||||
final List<Element> elements = packet.query().getChildren();
|
final List<Element> elements = packet.query().getChildren();
|
||||||
final Info info = new Info();
|
final Info info = new Info();
|
||||||
|
@ -1018,7 +1030,9 @@ public class XmppConnection implements Runnable {
|
||||||
String name = element.getAttribute("name");
|
String name = element.getAttribute("name");
|
||||||
if (type != null && category != null) {
|
if (type != null && category != null) {
|
||||||
info.identities.add(new Pair<>(category, type));
|
info.identities.add(new Pair<>(category, type));
|
||||||
if (type.equals("im") && category.equals("server")) {
|
if (mServerIdentity == Identity.UNKNOWN
|
||||||
|
&& type.equals("im")
|
||||||
|
&& category.equals("server")) {
|
||||||
if (name != null && jid.equals(account.getServer())) {
|
if (name != null && jid.equals(account.getServer())) {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "Prosody":
|
case "Prosody":
|
||||||
|
@ -1051,7 +1065,7 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
if (packet.getType() != IqPacket.TYPE.TIMEOUT) {
|
if (packet.getType() != IqPacket.TYPE.TIMEOUT) {
|
||||||
mPendingServiceDiscoveries--;
|
mPendingServiceDiscoveries--;
|
||||||
if (mPendingServiceDiscoveries <= 0) {
|
if (mPendingServiceDiscoveries == 0) {
|
||||||
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": done with service discovery");
|
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": done with service discovery");
|
||||||
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource());
|
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource());
|
||||||
changeStatus(Account.State.ONLINE);
|
changeStatus(Account.State.ONLINE);
|
||||||
|
@ -1409,6 +1423,7 @@ public class XmppConnection implements Runnable {
|
||||||
SLACK,
|
SLACK,
|
||||||
EJABBERD,
|
EJABBERD,
|
||||||
PROSODY,
|
PROSODY,
|
||||||
|
NIMBUZZ,
|
||||||
UNKNOWN
|
UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue