- public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content) {
- if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
- SignalServiceAddress source = envelope.getSourceAddress();
- this.source = source.getNumber().get();
- this.relay = source.getRelay().isPresent() ? source.getRelay().get() : null;
+ public static JsonMessageEnvelope from(
+ SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception, Manager m
+ ) {
+ final String source;
+ final String sourceNumber;
+ final String sourceUuid;
+ final Integer sourceDevice;
+ if (!envelope.isUnidentifiedSender() && envelope.hasSourceUuid()) {
+ final var sourceAddress = m.resolveSignalServiceAddress(envelope.getSourceAddress());
+ source = getLegacyIdentifier(sourceAddress);
+ sourceNumber = sourceAddress.getNumber().orNull();
+ sourceUuid = sourceAddress.getUuid().toString();
+ sourceDevice = envelope.getSourceDevice();
+ } else if (envelope.isUnidentifiedSender() && content != null) {
+ final var sender = m.resolveSignalServiceAddress(content.getSender());
+ source = getLegacyIdentifier(sender);
+ sourceNumber = sender.getNumber().orNull();
+ sourceUuid = sender.getUuid().toString();
+ sourceDevice = content.getSenderDevice();
+ } else if (exception instanceof UntrustedIdentityException e) {
+ final var sender = m.resolveSignalServiceAddress(e.getSender());
+ source = getLegacyIdentifier(sender);
+ sourceNumber = sender.getNumber().orNull();
+ sourceUuid = sender.getUuid().toString();
+ sourceDevice = e.getSenderDevice();
+ } else {
+ source = null;
+ sourceNumber = null;
+ sourceUuid = null;
+ sourceDevice = null;
+ }
+ String name;
+ try {
+ name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(source, m.getSelfNumber()));
+ } catch (InvalidNumberException | NullPointerException e) {
+ name = null;