]> nmode's Git Repositories - signal-cli/commitdiff
Update libsignal-service-java
authorAsamK <asamk@gmx.de>
Sat, 14 May 2022 13:08:19 +0000 (15:08 +0200)
committerAsamK <asamk@gmx.de>
Sat, 14 May 2022 13:51:23 +0000 (15:51 +0200)
14 files changed:
graalvm-config-dir/jni-config.json
graalvm-config-dir/reflect-config.json
lib/build.gradle.kts
lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/api/MessageEnvelope.java
lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java
lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java
lib/src/main/java/org/asamk/signal/manager/helper/SendHelper.java
lib/src/main/java/org/asamk/signal/manager/util/MessageCacheUtils.java
src/main/java/org/asamk/signal/ReceiveMessageHandler.java
src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
src/main/java/org/asamk/signal/dbus/DbusReceiveMessageHandler.java
src/main/java/org/asamk/signal/json/JsonSyncDataMessage.java

index a852dc92b77ab2142f3debaf88af90e51dcd63a4..27abd5be9e4667fdd2c22a3e9bd4bfc7bcb0a534 100644 (file)
@@ -81,6 +81,7 @@
 {
   "name":"org.signal.libsignal.protocol.IdentityKey",
   "methods":[
 {
   "name":"org.signal.libsignal.protocol.IdentityKey",
   "methods":[
+    {"name":"<init>","parameterTypes":["long"] }, 
     {"name":"<init>","parameterTypes":["byte[]"] }, 
     {"name":"serialize","parameterTypes":[] }
   ]
     {"name":"<init>","parameterTypes":["byte[]"] }, 
     {"name":"serialize","parameterTypes":[] }
   ]
 },
 {
   "name":"org.signal.libsignal.protocol.SignalProtocolAddress",
 },
 {
   "name":"org.signal.libsignal.protocol.SignalProtocolAddress",
-  "methods":[{"name":"<init>","parameterTypes":["java.lang.String","int"] }]
+  "methods":[
+    {"name":"<init>","parameterTypes":["long"] }, 
+    {"name":"<init>","parameterTypes":["java.lang.String","int"] }
+  ]
 },
 {
   "name":"org.signal.libsignal.protocol.UntrustedIdentityException",
 },
 {
   "name":"org.signal.libsignal.protocol.UntrustedIdentityException",
 {
   "name":"org.signal.libsignal.protocol.state.SessionRecord",
   "fields":[{"name":"unsafeHandle"}],
 {
   "name":"org.signal.libsignal.protocol.state.SessionRecord",
   "fields":[{"name":"unsafeHandle"}],
-  "methods":[{"name":"<init>","parameterTypes":["byte[]"] }]
+  "methods":[
+    {"name":"<init>","parameterTypes":["long"] }, 
+    {"name":"<init>","parameterTypes":["byte[]"] }
+  ]
 },
 {
   "name":"org.signal.libsignal.protocol.state.SessionStore"
 },
 {
   "name":"org.signal.libsignal.protocol.state.SessionStore"
 {
   "name":"org.signal.libsignal.protocol.state.SignedPreKeyStore"
 },
 {
   "name":"org.signal.libsignal.protocol.state.SignedPreKeyStore"
 },
+{
+  "name":"org.signal.libsignal.zkgroup.InvalidInputException",
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
+},
 {
   "name":"org.sqlite.Collation"
 },
 {
   "name":"org.sqlite.Collation"
 },
index 9f7f9526b1c44d14258da2beb1800b61db4e0325..b2e12b5e7850dc320f18ce81b4d6b00d1f1c0495 100644 (file)
     {"name":"delete_"}, 
     {"name":"expireTimer_"}, 
     {"name":"flags_"}, 
     {"name":"delete_"}, 
     {"name":"expireTimer_"}, 
     {"name":"flags_"}, 
+    {"name":"giftBadge_"}, 
     {"name":"groupCallUpdate_"}, 
     {"name":"groupV2_"}, 
     {"name":"group_"}, 
     {"name":"groupCallUpdate_"}, 
     {"name":"groupV2_"}, 
     {"name":"group_"}, 
     {"name":"expirationStartTimestamp_"}, 
     {"name":"isRecipientUpdate_"}, 
     {"name":"message_"}, 
     {"name":"expirationStartTimestamp_"}, 
     {"name":"isRecipientUpdate_"}, 
     {"name":"message_"}, 
+    {"name":"storyMessageRecipients_"}, 
+    {"name":"storyMessage_"}, 
     {"name":"timestamp_"}, 
     {"name":"unidentifiedStatus_"}
   ]
     {"name":"timestamp_"}, 
     {"name":"unidentifiedStatus_"}
   ]
   "fields":[
     {"name":"address_"}, 
     {"name":"bitField0_"}, 
   "fields":[
     {"name":"address_"}, 
     {"name":"bitField0_"}, 
+    {"name":"destinationUuid_"}, 
     {"name":"groupId_"}, 
     {"name":"needsReceipt_"}, 
     {"name":"senderDevice_"}, 
     {"name":"groupId_"}, 
     {"name":"needsReceipt_"}, 
     {"name":"senderDevice_"}, 
index c04342855decc1e8b3df03af1acdf9806c2182e2..e1590dc20dc63543fb691ac532137868ae4cc558 100644 (file)
@@ -14,7 +14,7 @@ repositories {
 }
 
 dependencies {
 }
 
 dependencies {
-    implementation("com.github.turasa", "signal-service-java", "2.15.3_unofficial_47")
+    implementation("com.github.turasa", "signal-service-java", "2.15.3_unofficial_48")
     implementation("com.fasterxml.jackson.core", "jackson-databind", "2.13.2.2")
     implementation("com.google.protobuf", "protobuf-javalite", "3.11.4")
     implementation("org.bouncycastle", "bcprov-jdk15on", "1.70")
     implementation("com.fasterxml.jackson.core", "jackson-databind", "2.13.2.2")
     implementation("com.google.protobuf", "protobuf-javalite", "3.11.4")
     implementation("org.bouncycastle", "bcprov-jdk15on", "1.70")
index addc3bb7f1cd8faf76b341611494235236698257..c7f1d22fa57fd70134beb6f5611da9d15def1500 100644 (file)
@@ -540,7 +540,8 @@ class ManagerImpl implements Manager {
                             .resolveSignalServiceAddress(context.getRecipientHelper().resolveRecipient(quote.author())),
                     quote.message(),
                     List.of(),
                             .resolveSignalServiceAddress(context.getRecipientHelper().resolveRecipient(quote.author())),
                     quote.message(),
                     List.of(),
-                    resolveMentions(quote.mentions())));
+                    resolveMentions(quote.mentions()),
+                    SignalServiceDataMessage.Quote.Type.NORMAL));
         }
         if (message.sticker().isPresent()) {
             final var sticker = message.sticker().get();
         }
         if (message.sticker().isPresent()) {
             final var sticker = message.sticker().get();
index 7c6cd58c76bfdd205413fec0bdf4ac2d8341dff1..67a3361384557928f3baa74d866cd339d9997e70 100644 (file)
@@ -517,7 +517,7 @@ public record MessageEnvelope(
                 long expirationStartTimestamp,
                 Optional<RecipientAddress> destination,
                 Set<RecipientAddress> recipients,
                 long expirationStartTimestamp,
                 Optional<RecipientAddress> destination,
                 Set<RecipientAddress> recipients,
-                Data message
+                Optional<Data> message
         ) {
 
             static Sent from(
         ) {
 
             static Sent from(
@@ -534,7 +534,8 @@ public record MessageEnvelope(
                                 .stream()
                                 .map(d -> addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(d)))
                                 .collect(Collectors.toSet()),
                                 .stream()
                                 .map(d -> addressResolver.resolveRecipientAddress(recipientResolver.resolveRecipient(d)))
                                 .collect(Collectors.toSet()),
-                        Data.from(sentMessage.getMessage(), recipientResolver, addressResolver, fileProvider));
+                        sentMessage.getDataMessage()
+                                .map(message -> Data.from(message, recipientResolver, addressResolver, fileProvider)));
             }
         }
 
             }
         }
 
index de248755d79802bfab7d0f9fe225c2da4744f67d..422d0db703c03fe2ad55eae9aa9f9d86d11f3d2f 100644 (file)
@@ -31,7 +31,7 @@ public class ServiceConfig {
     public static final AccountAttributes.Capabilities capabilities;
 
     static {
     public static final AccountAttributes.Capabilities capabilities;
 
     static {
-        capabilities = new AccountAttributes.Capabilities(false, true, false, true, true, true, true, false);
+        capabilities = new AccountAttributes.Capabilities(false, true, false, true, true, true, true, false, false);
 
         try {
             TrustStore contactTrustStore = new IasTrustStore();
 
         try {
             TrustStore contactTrustStore = new IasTrustStore();
@@ -50,7 +50,8 @@ public class ServiceConfig {
         try {
             try {
                 org.signal.libsignal.internal.Native.UuidCiphertext_CheckValidContents(new byte[0]);
         try {
             try {
                 org.signal.libsignal.internal.Native.UuidCiphertext_CheckValidContents(new byte[0]);
-            } catch (IllegalArgumentException ignored) {
+            } catch (Exception e) {
+                logger.trace("Expected exception when checking libsignal-client: {}", e.getMessage());
             }
             return true;
         } catch (UnsatisfiedLinkError e) {
             }
             return true;
         } catch (UnsatisfiedLinkError e) {
index d56ce98feb3aa58973eb862ea89e0a074f82cee8..06a0b89a01e4cb4f4c30c1f6a39f19832c2e1069 100644 (file)
@@ -529,7 +529,8 @@ class GroupV2Helper {
         final var today = currentTimeDays();
         if (groupApiCredentials == null || !groupApiCredentials.containsKey(today)) {
             // Returns credentials for the next 7 days
         final var today = currentTimeDays();
         if (groupApiCredentials == null || !groupApiCredentials.containsKey(today)) {
             // Returns credentials for the next 7 days
-            groupApiCredentials = dependencies.getGroupsV2Api().getCredentials(today);
+            final var isAci = true; // TODO enable group handling with PNI
+            groupApiCredentials = dependencies.getGroupsV2Api().getCredentials(today, isAci);
             // TODO cache credentials on disk until they expire
         }
         var authCredentialResponse = groupApiCredentials.get(today);
             // TODO cache credentials on disk until they expire
         }
         var authCredentialResponse = groupApiCredentials.get(today);
index 3da0c729d4a4a7289be2e875f23d40b168ac2e92..c4b1524cf7042c95bb773920e52fafdf1811f4ae 100644 (file)
@@ -122,7 +122,8 @@ public final class IncomingMessageHandler {
                 actions.add(new RetrieveProfileAction(recipientId));
                 exception = new UntrustedIdentityException(account.getRecipientStore()
                         .resolveRecipientAddress(recipientId), e.getSenderDevice());
                 actions.add(new RetrieveProfileAction(recipientId));
                 exception = new UntrustedIdentityException(account.getRecipientStore()
                         .resolveRecipientAddress(recipientId), e.getSenderDevice());
-            } catch (ProtocolInvalidKeyIdException | ProtocolInvalidKeyException | ProtocolNoSessionException | ProtocolInvalidMessageException e) {
+            } catch (ProtocolInvalidKeyIdException | ProtocolInvalidKeyException | ProtocolNoSessionException |
+                     ProtocolInvalidMessageException e) {
                 logger.debug("Failed to decrypt incoming message", e);
                 final var sender = account.getRecipientStore().resolveRecipient(e.getSender());
                 if (context.getContactHelper().isContactBlocked(sender)) {
                 logger.debug("Failed to decrypt incoming message", e);
                 final var sender = account.getRecipientStore().resolveRecipient(e.getSender());
                 if (context.getContactHelper().isContactBlocked(sender)) {
@@ -319,11 +320,13 @@ public final class IncomingMessageHandler {
         if (syncMessage.getSent().isPresent()) {
             var message = syncMessage.getSent().get();
             final var destination = message.getDestination().orElse(null);
         if (syncMessage.getSent().isPresent()) {
             var message = syncMessage.getSent().get();
             final var destination = message.getDestination().orElse(null);
-            actions.addAll(handleSignalServiceDataMessage(message.getMessage(),
-                    true,
-                    sender,
-                    destination == null ? null : context.getRecipientHelper().resolveRecipient(destination),
-                    ignoreAttachments));
+            if (message.getDataMessage().isPresent()) {
+                actions.addAll(handleSignalServiceDataMessage(message.getDataMessage().get(),
+                        true,
+                        sender,
+                        destination == null ? null : context.getRecipientHelper().resolveRecipient(destination),
+                        ignoreAttachments));
+            }
         }
         if (syncMessage.getRequest().isPresent() && account.isMasterDevice()) {
             var rm = syncMessage.getRequest().get();
         }
         if (syncMessage.getRequest().isPresent() && account.isMasterDevice()) {
             var rm = syncMessage.getRequest().get();
index 46f34a4dad85b2f4a819183fa559d05200529887..652c46943cf72aaac5f60978bd023e03b03cb5b3 100644 (file)
@@ -616,10 +616,12 @@ public class SendHelper {
         var address = account.getSelfAddress();
         var transcript = new SentTranscriptMessage(Optional.of(address),
                 message.getTimestamp(),
         var address = account.getSelfAddress();
         var transcript = new SentTranscriptMessage(Optional.of(address),
                 message.getTimestamp(),
-                message,
+                Optional.of(message),
                 message.getExpiresInSeconds(),
                 Map.of(address, true),
                 message.getExpiresInSeconds(),
                 Map.of(address, true),
-                false);
+                false,
+                Optional.empty(),
+                Set.of());
         var syncMessage = SignalServiceSyncMessage.forSentTranscript(transcript);
 
         return sendSyncMessage(syncMessage);
         var syncMessage = SignalServiceSyncMessage.forSentTranscript(transcript);
 
         return sendSyncMessage(syncMessage);
index a1f19274f08f06391f4c70b4b4ddb50b7bd7290c..347e3d819f463eb6d5dec9ac50d5c1c2e6589ab7 100644 (file)
@@ -3,6 +3,7 @@ package org.asamk.signal.manager.util;
 import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
 import org.whispersystems.signalservice.api.push.ServiceId;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
 import org.whispersystems.signalservice.api.push.ServiceId;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
+import org.whispersystems.signalservice.api.util.UuidUtil;
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -18,7 +19,7 @@ public class MessageCacheUtils {
         try (var f = new FileInputStream(file)) {
             var in = new DataInputStream(f);
             var version = in.readInt();
         try (var f = new FileInputStream(file)) {
             var in = new DataInputStream(f);
             var version = in.readInt();
-            if (version > 4) {
+            if (version > 5) {
                 return null;
             }
             var type = in.readInt();
                 return null;
             }
             var type = in.readInt();
@@ -32,6 +33,10 @@ public class MessageCacheUtils {
                 // read legacy relay field
                 in.readUTF();
             }
                 // read legacy relay field
                 in.readUTF();
             }
+            String destinationUuid = null;
+            if (version >= 5) {
+                destinationUuid = in.readUTF();
+            }
             var timestamp = in.readLong();
             byte[] content = null;
             var contentLen = in.readInt();
             var timestamp = in.readLong();
             byte[] content = null;
             var contentLen = in.readInt();
@@ -69,18 +74,20 @@ public class MessageCacheUtils {
                     content,
                     serverReceivedTimestamp,
                     serverDeliveredTimestamp,
                     content,
                     serverReceivedTimestamp,
                     serverDeliveredTimestamp,
-                    uuid);
+                    uuid,
+                    destinationUuid == null ? UuidUtil.UNKNOWN_UUID.toString() : destinationUuid);
         }
     }
 
     public static void storeEnvelope(SignalServiceEnvelope envelope, File file) throws IOException {
         try (var f = new FileOutputStream(file)) {
             try (var out = new DataOutputStream(f)) {
         }
     }
 
     public static void storeEnvelope(SignalServiceEnvelope envelope, File file) throws IOException {
         try (var f = new FileOutputStream(file)) {
             try (var out = new DataOutputStream(f)) {
-                out.writeInt(4); // version
+                out.writeInt(5); // version
                 out.writeInt(envelope.getType());
                 out.writeUTF(envelope.getSourceE164().isPresent() ? envelope.getSourceE164().get() : "");
                 out.writeUTF(envelope.getSourceUuid().isPresent() ? envelope.getSourceUuid().get() : "");
                 out.writeInt(envelope.getSourceDevice());
                 out.writeInt(envelope.getType());
                 out.writeUTF(envelope.getSourceE164().isPresent() ? envelope.getSourceE164().get() : "");
                 out.writeUTF(envelope.getSourceUuid().isPresent() ? envelope.getSourceUuid().get() : "");
                 out.writeInt(envelope.getSourceDevice());
+                out.writeUTF(envelope.getDestinationUuid() == null ? "" : envelope.getDestinationUuid());
                 out.writeLong(envelope.getTimestamp());
                 if (envelope.hasContent()) {
                     out.writeInt(envelope.getContent().length);
                 out.writeLong(envelope.getTimestamp());
                 if (envelope.hasContent()) {
                     out.writeInt(envelope.getContent().length);
index 3351d666c0007e0d2410f474a49a13321dab6a46..04a7be030c8edc220c13a0ba8e8f9c5dedb7873b 100644 (file)
@@ -298,8 +298,10 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                         .println("Expiration started at: {}",
                                 DateUtils.formatTimestamp(sentTranscriptMessage.expirationStartTimestamp()));
             }
                         .println("Expiration started at: {}",
                                 DateUtils.formatTimestamp(sentTranscriptMessage.expirationStartTimestamp()));
             }
-            var message = sentTranscriptMessage.message();
-            printDataMessage(writer.indentedWriter(), message);
+            if (sentTranscriptMessage.message().isPresent()) {
+                var message = sentTranscriptMessage.message().get();
+                printDataMessage(writer.indentedWriter(), message);
+            }
         }
         if (syncMessage.blocked().isPresent()) {
             writer.println("Received sync message with block list");
         }
         if (syncMessage.blocked().isPresent()) {
             writer.println("Received sync message with block list");
index ed27ad6dd98500bb383d770584adf2198175cbac..d64abd0b7dbcd956d5c7eb74d47d892e9be260d9 100644 (file)
@@ -786,7 +786,7 @@ public class DbusManagerImpl implements Manager {
                                         ? Optional.empty()
                                         : Optional.of(new RecipientAddress(null, syncReceived.getDestination())),
                                 Set.of(),
                                         ? Optional.empty()
                                         : Optional.of(new RecipientAddress(null, syncReceived.getDestination())),
                                 Set.of(),
-                                new MessageEnvelope.Data(syncReceived.getTimestamp(),
+                                Optional.of(new MessageEnvelope.Data(syncReceived.getTimestamp(),
                                         syncReceived.getGroupId().length > 0
                                                 ? Optional.of(new MessageEnvelope.Data.GroupContext(GroupId.unknownVersion(
                                                 syncReceived.getGroupId()), false, 0))
                                         syncReceived.getGroupId().length > 0
                                                 ? Optional.of(new MessageEnvelope.Data.GroupContext(GroupId.unknownVersion(
                                                 syncReceived.getGroupId()), false, 0))
@@ -806,7 +806,7 @@ public class DbusManagerImpl implements Manager {
                                         Optional.empty(),
                                         List.of(),
                                         List.of(),
                                         Optional.empty(),
                                         List.of(),
                                         List.of(),
-                                        List.of()))),
+                                        List.of())))),
                                 Optional.empty(),
                                 List.of(),
                                 List.of(),
                                 Optional.empty(),
                                 List.of(),
                                 List.of(),
index 375fb0b16ea4f52b9174e83cfa72a4dc47928a99..dcea2bf1e674733d16fa7f77e2dd87d0d2260622 100644 (file)
@@ -79,27 +79,29 @@ public class DbusReceiveMessageHandler implements Manager.ReceiveMessageHandler
             if (syncMessage.sent().isPresent()) {
                 var transcript = syncMessage.sent().get();
 
             if (syncMessage.sent().isPresent()) {
                 var transcript = syncMessage.sent().get();
 
-                if (transcript.destination().isPresent() || transcript.message().groupContext().isPresent()) {
-                    var message = transcript.message();
-                    var groupId = message.groupContext()
-                            .map(MessageEnvelope.Data.GroupContext::groupId)
-                            .map(GroupId::serialize)
-                            .orElseGet(() -> new byte[0]);
-
-                    conn.sendMessage(new Signal.SyncMessageReceived(objectPath,
-                            transcript.message().timestamp(),
-                            senderString,
-                            transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
-                            groupId,
-                            message.body().orElse(""),
-                            getAttachments(message)));
-                    conn.sendMessage(new Signal.SyncMessageReceivedV2(objectPath,
-                            transcript.message().timestamp(),
-                            senderString,
-                            transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
-                            groupId,
-                            message.body().orElse(""),
-                            getMessageExtras(message)));
+                if (transcript.message().isPresent()) {
+                    final var dataMessage = transcript.message().get();
+                    if (transcript.destination().isPresent() || dataMessage.groupContext().isPresent()) {
+                        var groupId = dataMessage.groupContext()
+                                .map(MessageEnvelope.Data.GroupContext::groupId)
+                                .map(GroupId::serialize)
+                                .orElseGet(() -> new byte[0]);
+
+                        conn.sendMessage(new Signal.SyncMessageReceived(objectPath,
+                                dataMessage.timestamp(),
+                                senderString,
+                                transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
+                                groupId,
+                                dataMessage.body().orElse(""),
+                                getAttachments(dataMessage)));
+                        conn.sendMessage(new Signal.SyncMessageReceivedV2(objectPath,
+                                dataMessage.timestamp(),
+                                senderString,
+                                transcript.destination().map(RecipientAddress::getLegacyIdentifier).orElse(""),
+                                groupId,
+                                dataMessage.body().orElse(""),
+                                getMessageExtras(dataMessage)));
+                    }
                 }
             }
         }
                 }
             }
         }
index 0accddc19790e8a53ba31d72711744c1e93b6d40..fc84b0887ef75bf9e82393a94f8a8144b44facc5 100644 (file)
@@ -19,10 +19,13 @@ record JsonSyncDataMessage(
             return new JsonSyncDataMessage(address.getLegacyIdentifier(),
                     address.number().orElse(null),
                     address.uuid().map(UUID::toString).orElse(null),
             return new JsonSyncDataMessage(address.getLegacyIdentifier(),
                     address.number().orElse(null),
                     address.uuid().map(UUID::toString).orElse(null),
-                    JsonDataMessage.from(transcriptMessage.message()));
+                    transcriptMessage.message().map(JsonDataMessage::from).orElse(null));
 
         } else {
 
         } else {
-            return new JsonSyncDataMessage(null, null, null, JsonDataMessage.from(transcriptMessage.message()));
+            return new JsonSyncDataMessage(null,
+                    null,
+                    null,
+                    transcriptMessage.message().map(JsonDataMessage::from).orElse(null));
         }
     }
 }
         }
     }
 }