refactor getServerIdentity() to parse disco result directly
This commit is contained in:
parent
c03e3b5965
commit
1876b444fa
|
@ -178,8 +178,6 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Identity mServerIdentity = Identity.UNKNOWN;
|
|
||||||
|
|
||||||
public final OnIqPacketReceived registrationResponseListener = new OnIqPacketReceived() {
|
public final OnIqPacketReceived registrationResponseListener = new OnIqPacketReceived() {
|
||||||
@Override
|
@Override
|
||||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
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");
|
Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": connecting");
|
||||||
features.encryptionEnabled = false;
|
features.encryptionEnabled = false;
|
||||||
this.attempt++;
|
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 {
|
try {
|
||||||
Socket localSocket;
|
Socket localSocket;
|
||||||
shouldAuthenticate = needsBinding = !account.isOptionSet(Account.OPTION_REGISTER);
|
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());
|
final Pair<IqPacket, OnIqPacketReceived> packetCallbackDuple = packetCallbacks.get(packet.getId());
|
||||||
// Packets to the server should have responses from the server
|
// Packets to the server should have responses from the server
|
||||||
if (packetCallbackDuple.first.toServer(account)) {
|
if (packetCallbackDuple.first.toServer(account)) {
|
||||||
if (packet.fromServer(account) || mServerIdentity == Identity.FACEBOOK) {
|
if (packet.fromServer(account)) {
|
||||||
callback = packetCallbackDuple.second;
|
callback = packetCallbackDuple.second;
|
||||||
packetCallbacks.remove(packet.getId());
|
packetCallbacks.remove(packet.getId());
|
||||||
} else {
|
} else {
|
||||||
|
@ -1099,7 +1086,7 @@ public class XmppConnection implements Runnable {
|
||||||
this.disco.clear();
|
this.disco.clear();
|
||||||
}
|
}
|
||||||
mPendingServiceDiscoveries.set(0);
|
mPendingServiceDiscoveries.set(0);
|
||||||
mWaitForDisco.set(mServerIdentity != Identity.NIMBUZZ && smVersion != 0);
|
mWaitForDisco.set(smVersion != 0 && !account.getJid().getDomainpart().equalsIgnoreCase("nimbuzz.com"));
|
||||||
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());
|
||||||
|
@ -1138,24 +1125,6 @@ public class XmppConnection implements Runnable {
|
||||||
boolean advancedStreamFeaturesLoaded;
|
boolean advancedStreamFeaturesLoaded;
|
||||||
synchronized (XmppConnection.this.disco) {
|
synchronized (XmppConnection.this.disco) {
|
||||||
ServiceDiscoveryResult result = new ServiceDiscoveryResult(packet);
|
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())) {
|
if (jid.equals(account.getServer())) {
|
||||||
mXmppConnectionService.databaseBackend.insertDiscoveryResult(result);
|
mXmppConnectionService.databaseBackend.insertDiscoveryResult(result);
|
||||||
}
|
}
|
||||||
|
@ -1540,7 +1509,25 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Identity getServerIdentity() {
|
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 {
|
private class UnauthorizedException extends IOException {
|
||||||
|
|
Loading…
Reference in a new issue