1 package org
.asamk
.signal
;
3 import org
.asamk
.Signal
;
4 import org
.asamk
.signal
.manager
.Manager
;
5 import org
.freedesktop
.dbus
.DBusConnection
;
6 import org
.freedesktop
.dbus
.exceptions
.DBusException
;
7 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceAttachment
;
8 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceContent
;
9 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceDataMessage
;
10 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceEnvelope
;
11 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceGroup
;
13 import java
.util
.ArrayList
;
14 import java
.util
.List
;
16 public class JsonDbusReceiveMessageHandler
extends JsonReceiveMessageHandler
{
18 private final DBusConnection conn
;
20 private final String objectPath
;
22 public JsonDbusReceiveMessageHandler(Manager m
, DBusConnection conn
, final String objectPath
) {
25 this.objectPath
= objectPath
;
28 static void sendReceivedMessageToDbus(SignalServiceEnvelope envelope
, SignalServiceContent content
, DBusConnection conn
, final String objectPath
, Manager m
) {
29 if (envelope
.isReceipt()) {
31 conn
.sendSignal(new Signal
.ReceiptReceived(
33 envelope
.getTimestamp(),
34 !envelope
.isUnidentifiedSender() && envelope
.hasSource() ? envelope
.getSourceE164().get() : content
.getSender().getNumber().get()
36 } catch (DBusException e
) {
39 } else if (content
!= null && content
.getDataMessage().isPresent()) {
40 SignalServiceDataMessage message
= content
.getDataMessage().get();
42 if (!message
.isEndSession() &&
43 !(message
.getGroupContext().isPresent() &&
44 message
.getGroupContext().get().getGroupV1Type() != SignalServiceGroup
.Type
.DELIVER
)) {
45 List
<String
> attachments
= new ArrayList
<>();
46 if (message
.getAttachments().isPresent()) {
47 for (SignalServiceAttachment attachment
: message
.getAttachments().get()) {
48 if (attachment
.isPointer()) {
49 attachments
.add(m
.getAttachmentFile(attachment
.asPointer().getId()).getAbsolutePath());
55 conn
.sendSignal(new Signal
.MessageReceived(
57 message
.getTimestamp(),
58 envelope
.isUnidentifiedSender() || !envelope
.hasSource() ? content
.getSender().getNumber().get() : envelope
.getSourceE164().get(),
59 message
.getGroupContext().isPresent() && message
.getGroupContext().get().getGroupV1().isPresent()
60 ? message
.getGroupContext().get().getGroupV1().get().getGroupId() : new byte[0],
61 message
.getBody().isPresent() ? message
.getBody().get() : "",
63 } catch (DBusException e
) {
71 public void handleMessage(SignalServiceEnvelope envelope
, SignalServiceContent content
, Throwable exception
) {
72 super.handleMessage(envelope
, content
, exception
);
74 sendReceivedMessageToDbus(envelope
, content
, conn
, objectPath
, m
);