- public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) {
- if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
- SignalServiceAddress source = envelope.getSourceAddress();
- this.source = source.getLegacyIdentifier();
- this.relay = source.getRelay().isPresent() ? source.getRelay().get() : null;
- }
- this.sourceDevice = envelope.getSourceDevice();
- this.timestamp = envelope.getTimestamp();
- if (envelope.isReceipt()) {
- this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp));
- }
- if (content != null) {
- if (envelope.isUnidentifiedSender()) {
- this.source = content.getSender().getLegacyIdentifier();
- this.sourceDevice = content.getSenderDevice();
- }
- if (content.getDataMessage().isPresent()) {
- this.dataMessage = new JsonDataMessage(content.getDataMessage().get(), m);
- }
- if (content.getSyncMessage().isPresent()) {
- this.syncMessage = new JsonSyncMessage(content.getSyncMessage().get(), m);
- }
- if (content.getCallMessage().isPresent()) {
- this.callMessage = new JsonCallMessage(content.getCallMessage().get());
- }
- if (content.getReceiptMessage().isPresent()) {
- this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get());
- }
+ public static JsonMessageEnvelope from(MessageEnvelope envelope, Throwable exception, Manager m) {
+ final RecipientAddress sourceAddress;
+ final Integer sourceDevice;
+ if (envelope.sourceAddress().isPresent()) {
+ sourceAddress = envelope.sourceAddress().get();
+ sourceDevice = envelope.sourceDevice();
+ } else if (exception instanceof UntrustedIdentityException e) {
+ sourceAddress = e.getSender();
+ sourceDevice = e.getSenderDevice();
+ } else {
+ sourceAddress = null;
+ sourceDevice = null;