Refactor axolotl send processing/caching flow

This commit is contained in:
Andreas Straub 2015-07-20 23:13:28 +02:00
parent 8be0e8a27d
commit d2845e9ac1
3 changed files with 16 additions and 17 deletions

View file

@ -68,7 +68,7 @@ public class AxolotlService {
private final SQLiteAxolotlStore axolotlStore; private final SQLiteAxolotlStore axolotlStore;
private final SessionMap sessions; private final SessionMap sessions;
private final Map<Jid, Set<Integer>> deviceIds; private final Map<Jid, Set<Integer>> deviceIds;
private final Map<String, MessagePacket> messageCache; private final Map<String, XmppAxolotlMessage> messageCache;
private final FetchStatusMap fetchStatusMap; private final FetchStatusMap fetchStatusMap;
private final SerialSingleThreadExecutor executor; private final SerialSingleThreadExecutor executor;
@ -1085,14 +1085,13 @@ public class AxolotlService {
executor.execute(new Runnable() { executor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
MessagePacket packet = mXmppConnectionService.getMessageGenerator() XmppAxolotlMessage axolotlMessage = encrypt(message);
.generateAxolotlChat(message); if (axolotlMessage == null) {
if (packet == null) {
mXmppConnectionService.markMessage(message, Message.STATUS_SEND_FAILED); mXmppConnectionService.markMessage(message, Message.STATUS_SEND_FAILED);
//mXmppConnectionService.updateConversationUi(); //mXmppConnectionService.updateConversationUi();
} else { } else {
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account)+"Generated message, caching: " + message.getUuid()); Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account)+"Generated message, caching: " + message.getUuid());
messageCache.put(message.getUuid(), packet); messageCache.put(message.getUuid(), axolotlMessage);
mXmppConnectionService.resendMessage(message,delay); mXmppConnectionService.resendMessage(message,delay);
} }
} }
@ -1108,15 +1107,15 @@ public class AxolotlService {
} }
} }
public MessagePacket fetchPacketFromCache(Message message) { public XmppAxolotlMessage fetchAxolotlMessageFromCache(Message message) {
MessagePacket packet = messageCache.get(message.getUuid()); XmppAxolotlMessage axolotlMessage = messageCache.get(message.getUuid());
if (packet != null) { if (axolotlMessage != null) {
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account)+"Cache hit: " + message.getUuid()); Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account)+"Cache hit: " + message.getUuid());
messageCache.remove(message.getUuid()); messageCache.remove(message.getUuid());
} else { } else {
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account)+"Cache miss: " + message.getUuid()); Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account)+"Cache miss: " + message.getUuid());
} }
return packet; return axolotlMessage;
} }
public XmppAxolotlMessage.XmppAxolotlPlaintextMessage processReceiving(XmppAxolotlMessage message) { public XmppAxolotlMessage.XmppAxolotlPlaintextMessage processReceiving(XmppAxolotlMessage message) {

View file

@ -62,11 +62,8 @@ public class MessageGenerator extends AbstractGenerator {
delay.setAttribute("stamp", mDateFormat.format(date)); delay.setAttribute("stamp", mDateFormat.format(date));
} }
public MessagePacket generateAxolotlChat(Message message) { public MessagePacket generateAxolotlChat(Message message, XmppAxolotlMessage axolotlMessage) {
MessagePacket packet = preparePacket(message); MessagePacket packet = preparePacket(message);
AxolotlService service = message.getConversation().getAccount().getAxolotlService();
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(message.getConversation().getAccount())+"Submitting message to axolotl service for send processing...");
XmppAxolotlMessage axolotlMessage = service.encrypt(message);
if (axolotlMessage == null) { if (axolotlMessage == null) {
return null; return null;
} }

View file

@ -52,6 +52,7 @@ import de.duenndns.ssl.MemorizingTrustManager;
import eu.siacs.conversations.Config; import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.PgpEngine; import eu.siacs.conversations.crypto.PgpEngine;
import eu.siacs.conversations.crypto.axolotl.XmppAxolotlMessage;
import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Blockable; import eu.siacs.conversations.entities.Blockable;
import eu.siacs.conversations.entities.Bookmark; import eu.siacs.conversations.entities.Bookmark;
@ -765,10 +766,12 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
break; break;
} }
} else { } else {
packet = account.getAxolotlService().fetchPacketFromCache(message); XmppAxolotlMessage axolotlMessage = account.getAxolotlService().fetchAxolotlMessageFromCache(message);
if (packet == null) { if (axolotlMessage == null) {
account.getAxolotlService().prepareMessage(message,delay); account.getAxolotlService().prepareMessage(message,delay);
message.setAxolotlFingerprint(account.getAxolotlService().getOwnPublicKey().getFingerprint().replaceAll("\\s", "")); message.setAxolotlFingerprint(account.getAxolotlService().getOwnPublicKey().getFingerprint().replaceAll("\\s", ""));
} else {
packet = mMessageGenerator.generateAxolotlChat(message, axolotlMessage);
} }
} }
break; break;
@ -839,7 +842,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
@Override @Override
public void onMessageFound(Message message) { public void onMessageFound(Message message) {
resendMessage(message,true); resendMessage(message, true);
} }
}); });
} }
@ -1851,7 +1854,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
} else { } else {
MessagePacket outPacket = mMessageGenerator.generateOtrChat(message); MessagePacket outPacket = mMessageGenerator.generateOtrChat(message);
if (outPacket != null) { if (outPacket != null) {
mMessageGenerator.addDelay(outPacket,message.getTimeSent()); mMessageGenerator.addDelay(outPacket, message.getTimeSent());
message.setStatus(Message.STATUS_SEND); message.setStatus(Message.STATUS_SEND);
databaseBackend.updateMessage(message); databaseBackend.updateMessage(message);
sendMessagePacket(account, outPacket); sendMessagePacket(account, outPacket);