import org.asamk.Signal;
import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.UntrustedIdentityException;
+import org.asamk.signal.manager.api.RecipientIdentifier;
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
import org.whispersystems.signalservice.api.util.InvalidNumberException;
public class JsonMessageEnvelope {
@JsonProperty
+ @Deprecated
final String source;
@JsonProperty
- final String sourceName;
+ final String sourceNumber;
@JsonProperty
- final Integer sourceDevice;
+ final String sourceUuid;
@JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final String relay;
+ final String sourceName;
+
+ @JsonProperty
+ final Integer sourceDevice;
@JsonProperty
final long timestamp;
@JsonInclude(JsonInclude.Include.NON_NULL)
final JsonTypingMessage typingMessage;
- public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) {
- if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
- var source = envelope.getSourceAddress();
+ public JsonMessageEnvelope(
+ SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception, Manager m
+ ) {
+ if (!envelope.isUnidentifiedSender() && envelope.hasSourceUuid()) {
+ var source = m.resolveSignalServiceAddress(envelope.getSourceAddress());
this.source = getLegacyIdentifier(source);
+ this.sourceNumber = source.getNumber().orNull();
+ this.sourceUuid = source.getUuid().toString();
this.sourceDevice = envelope.getSourceDevice();
- this.relay = source.getRelay().orNull();
} else if (envelope.isUnidentifiedSender() && content != null) {
- this.source = getLegacyIdentifier(content.getSender());
+ final var source = m.resolveSignalServiceAddress(content.getSender());
+ this.source = getLegacyIdentifier(source);
+ this.sourceNumber = source.getNumber().orNull();
+ this.sourceUuid = source.getUuid().toString();
this.sourceDevice = content.getSenderDevice();
- this.relay = null;
+ } else if (exception instanceof UntrustedIdentityException) {
+ var e = (UntrustedIdentityException) exception;
+ final var source = m.resolveSignalServiceAddress(e.getSender());
+ this.source = getLegacyIdentifier(source);
+ this.sourceNumber = source.getNumber().orNull();
+ this.sourceUuid = source.getUuid().toString();
+ this.sourceDevice = e.getSenderDevice();
} else {
this.source = null;
+ this.sourceNumber = null;
+ this.sourceUuid = null;
this.sourceDevice = null;
- this.relay = null;
}
String name;
try {
- name = m.getContactOrProfileName(this.source);
+ name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(this.source, m.getUsername()));
} catch (InvalidNumberException | NullPointerException e) {
name = null;
}
public JsonMessageEnvelope(Signal.MessageReceived messageReceived) {
source = messageReceived.getSender();
+ sourceNumber = null;
+ sourceUuid = null;
sourceName = null;
sourceDevice = null;
- relay = null;
timestamp = messageReceived.getTimestamp();
receiptMessage = null;
dataMessage = new JsonDataMessage(messageReceived);
public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) {
source = receiptReceived.getSender();
+ sourceNumber = null;
+ sourceUuid = null;
sourceName = null;
sourceDevice = null;
- relay = null;
timestamp = receiptReceived.getTimestamp();
receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
dataMessage = null;
public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) {
source = messageReceived.getSource();
+ sourceNumber = null;
+ sourceUuid = null;
sourceName = null;
sourceDevice = null;
- relay = null;
timestamp = messageReceived.getTimestamp();
receiptMessage = null;
dataMessage = null;