refactor getServerIdentity() to parse disco result directly

This commit is contained in:
Daniel Gultsch 2017-01-12 23:17:52 +01:00
parent c03e3b5965
commit 1876b444fa
1 changed files with 21 additions and 34 deletions

View File

@ -178,8 +178,6 @@ public class XmppConnection implements Runnable {
}
}
private Identity mServerIdentity = Identity.UNKNOWN;
public final OnIqPacketReceived registrationResponseListener = new OnIqPacketReceived() {
@Override
public void onIqPacketReceived(Account account, IqPacket packet) {
@ -253,17 +251,6 @@ public class XmppConnection implements Runnable {
Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": connecting");
features.encryptionEnabled = false;
this.attempt++;
switch (account.getJid().getDomainpart()) {
case "chat.facebook.com":
mServerIdentity = Identity.FACEBOOK;
break;
case "nimbuzz.com":
mServerIdentity = Identity.NIMBUZZ;
break;
default:
mServerIdentity = Identity.UNKNOWN;
break;
}
try {
Socket localSocket;
shouldAuthenticate = needsBinding = !account.isOptionSet(Account.OPTION_REGISTER);
@ -747,7 +734,7 @@ public class XmppConnection implements Runnable {
final Pair<IqPacket, OnIqPacketReceived> packetCallbackDuple = packetCallbacks.get(packet.getId());
// Packets to the server should have responses from the server
if (packetCallbackDuple.first.toServer(account)) {
if (packet.fromServer(account) || mServerIdentity == Identity.FACEBOOK) {
if (packet.fromServer(account)) {
callback = packetCallbackDuple.second;
packetCallbacks.remove(packet.getId());
} else {
@ -1099,7 +1086,7 @@ public class XmppConnection implements Runnable {
this.disco.clear();
}
mPendingServiceDiscoveries.set(0);
mWaitForDisco.set(mServerIdentity != Identity.NIMBUZZ && smVersion != 0);
mWaitForDisco.set(smVersion != 0 && !account.getJid().getDomainpart().equalsIgnoreCase("nimbuzz.com"));
lastDiscoStarted = SystemClock.elapsedRealtime();
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": starting service discovery");
mXmppConnectionService.scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode());
@ -1138,24 +1125,6 @@ public class XmppConnection implements Runnable {
boolean advancedStreamFeaturesLoaded;
synchronized (XmppConnection.this.disco) {
ServiceDiscoveryResult result = new ServiceDiscoveryResult(packet);
for (final ServiceDiscoveryResult.Identity id : result.getIdentities()) {
if (mServerIdentity == Identity.UNKNOWN && id.getType().equals("im") &&
id.getCategory().equals("server") && id.getName() != null &&
jid.equals(account.getServer())) {
switch (id.getName()) {
case "Prosody":
mServerIdentity = Identity.PROSODY;
break;
case "ejabberd":
mServerIdentity = Identity.EJABBERD;
break;
case "Slack-XMPP":
mServerIdentity = Identity.SLACK;
break;
}
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": server name: " + id.getName());
}
}
if (jid.equals(account.getServer())) {
mXmppConnectionService.databaseBackend.insertDiscoveryResult(result);
}
@ -1540,7 +1509,25 @@ public class XmppConnection implements Runnable {
}
public Identity getServerIdentity() {
return mServerIdentity;
synchronized (this.disco) {
ServiceDiscoveryResult result = disco.get(account.getJid().toDomainJid());
if (result == null) {
return Identity.UNKNOWN;
}
for (final ServiceDiscoveryResult.Identity id : result.getIdentities()) {
if (id.getType().equals("im") && id.getCategory().equals("server") && id.getName() != null) {
switch (id.getName()) {
case "Prosody":
return Identity.PROSODY;
case "ejabberd":
return Identity.EJABBERD;
case "Slack-XMPP":
return Identity.SLACK;
}
}
}
}
return Identity.UNKNOWN;
}
private class UnauthorizedException extends IOException {