issue ping after push was received

This commit is contained in:
Daniel Gultsch 2016-10-06 18:09:55 +02:00
parent 9f060f477f
commit 40e5090bdd
2 changed files with 13 additions and 1 deletions

View file

@ -529,6 +529,7 @@ public class XmppConnectionService extends Service {
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
final String action = intent == null ? null : intent.getAction(); final String action = intent == null ? null : intent.getAction();
String pushedAccountHash = null;
boolean interactive = false; boolean interactive = false;
if (action != null) { if (action != null) {
final Conversation c = findConversationByUuid(intent.getStringExtra("uuid")); final Conversation c = findConversationByUuid(intent.getStringExtra("uuid"));
@ -596,6 +597,7 @@ public class XmppConnectionService extends Service {
break; break;
case ACTION_GCM_MESSAGE_RECEIVED: case ACTION_GCM_MESSAGE_RECEIVED:
Log.d(Config.LOGTAG,"gcm push message arrived in service. extras="+intent.getExtras()); Log.d(Config.LOGTAG,"gcm push message arrived in service. extras="+intent.getExtras());
pushedAccountHash = intent.getStringExtra("account");
break; break;
} }
} }
@ -634,7 +636,7 @@ public class XmppConnectionService extends Service {
} }
} else { } else {
pingCandidates.add(account); pingCandidates.add(account);
if (msToNextPing <= 0) { if (msToNextPing <= 0 || CryptoHelper.getAccountFingerprint(account).equals(pushedAccountHash)) {
pingNow = true; pingNow = true;
} else { } else {
this.scheduleWakeUpCall((int) (msToNextPing / 1000), account.getUuid().hashCode()); this.scheduleWakeUpCall((int) (msToNextPing / 1000), account.getUuid().hashCode());

View file

@ -25,6 +25,7 @@ import java.util.regex.Pattern;
import eu.siacs.conversations.Config; import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.jid.Jid;
@ -204,6 +205,15 @@ public final class CryptoHelper {
return prettifyFingerprintCert(bytesToHex(fingerprint)); return prettifyFingerprintCert(bytesToHex(fingerprint));
} }
public static String getAccountFingerprint(Account account) {
try {
MessageDigest md = MessageDigest.getInstance("SHA256");
return bytesToHex(md.digest(account.getJid().toBareJid().toString().getBytes("UTF-8")));
} catch (Exception e) {
return "";
}
}
public static int encryptionTypeToText(int encryption) { public static int encryptionTypeToText(int encryption) {
switch (encryption) { switch (encryption) {
case Message.ENCRYPTION_OTR: case Message.ENCRYPTION_OTR: