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
;
11 import java
.util
.List
;
13 import static org
.asamk
.signal
.util
.Util
.getLegacyIdentifier
;
15 public class JsonMessageEnvelope
{
21 final Integer sourceDevice
;
24 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
31 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
32 final JsonDataMessage dataMessage
;
35 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
36 final JsonSyncMessage syncMessage
;
39 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
40 final JsonCallMessage callMessage
;
43 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
44 final JsonReceiptMessage receiptMessage
;
47 @JsonInclude(JsonInclude
.Include
.NON_NULL
)
48 final JsonTypingMessage typingMessage
;
50 public JsonMessageEnvelope(SignalServiceEnvelope envelope
, SignalServiceContent content
, Manager m
) {
51 if (!envelope
.isUnidentifiedSender() && envelope
.hasSource()) {
52 var source
= envelope
.getSourceAddress();
53 this.source
= getLegacyIdentifier(source
);
54 this.sourceDevice
= envelope
.getSourceDevice();
55 this.relay
= source
.getRelay().orNull();
56 } else if (envelope
.isUnidentifiedSender() && content
!= null) {
57 this.source
= getLegacyIdentifier(content
.getSender());
58 this.sourceDevice
= content
.getSenderDevice();
62 this.sourceDevice
= null;
65 this.timestamp
= envelope
.getTimestamp();
66 if (envelope
.isReceipt()) {
67 this.receiptMessage
= JsonReceiptMessage
.deliveryReceipt(timestamp
, List
.of(timestamp
));
68 } else if (content
!= null && content
.getReceiptMessage().isPresent()) {
69 this.receiptMessage
= new JsonReceiptMessage(content
.getReceiptMessage().get());
71 this.receiptMessage
= null;
73 this.typingMessage
= content
!= null && content
.getTypingMessage().isPresent()
74 ?
new JsonTypingMessage(content
.getTypingMessage().get())
77 this.dataMessage
= content
!= null && content
.getDataMessage().isPresent()
78 ?
new JsonDataMessage(content
.getDataMessage().get(), m
)
80 this.syncMessage
= content
!= null && content
.getSyncMessage().isPresent()
81 ?
new JsonSyncMessage(content
.getSyncMessage().get(), m
)
83 this.callMessage
= content
!= null && content
.getCallMessage().isPresent()
84 ?
new JsonCallMessage(content
.getCallMessage().get())
88 public JsonMessageEnvelope(Signal
.MessageReceived messageReceived
) {
89 source
= messageReceived
.getSender();
92 timestamp
= messageReceived
.getTimestamp();
93 receiptMessage
= null;
94 dataMessage
= new JsonDataMessage(messageReceived
);
100 public JsonMessageEnvelope(Signal
.ReceiptReceived receiptReceived
) {
101 source
= receiptReceived
.getSender();
104 timestamp
= receiptReceived
.getTimestamp();
105 receiptMessage
= JsonReceiptMessage
.deliveryReceipt(timestamp
, List
.of(timestamp
));
109 typingMessage
= null;
112 public JsonMessageEnvelope(Signal
.SyncMessageReceived messageReceived
) {
113 source
= messageReceived
.getSource();
116 timestamp
= messageReceived
.getTimestamp();
117 receiptMessage
= null;
119 syncMessage
= new JsonSyncMessage(messageReceived
);
121 typingMessage
= null;