From 92879048a191c6c065444adabad6aa2651f6dea1 Mon Sep 17 00:00:00 2001 From: peteh Date: Mon, 24 Dec 2018 16:25:35 +0100 Subject: [PATCH] FIX: NullpointerException for messages without content in mqttHandler --- .../asamk/signal/mqtt/MqttJsonMessage.java | 43 +++++++++++++------ .../mqtt/MqttReceiveMessageHandler.java | 2 - 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/asamk/signal/mqtt/MqttJsonMessage.java b/src/main/java/org/asamk/signal/mqtt/MqttJsonMessage.java index 8d22aedd..ef9151b4 100644 --- a/src/main/java/org/asamk/signal/mqtt/MqttJsonMessage.java +++ b/src/main/java/org/asamk/signal/mqtt/MqttJsonMessage.java @@ -80,7 +80,7 @@ public class MqttJsonMessage { if (envelope != null) { result.putPOJO("envelope", new JsonMessageEnvelope(envelope, content)); - message.setSubTopic(findSubTopic(content)); + message.setSubTopic(findSubTopic(envelope, content)); } try { message.setContent(jsonProcessor.writeValueAsString(result)); @@ -102,22 +102,37 @@ public class MqttJsonMessage { * Finds the designated type of the message and defines the subtopic for the mqtt broker. * * Possible subtopics: data, synq, call, typinginfo, receipt, other + * + * @param envelope * @param content * @return */ - private static String findSubTopic(final SignalServiceContent content) { - if (content.getDataMessage().isPresent()) { - return SUBTOPIC_DATA; - } else if (content.getSyncMessage().isPresent()) { - return SUBTOPIC_SYNC; - } else if (content.getCallMessage().isPresent()) { - return SUBTOPIC_CALL; - } else if (content.getTypingMessage().isPresent()) { - return SUBTOPIC_TYPING_INFO; - } else if (content.getReceiptMessage().isPresent()) { - return SUBTOPIC_RECEIPT; - } else { - return SUBTOPIC_OTHER; + private static String findSubTopic(final SignalServiceEnvelope envelope, final SignalServiceContent content) { + if(content !=null) { + if (content.getDataMessage().isPresent()) { + return SUBTOPIC_DATA; + } else if (content.getSyncMessage().isPresent()) { + return SUBTOPIC_SYNC; + } else if (content.getCallMessage().isPresent()) { + return SUBTOPIC_CALL; + } else if (content.getTypingMessage().isPresent()) { + return SUBTOPIC_TYPING_INFO; + } else if (content.getReceiptMessage().isPresent()) { + return SUBTOPIC_RECEIPT; + } else { + return SUBTOPIC_OTHER; + } + } + else + { + if(envelope.isReceipt()) + { + return SUBTOPIC_RECEIPT; + } + else + { + return SUBTOPIC_OTHER; + } } } } diff --git a/src/main/java/org/asamk/signal/mqtt/MqttReceiveMessageHandler.java b/src/main/java/org/asamk/signal/mqtt/MqttReceiveMessageHandler.java index 721bf842..69961a8f 100644 --- a/src/main/java/org/asamk/signal/mqtt/MqttReceiveMessageHandler.java +++ b/src/main/java/org/asamk/signal/mqtt/MqttReceiveMessageHandler.java @@ -57,8 +57,6 @@ public class MqttReceiveMessageHandler implements Manager.ReceiveMessageHandler @Override public void handleMessage(final SignalServiceEnvelope envelope, final SignalServiceContent decryptedContent, final Throwable e) { - System.out.println("Message Received from " + decryptedContent.getSender()); - MqttJsonMessage msg = MqttJsonMessage.build(envelope, decryptedContent, e); String topic = DEFAULT_TOPIC + stripIllegalTopicCharacters(manager.getUsername() + "/" + msg.getSubTopic());