aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2017-01-12 23:17:52 +0100
committerDaniel Gultsch <daniel@gultsch.de>2017-01-12 23:17:52 +0100
commit1876b444fa6c8912e77debcc6f8dd0fc176602d8 (patch)
treee4c6444ab1a0f929a7c85a83444aa5301c6cba97
parentc03e3b59652678721353a290449d39996faeb8fa (diff)
refactor getServerIdentity() to parse disco result directly
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java55
1 files changed, 21 insertions, 34 deletions
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
index 7cd4707d..053e25c3 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -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 {