- private SignalServiceContent decryptMessage(SignalServiceEnvelope envelope) throws InvalidMetadataMessageException, ProtocolInvalidMessageException, ProtocolDuplicateMessageException, ProtocolLegacyMessageException, ProtocolInvalidKeyIdException, InvalidMetadataVersionException, ProtocolInvalidVersionException, ProtocolNoSessionException, ProtocolInvalidKeyException, ProtocolUntrustedIdentityException, SelfSendException, UnsupportedDataMessageException {
- SignalServiceCipher cipher = new SignalServiceCipher(getSelfAddress(), account.getSignalProtocolStore(), Utils.getCertificateValidator());
+ private SendMessageResult sendSelfMessage(SignalServiceDataMessage message) throws IOException {
+ SignalServiceMessageSender messageSender = createMessageSender();
+
+ SignalServiceAddress recipient = account.getSelfAddress();
+
+ final Optional<UnidentifiedAccessPair> unidentifiedAccess = unidentifiedAccessHelper.getAccessFor(recipient);
+ SentTranscriptMessage transcript = new SentTranscriptMessage(Optional.of(recipient),
+ message.getTimestamp(),
+ message,
+ message.getExpiresInSeconds(),
+ Collections.singletonMap(recipient, unidentifiedAccess.isPresent()),
+ false);
+ SignalServiceSyncMessage syncMessage = SignalServiceSyncMessage.forSentTranscript(transcript);
+
+ try {
+ long startTime = System.currentTimeMillis();
+ messageSender.sendMessage(syncMessage, unidentifiedAccess);
+ return SendMessageResult.success(recipient,
+ unidentifiedAccess.isPresent(),
+ false,
+ System.currentTimeMillis() - startTime);
+ } catch (UntrustedIdentityException e) {
+ account.getSignalProtocolStore()
+ .saveIdentity(resolveSignalServiceAddress(e.getIdentifier()),
+ e.getIdentityKey(),
+ TrustLevel.UNTRUSTED);
+ return SendMessageResult.identityFailure(recipient, e.getIdentityKey());
+ }
+ }
+
+ private SendMessageResult sendMessage(
+ SignalServiceAddress address, SignalServiceDataMessage message
+ ) throws IOException {
+ SignalServiceMessageSender messageSender = createMessageSender();
+
+ try {
+ return messageSender.sendMessage(address, unidentifiedAccessHelper.getAccessFor(address), message);
+ } catch (UntrustedIdentityException e) {
+ account.getSignalProtocolStore()
+ .saveIdentity(resolveSignalServiceAddress(e.getIdentifier()),
+ e.getIdentityKey(),
+ TrustLevel.UNTRUSTED);
+ return SendMessageResult.identityFailure(address, e.getIdentityKey());
+ }
+ }
+
+ private SignalServiceContent decryptMessage(SignalServiceEnvelope envelope) throws InvalidMetadataMessageException, ProtocolInvalidMessageException, ProtocolDuplicateMessageException, ProtocolLegacyMessageException, ProtocolInvalidKeyIdException, InvalidMetadataVersionException, ProtocolInvalidVersionException, ProtocolNoSessionException, ProtocolInvalidKeyException, SelfSendException, UnsupportedDataMessageException, org.whispersystems.libsignal.UntrustedIdentityException {
+ SignalServiceCipher cipher = new SignalServiceCipher(account.getSelfAddress(),
+ account.getSignalProtocolStore(),
+ Utils.getCertificateValidator());