1 package org
.asamk
.signal
.json
;
3 import com
.fasterxml
.jackson
.annotation
.JsonInclude
;
4 import com
.fasterxml
.jackson
.annotation
.JsonProperty
;
6 import org
.asamk
.Signal
;
7 import org
.asamk
.signal
.manager
.Manager
;
8 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceContent
;
9 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceEnvelope
;
10 import org
.whispersystems
.signalservice
.api
.util
.InvalidNumberException
;
12 import java
.util
.List
;
14 import static org
.asamk
.signal
.util
.Util
.getLegacyIdentifier
;
16 public class JsonMessageEnvelope
{
22 final String sourceName
;
25 final Integer sourceDevice
;
28 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
35 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
36 final JsonDataMessage dataMessage
;
39 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
40 final JsonSyncMessage syncMessage
;
43 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
44 final JsonCallMessage callMessage
;
47 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
48 final JsonReceiptMessage receiptMessage
;
51 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
52 final JsonTypingMessage typingMessage
;
54 public JsonMessageEnvelope(SignalServiceEnvelope envelope
, SignalServiceContent content
, Manager m
) {
55 if (!envelope
.isUnidentifiedSender() && envelope
.hasSource()) {
56 var source
= envelope
.getSourceAddress();
57 this.source
= getLegacyIdentifier(source
);
58 this.sourceDevice
= envelope
.getSourceDevice();
59 this.relay
= source
.getRelay().orNull();
60 } else if (envelope
.isUnidentifiedSender() && content
!= null) {
61 this.source
= getLegacyIdentifier(content
.getSender());
62 this.sourceDevice
= content
.getSenderDevice();
66 this.sourceDevice
= null;
71 name
= m
.getContactOrProfileName(this.source
);
72 } catch (InvalidNumberException
| NullPointerException e
) {
75 this.sourceName
= name
;
76 this.timestamp
= envelope
.getTimestamp();
77 if (envelope
.isReceipt()) {
78 this.receiptMessage
= JsonReceiptMessage
.deliveryReceipt(timestamp
, List
.of(timestamp
));
79 } else if (content
!= null && content
.getReceiptMessage().isPresent()) {
80 this.receiptMessage
= new JsonReceiptMessage(content
.getReceiptMessage().get());
82 this.receiptMessage
= null;
84 this.typingMessage
= content
!= null && content
.getTypingMessage().isPresent()
85 ?
new JsonTypingMessage(content
.getTypingMessage().get())
88 this.dataMessage
= content
!= null && content
.getDataMessage().isPresent()
89 ?
new JsonDataMessage(content
.getDataMessage().get(), m
)
91 this.syncMessage
= content
!= null && content
.getSyncMessage().isPresent()
92 ?
new JsonSyncMessage(content
.getSyncMessage().get(), m
)
94 this.callMessage
= content
!= null && content
.getCallMessage().isPresent()
95 ?
new JsonCallMessage(content
.getCallMessage().get())
99 public JsonMessageEnvelope(Signal
.MessageReceived messageReceived
) {
100 source
= messageReceived
.getSender();
104 timestamp
= messageReceived
.getTimestamp();
105 receiptMessage
= null;
106 dataMessage
= new JsonDataMessage(messageReceived
);
109 typingMessage
= null;
112 public JsonMessageEnvelope(Signal
.ReceiptReceived receiptReceived
) {
113 source
= receiptReceived
.getSender();
117 timestamp
= receiptReceived
.getTimestamp();
118 receiptMessage
= JsonReceiptMessage
.deliveryReceipt(timestamp
, List
.of(timestamp
));
122 typingMessage
= null;
125 public JsonMessageEnvelope(Signal
.SyncMessageReceived messageReceived
) {
126 source
= messageReceived
.getSource();
130 timestamp
= messageReceived
.getTimestamp();
131 receiptMessage
= null;
133 syncMessage
= new JsonSyncMessage(messageReceived
);
135 typingMessage
= null;