mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-30 17:26:17 +00:00
Reorganize session store load/store operations.
This commit is contained in:
@@ -47,12 +47,12 @@ import org.whispersystems.libaxolotl.InvalidVersionException;
|
||||
import org.whispersystems.libaxolotl.LegacyMessageException;
|
||||
import org.whispersystems.libaxolotl.SessionCipher;
|
||||
import org.whispersystems.libaxolotl.protocol.WhisperMessage;
|
||||
import org.whispersystems.libaxolotl.state.SessionStore;
|
||||
import org.whispersystems.textsecure.crypto.MasterSecret;
|
||||
import org.whispersystems.textsecure.crypto.SessionCipherFactory;
|
||||
import org.whispersystems.textsecure.push.IncomingPushMessage;
|
||||
import org.whispersystems.textsecure.storage.RecipientDevice;
|
||||
import org.whispersystems.textsecure.storage.Session;
|
||||
import org.whispersystems.textsecure.storage.SessionRecordV2;
|
||||
import org.whispersystems.textsecure.storage.TextSecureSessionStore;
|
||||
import org.whispersystems.textsecure.util.Hex;
|
||||
import org.whispersystems.textsecure.util.Util;
|
||||
|
||||
@@ -197,11 +197,12 @@ public class DecryptingQueue {
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
SessionStore sessionStore = new TextSecureSessionStore(context, masterSecret);
|
||||
Recipients recipients = RecipientFactory.getRecipientsFromString(context, message.getSource(), false);
|
||||
Recipient recipient = recipients.getPrimaryRecipient();
|
||||
RecipientDevice recipientDevice = new RecipientDevice(recipient.getRecipientId(), message.getSourceDevice());
|
||||
|
||||
if (!SessionRecordV2.hasSession(context, masterSecret, recipientDevice)) {
|
||||
if (!sessionStore.contains(recipientDevice.getRecipientId(), recipientDevice.getDeviceId())) {
|
||||
sendResult(PushReceiver.RESULT_NO_SESSION);
|
||||
return;
|
||||
}
|
||||
@@ -211,18 +212,12 @@ public class DecryptingQueue {
|
||||
|
||||
message = message.withBody(plaintextBody);
|
||||
sendResult(PushReceiver.RESULT_OK);
|
||||
} catch (InvalidMessageException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
sendResult(PushReceiver.RESULT_DECRYPT_FAILED);
|
||||
} catch (RecipientFormattingException e) {
|
||||
} catch (InvalidMessageException | LegacyMessageException | RecipientFormattingException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
sendResult(PushReceiver.RESULT_DECRYPT_FAILED);
|
||||
} catch (DuplicateMessageException e) {
|
||||
Log.w("DecryptingQueue", e);
|
||||
sendResult(PushReceiver.RESULT_DECRYPT_DUPLICATE);
|
||||
} catch (LegacyMessageException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
sendResult(PushReceiver.RESULT_DECRYPT_FAILED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -270,6 +265,7 @@ public class DecryptingQueue {
|
||||
|
||||
try {
|
||||
String messageFrom = pdu.getFrom().getString();
|
||||
SessionStore sessionStore = new TextSecureSessionStore(context, masterSecret);
|
||||
Recipients recipients = RecipientFactory.getRecipientsFromString(context, messageFrom, false);
|
||||
Recipient recipient = recipients.getPrimaryRecipient();
|
||||
RecipientDevice recipientDevice = new RecipientDevice(recipient.getRecipientId(), RecipientDevice.DEFAULT_DEVICE_ID);
|
||||
@@ -281,7 +277,7 @@ public class DecryptingQueue {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Session.hasSession(context, masterSecret, recipient)) {
|
||||
if (!sessionStore.contains(recipientDevice.getRecipientId(), recipientDevice.getDeviceId())) {
|
||||
Log.w("DecryptingQueue", "No such recipient session for MMS...");
|
||||
database.markAsNoSession(messageId, threadId);
|
||||
return;
|
||||
@@ -316,24 +312,15 @@ public class DecryptingQueue {
|
||||
Log.w("DecryptingQueue", "Successfully decrypted MMS!");
|
||||
database.insertSecureDecryptedMessageInbox(masterSecret, new IncomingMediaMessage(plaintextPdu), threadId);
|
||||
database.delete(messageId);
|
||||
} catch (RecipientFormattingException rfe) {
|
||||
} catch (RecipientFormattingException | IOException | MmsException | InvalidMessageException rfe) {
|
||||
Log.w("DecryptingQueue", rfe);
|
||||
database.markAsDecryptFailed(messageId, threadId);
|
||||
} catch (InvalidMessageException ime) {
|
||||
Log.w("DecryptingQueue", ime);
|
||||
database.markAsDecryptFailed(messageId, threadId);
|
||||
} catch (DuplicateMessageException dme) {
|
||||
Log.w("DecryptingQueue", dme);
|
||||
database.markAsDecryptDuplicate(messageId, threadId);
|
||||
} catch (LegacyMessageException lme) {
|
||||
Log.w("DecryptingQueue", lme);
|
||||
database.markAsLegacyVersion(messageId, threadId);
|
||||
} catch (MmsException mme) {
|
||||
Log.w("DecryptingQueue", mme);
|
||||
database.markAsDecryptFailed(messageId, threadId);
|
||||
} catch (IOException e) {
|
||||
Log.w("DecryptingQueue", e);
|
||||
database.markAsDecryptFailed(messageId, threadId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -373,6 +360,7 @@ public class DecryptingQueue {
|
||||
String plaintextBody;
|
||||
|
||||
try {
|
||||
SessionStore sessionStore = new TextSecureSessionStore(context, masterSecret);
|
||||
Recipients recipients = RecipientFactory.getRecipientsFromString(context, originator, false);
|
||||
Recipient recipient = recipients.getPrimaryRecipient();
|
||||
RecipientDevice recipientDevice = new RecipientDevice(recipient.getRecipientId(), deviceId);
|
||||
@@ -380,7 +368,7 @@ public class DecryptingQueue {
|
||||
SmsTransportDetails transportDetails = new SmsTransportDetails();
|
||||
byte[] decodedCiphertext = transportDetails.getDecodedMessage(body.getBytes());
|
||||
|
||||
if (!Session.hasSession(context, masterSecret, recipient)) {
|
||||
if (!sessionStore.contains(recipientDevice.getRecipientId(), recipientDevice.getDeviceId())) {
|
||||
if (WhisperMessage.isLegacy(decodedCiphertext)) database.markAsLegacyVersion(messageId);
|
||||
else database.markAsNoSession(messageId);
|
||||
return;
|
||||
@@ -393,11 +381,11 @@ public class DecryptingQueue {
|
||||
|
||||
if (isEndSession &&
|
||||
"TERMINATE".equals(plaintextBody) &&
|
||||
SessionRecordV2.hasSession(context, masterSecret, recipientDevice))
|
||||
sessionStore.contains(recipientDevice.getRecipientId(), recipientDevice.getDeviceId()))
|
||||
{
|
||||
Session.abortSessionFor(context, recipient);
|
||||
sessionStore.delete(recipientDevice.getRecipientId(), recipientDevice.getDeviceId());
|
||||
}
|
||||
} catch (InvalidMessageException e) {
|
||||
} catch (InvalidMessageException | IOException | RecipientFormattingException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
database.markAsDecryptFailed(messageId);
|
||||
return;
|
||||
@@ -405,14 +393,6 @@ public class DecryptingQueue {
|
||||
Log.w("DecryptionQueue", lme);
|
||||
database.markAsLegacyVersion(messageId);
|
||||
return;
|
||||
} catch (RecipientFormattingException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
database.markAsDecryptFailed(messageId);
|
||||
return;
|
||||
} catch (IOException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
database.markAsDecryptFailed(messageId);
|
||||
return;
|
||||
} catch (DuplicateMessageException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
database.markAsDecryptDuplicate(messageId);
|
||||
|
||||
Reference in New Issue
Block a user