import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
-import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
+import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage;
-import org.whispersystems.signalservice.api.push.SignalServiceAddress;
+import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
import java.util.ArrayList;
import java.util.List;
e.printStackTrace();
}
} else if (content != null) {
- if (content.getDataMessage().isPresent()) {
+ if (content.getReceiptMessage().isPresent()) {
+ final SignalServiceReceiptMessage receiptMessage = content.getReceiptMessage().get();
+ if (receiptMessage.isDeliveryReceipt()) {
+ final String sender = !envelope.isUnidentifiedSender() && envelope.hasSource() ? envelope.getSourceE164().get() : content.getSender().getNumber().get();
+ for (long timestamp : receiptMessage.getTimestamps()) {
+ try {
+ conn.sendSignal(new Signal.ReceiptReceived(
+ objectPath,
+ timestamp,
+ sender
+ ));
+ } catch (DBusException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ } else if (content.getDataMessage().isPresent()) {
SignalServiceDataMessage message = content.getDataMessage().get();
- if (message.getBody().isPresent())
- System.out.println(message.getBody().get());
-
if (!message.isEndSession() &&
!(message.getGroupContext().isPresent() &&
message.getGroupContext().get().getGroupV1Type() != SignalServiceGroup.Type.DELIVER)) {
+++ /dev/null
-package org.asamk.signal;
-
-class JsonError {
-
- String message;
-
- JsonError(Throwable exception) {
- this.message = exception.getMessage();
- }
-}
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.asamk.signal.json.JsonError;
+import org.asamk.signal.json.JsonMessageEnvelope;
import org.asamk.signal.manager.Manager;
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
package org.asamk.signal.commands;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
import net.sourceforge.argparse4j.impl.Arguments;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;
import org.asamk.Signal;
import org.asamk.signal.JsonReceiveMessageHandler;
import org.asamk.signal.ReceiveMessageHandler;
+import org.asamk.signal.json.JsonMessageEnvelope;
import org.asamk.signal.manager.Manager;
import org.asamk.signal.util.DateUtils;
import org.freedesktop.dbus.DBusConnection;
}
public int handleCommand(final Namespace ns, final Signal signal, DBusConnection dbusconnection) {
- if (dbusconnection != null) {
- try {
- dbusconnection.addSigHandler(Signal.MessageReceived.class, messageReceived -> {
+ final ObjectMapper jsonProcessor;
+ if (ns.getBoolean("json")) {
+ jsonProcessor = new ObjectMapper();
+ jsonProcessor.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // disable autodetect
+ jsonProcessor.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
+ } else {
+ jsonProcessor = null;
+ }
+ try {
+ dbusconnection.addSigHandler(Signal.MessageReceived.class, messageReceived -> {
+ if (jsonProcessor != null) {
+ JsonMessageEnvelope envelope = new JsonMessageEnvelope(messageReceived);
+ ObjectNode result = jsonProcessor.createObjectNode();
+ result.putPOJO("envelope", envelope);
+ try {
+ jsonProcessor.writeValue(System.out, result);
+ System.out.println();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
System.out.print(String.format("Envelope from: %s\nTimestamp: %s\nBody: %s\n",
messageReceived.getSender(), DateUtils.formatTimestamp(messageReceived.getTimestamp()), messageReceived.getMessage()));
if (messageReceived.getGroupId().length > 0) {
}
}
System.out.println();
- });
- dbusconnection.addSigHandler(Signal.ReceiptReceived.class,
- receiptReceived -> System.out.print(String.format("Receipt from: %s\nTimestamp: %s\n",
- receiptReceived.getSender(), DateUtils.formatTimestamp(receiptReceived.getTimestamp()))));
- dbusconnection.addSigHandler(Signal.SyncMessageReceived.class, syncReceived -> {
+ }
+ });
+
+ dbusconnection.addSigHandler(Signal.ReceiptReceived.class,
+ receiptReceived -> {
+ if (jsonProcessor != null) {
+ JsonMessageEnvelope envelope = new JsonMessageEnvelope(receiptReceived);
+ ObjectNode result = jsonProcessor.createObjectNode();
+ result.putPOJO("envelope", envelope);
+ try {
+ jsonProcessor.writeValue(System.out, result);
+ System.out.println();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
+ System.out.print(String.format("Receipt from: %s\nTimestamp: %s\n",
+ receiptReceived.getSender(), DateUtils.formatTimestamp(receiptReceived.getTimestamp())));
+ }
+ });
+
+ dbusconnection.addSigHandler(Signal.SyncMessageReceived.class, syncReceived -> {
+ if (jsonProcessor != null) {
+ JsonMessageEnvelope envelope = new JsonMessageEnvelope(syncReceived);
+ ObjectNode result = jsonProcessor.createObjectNode();
+ result.putPOJO("envelope", envelope);
+ try {
+ jsonProcessor.writeValue(System.out, result);
+ System.out.println();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
System.out.print(String.format("Sync Envelope from: %s to: %s\nTimestamp: %s\nBody: %s\n",
syncReceived.getSource(), syncReceived.getDestination(), DateUtils.formatTimestamp(syncReceived.getTimestamp()), syncReceived.getMessage()));
if (syncReceived.getGroupId().length > 0) {
}
}
System.out.println();
- });
- } catch (UnsatisfiedLinkError e) {
- System.err.println("Missing native library dependency for dbus service: " + e.getMessage());
- return 1;
- } catch (DBusException e) {
- e.printStackTrace();
- return 1;
- }
- while (true) {
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e) {
- return 0;
}
+ });
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Missing native library dependency for dbus service: " + e.getMessage());
+ return 1;
+ } catch (DBusException e) {
+ e.printStackTrace();
+ return 1;
+ }
+ while (true) {
+ try {
+ Thread.sleep(10000);
+ } catch (InterruptedException e) {
+ return 0;
}
}
- return 0;
}
@Override
-package org.asamk.signal;
+package org.asamk.signal.json;
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer;
}
}
}
+
+ JsonAttachment(String filename) {
+ this.filename = filename;
+ }
}
-package org.asamk.signal;
+package org.asamk.signal.json;
import org.whispersystems.signalservice.api.messages.calls.AnswerMessage;
import org.whispersystems.signalservice.api.messages.calls.BusyMessage;
-package org.asamk.signal;
+package org.asamk.signal.json;
+import org.asamk.Signal;
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
class JsonDataMessage {
this.attachments = new ArrayList<>();
}
}
+
+ public JsonDataMessage(Signal.MessageReceived messageReceived) {
+ timestamp = messageReceived.getTimestamp();
+ message = messageReceived.getMessage();
+ groupInfo = new JsonGroupInfo(messageReceived.getGroupId());
+ attachments = messageReceived.getAttachments()
+ .stream()
+ .map(JsonAttachment::new)
+ .collect(Collectors.toList());
+ }
+
+ public JsonDataMessage(Signal.SyncMessageReceived messageReceived) {
+ timestamp = messageReceived.getTimestamp();
+ message = messageReceived.getMessage();
+ groupInfo = new JsonGroupInfo(messageReceived.getGroupId());
+ attachments = messageReceived.getAttachments()
+ .stream()
+ .map(JsonAttachment::new)
+ .collect(Collectors.toList());
+ }
}
--- /dev/null
+package org.asamk.signal.json;
+
+public class JsonError {
+
+ String message;
+
+ public JsonError(Throwable exception) {
+ this.message = exception.getMessage();
+ }
+}
-package org.asamk.signal;
+package org.asamk.signal.json;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
}
this.type = groupInfo.getType().toString();
}
+
+ JsonGroupInfo(byte[] groupId) {
+ this.groupId = Base64.encodeBytes(groupId);
+ }
}
-package org.asamk.signal;
+package org.asamk.signal.json;
+import org.asamk.Signal;
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
-class JsonMessageEnvelope {
+public class JsonMessageEnvelope {
String source;
int sourceDevice;
}
}
}
+
+ public JsonMessageEnvelope(Signal.MessageReceived messageReceived) {
+ source = messageReceived.getSender();
+ timestamp = messageReceived.getTimestamp();
+ dataMessage = new JsonDataMessage(messageReceived);
+ }
+
+ public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) {
+ source = receiptReceived.getSender();
+ timestamp = receiptReceived.getTimestamp();
+ isReceipt = true;
+ }
+
+ public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) {
+ source = messageReceived.getSource();
+ timestamp = messageReceived.getTimestamp();
+ syncMessage = new JsonSyncMessage(messageReceived);
+ }
}
-package org.asamk.signal;
+package org.asamk.signal.json;
import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
-package org.asamk.signal;
+package org.asamk.signal.json;
+import org.asamk.Signal;
import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage;
class JsonSyncDataMessage extends JsonDataMessage {
this.destination = transcriptMessage.getDestination().get().getNumber().get();
}
}
+
+ JsonSyncDataMessage(Signal.SyncMessageReceived messageReceived) {
+ super(messageReceived);
+ destination = messageReceived.getDestination();
+ }
}
-package org.asamk.signal;
+package org.asamk.signal.json;
+import org.asamk.Signal;
import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
this.type = JsonSyncMessageType.REQUEST_SYNC;
}
}
+
+ JsonSyncMessage(Signal.SyncMessageReceived messageReceived) {
+ sentMessage = new JsonSyncDataMessage(messageReceived);
+ }
}
-package org.asamk.signal;
+package org.asamk.signal.manager;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
-public class JsonStickerPack {
+class JsonStickerPack {
@JsonProperty
public String title;
import org.asamk.Signal;
import org.asamk.signal.AttachmentInvalidException;
import org.asamk.signal.GroupNotFoundException;
-import org.asamk.signal.JsonStickerPack;
import org.asamk.signal.NotAGroupMemberException;
import org.asamk.signal.StickerPackInvalidException;
import org.asamk.signal.TrustLevel;