From: AsamK Date: Sat, 16 Sep 2023 10:00:55 +0000 (+0200) Subject: Improve robustness in receiving messages X-Git-Tag: v0.12.2~12 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/a7744e837c137d03c79e04bdfa2d7ad9264b692c?hp=e5aa10a7306252bfdbc07d70f30471c1df663cea Improve robustness in receiving messages --- diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java index 9ffee5c8..cad112b5 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java @@ -137,13 +137,17 @@ public final class IncomingMessageHandler { final Manager.ReceiveMessageHandler handler ) { final var actions = new ArrayList(); - if (envelope.hasSourceServiceId()) { - // Store uuid if we don't have it already - // uuid in envelope is sent by server - account.getRecipientTrustedResolver().resolveRecipientTrusted(envelope.getSourceAddress()); - } SignalServiceContent content = null; Exception exception = null; + try { + if (envelope.hasSourceServiceId()) { + // Store uuid if we don't have it already + // uuid in envelope is sent by server + account.getRecipientTrustedResolver().resolveRecipientTrusted(envelope.getSourceAddress()); + } + } catch (Exception e) { + exception = e; + } if (!envelope.isReceipt()) { try { final var cipherResult = dependencies.getCipher() diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java index 2f783467..0c003682 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java @@ -205,41 +205,49 @@ public class ReceiveHelper { backOffCounter = 0; if (returnOnTimeout) return; continue; + } catch (Exception e) { + logger.error("Unknown error when receiving messages", e); + continue; } - final var result = context.getIncomingMessageHandler().handleEnvelope(envelope, receiveConfig, handler); - for (final var h : result.first()) { - final var existingAction = queuedActions.get(h); - if (existingAction == null) { - queuedActions.put(h, h); - } else { - existingAction.mergeOther(h); + try { + final var result = context.getIncomingMessageHandler().handleEnvelope(envelope, receiveConfig, handler); + for (final var h : result.first()) { + final var existingAction = queuedActions.get(h); + if (existingAction == null) { + queuedActions.put(h, h); + } else { + existingAction.mergeOther(h); + } } - } - final var exception = result.second(); + final var exception = result.second(); - if (hasCaughtUpWithOldMessages) { - handleQueuedActions(queuedActions.keySet()); - queuedActions.clear(); - } - if (cachedMessage[0] != null) { - if (exception instanceof UntrustedIdentityException) { - logger.debug("Keeping message with untrusted identity in message cache"); - final var address = ((UntrustedIdentityException) exception).getSender(); - if (!envelope.hasSourceServiceId() && address.uuid().isPresent()) { - final var recipientId = account.getRecipientResolver() - .resolveRecipient(ACI.from(address.uuid().get())); - try { - cachedMessage[0] = account.getMessageCache().replaceSender(cachedMessage[0], recipientId); - } catch (IOException ioException) { - logger.warn("Failed to move cached message to recipient folder: {}", - ioException.getMessage(), - ioException); + if (hasCaughtUpWithOldMessages) { + handleQueuedActions(queuedActions.keySet()); + queuedActions.clear(); + } + if (cachedMessage[0] != null) { + if (exception instanceof UntrustedIdentityException) { + logger.debug("Keeping message with untrusted identity in message cache"); + final var address = ((UntrustedIdentityException) exception).getSender(); + if (!envelope.hasSourceServiceId() && address.uuid().isPresent()) { + final var recipientId = account.getRecipientResolver() + .resolveRecipient(ACI.from(address.uuid().get())); + try { + cachedMessage[0] = account.getMessageCache() + .replaceSender(cachedMessage[0], recipientId); + } catch (IOException ioException) { + logger.warn("Failed to move cached message to recipient folder: {}", + ioException.getMessage(), + ioException); + } } + } else { + cachedMessage[0].delete(); } - } else { - cachedMessage[0].delete(); } + } catch (Exception e) { + logger.error("Unknown error when handling messages", e); } } }