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;
import java.util.List;
-import java.util.UUID;
import static org.asamk.signal.util.Util.getLegacyIdentifier;
@JsonProperty
final Integer sourceDevice;
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final String relay;
-
@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().transform(UUID::toString).orNull();
+ this.sourceUuid = source.getUuid().toString();
this.sourceDevice = envelope.getSourceDevice();
- this.relay = source.getRelay().orNull();
} else if (envelope.isUnidentifiedSender() && content != null) {
- final var source = content.getSender();
+ final var source = m.resolveSignalServiceAddress(content.getSender());
this.source = getLegacyIdentifier(source);
this.sourceNumber = source.getNumber().orNull();
- this.sourceUuid = source.getUuid().transform(UUID::toString).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;
}
sourceUuid = null;
sourceName = null;
sourceDevice = null;
- relay = null;
timestamp = messageReceived.getTimestamp();
receiptMessage = null;
dataMessage = new JsonDataMessage(messageReceived);
sourceUuid = null;
sourceName = null;
sourceDevice = null;
- relay = null;
timestamp = receiptReceived.getTimestamp();
receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
dataMessage = null;
sourceUuid = null;
sourceName = null;
sourceDevice = null;
- relay = null;
timestamp = messageReceived.getTimestamp();
receiptMessage = null;
dataMessage = null;