mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 10:30:38 +00:00
Update libsignal-service-java
This commit is contained in:
parent
ec3d2346ef
commit
609ebf024b
9 changed files with 79 additions and 9 deletions
|
@ -1,7 +1,7 @@
|
|||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
**Attention**: Now requires native libsignal-client version 0.5.1
|
||||
**Attention**: Now requires native libsignal-client version 0.8.1
|
||||
|
||||
### Added
|
||||
- Added new parameters to `updateGroup` for group v2 features:
|
||||
|
|
|
@ -1787,8 +1787,10 @@
|
|||
{"name":"bitField0_", "allowUnsafeAccess":true},
|
||||
{"name":"callMessage_", "allowUnsafeAccess":true},
|
||||
{"name":"dataMessage_", "allowUnsafeAccess":true},
|
||||
{"name":"decryptionErrorMessage_", "allowUnsafeAccess":true},
|
||||
{"name":"nullMessage_", "allowUnsafeAccess":true},
|
||||
{"name":"receiptMessage_", "allowUnsafeAccess":true},
|
||||
{"name":"senderKeyDistributionMessage_", "allowUnsafeAccess":true},
|
||||
{"name":"syncMessage_", "allowUnsafeAccess":true},
|
||||
{"name":"typingMessage_", "allowUnsafeAccess":true}
|
||||
]
|
||||
|
@ -2139,6 +2141,7 @@
|
|||
"fields":[
|
||||
{"name":"address_", "allowUnsafeAccess":true},
|
||||
{"name":"bitField0_", "allowUnsafeAccess":true},
|
||||
{"name":"groupId_", "allowUnsafeAccess":true},
|
||||
{"name":"needsReceipt_", "allowUnsafeAccess":true},
|
||||
{"name":"senderDevice_", "allowUnsafeAccess":true},
|
||||
{"name":"serverDeliveredTimestamp_", "allowUnsafeAccess":true},
|
||||
|
|
|
@ -14,7 +14,7 @@ repositories {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
api("com.github.turasa:signal-service-java:2.15.3_unofficial_23")
|
||||
api("com.github.turasa:signal-service-java:2.15.3_unofficial_24")
|
||||
implementation("com.google.protobuf:protobuf-javalite:3.10.0")
|
||||
implementation("org.bouncycastle:bcprov-jdk15on:1.68")
|
||||
implementation("org.slf4j:slf4j-api:1.7.30")
|
||||
|
|
|
@ -87,6 +87,7 @@ import org.whispersystems.signalservice.api.SignalServiceMessagePipe;
|
|||
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
|
||||
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
|
||||
import org.whispersystems.signalservice.api.SignalSessionLock;
|
||||
import org.whispersystems.signalservice.api.crypto.ContentHint;
|
||||
import org.whispersystems.signalservice.api.crypto.SignalServiceCipher;
|
||||
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
|
||||
import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations;
|
||||
|
@ -1534,7 +1535,7 @@ public class Manager implements Closeable {
|
|||
|
||||
private void sendSyncMessage(SignalServiceSyncMessage message) throws IOException, UntrustedIdentityException {
|
||||
var messageSender = createMessageSender();
|
||||
messageSender.sendMessage(message, unidentifiedAccessHelper.getAccessForSync());
|
||||
messageSender.sendSyncMessage(message, unidentifiedAccessHelper.getAccessForSync());
|
||||
}
|
||||
|
||||
private Set<RecipientId> getSignalServiceAddresses(Collection<String> numbers) throws InvalidNumberException {
|
||||
|
@ -1614,9 +1615,10 @@ public class Manager implements Closeable {
|
|||
final var addresses = recipientIdList.stream()
|
||||
.map(this::resolveSignalServiceAddress)
|
||||
.collect(Collectors.toList());
|
||||
var result = messageSender.sendMessage(addresses,
|
||||
var result = messageSender.sendDataMessage(addresses,
|
||||
unidentifiedAccessHelper.getAccessFor(recipientIdList),
|
||||
isRecipientUpdate,
|
||||
ContentHint.DEFAULT,
|
||||
message);
|
||||
|
||||
for (var r : result) {
|
||||
|
@ -1691,7 +1693,7 @@ public class Manager implements Closeable {
|
|||
|
||||
try {
|
||||
var startTime = System.currentTimeMillis();
|
||||
messageSender.sendMessage(syncMessage, unidentifiedAccess);
|
||||
messageSender.sendSyncMessage(syncMessage, unidentifiedAccess);
|
||||
return SendMessageResult.success(recipient,
|
||||
unidentifiedAccess.isPresent(),
|
||||
false,
|
||||
|
@ -1709,11 +1711,15 @@ public class Manager implements Closeable {
|
|||
final var address = resolveSignalServiceAddress(recipientId);
|
||||
try {
|
||||
try {
|
||||
return messageSender.sendMessage(address, unidentifiedAccessHelper.getAccessFor(recipientId), message);
|
||||
return messageSender.sendDataMessage(address,
|
||||
unidentifiedAccessHelper.getAccessFor(recipientId),
|
||||
ContentHint.DEFAULT,
|
||||
message);
|
||||
} catch (UnregisteredUserException e) {
|
||||
final var newRecipientId = refreshRegisteredUser(recipientId);
|
||||
return messageSender.sendMessage(resolveSignalServiceAddress(newRecipientId),
|
||||
return messageSender.sendDataMessage(resolveSignalServiceAddress(newRecipientId),
|
||||
unidentifiedAccessHelper.getAccessFor(newRecipientId),
|
||||
ContentHint.DEFAULT,
|
||||
message);
|
||||
}
|
||||
} catch (UntrustedIdentityException e) {
|
||||
|
|
|
@ -34,7 +34,7 @@ public class ServiceConfig {
|
|||
} catch (Throwable ignored) {
|
||||
zkGroupAvailable = false;
|
||||
}
|
||||
capabilities = new AccountAttributes.Capabilities(false, zkGroupAvailable, false, zkGroupAvailable);
|
||||
capabilities = new AccountAttributes.Capabilities(false, zkGroupAvailable, false, zkGroupAvailable, false);
|
||||
|
||||
try {
|
||||
TrustStore contactTrustStore = new IasTrustStore();
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.asamk.signal.manager.storage.protocol;
|
|||
import org.whispersystems.libsignal.IdentityKey;
|
||||
import org.whispersystems.libsignal.IdentityKeyPair;
|
||||
import org.whispersystems.libsignal.InvalidKeyIdException;
|
||||
import org.whispersystems.libsignal.NoSessionException;
|
||||
import org.whispersystems.libsignal.SignalProtocolAddress;
|
||||
import org.whispersystems.libsignal.groups.state.SenderKeyRecord;
|
||||
import org.whispersystems.libsignal.state.IdentityKeyStore;
|
||||
|
@ -13,8 +14,11 @@ import org.whispersystems.libsignal.state.SignedPreKeyRecord;
|
|||
import org.whispersystems.libsignal.state.SignedPreKeyStore;
|
||||
import org.whispersystems.signalservice.api.SignalServiceProtocolStore;
|
||||
import org.whispersystems.signalservice.api.SignalServiceSessionStore;
|
||||
import org.whispersystems.signalservice.api.push.DistributionId;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class SignalProtocolStore implements SignalServiceProtocolStore {
|
||||
|
@ -86,6 +90,11 @@ public class SignalProtocolStore implements SignalServiceProtocolStore {
|
|||
return sessionStore.loadSession(address);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SessionRecord> loadExistingSessions(final List<SignalProtocolAddress> addresses) throws NoSessionException {
|
||||
return sessionStore.loadExistingSessions(addresses);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getSubDeviceSessions(String name) {
|
||||
return sessionStore.getSubDeviceSessions(name);
|
||||
|
@ -145,10 +154,32 @@ public class SignalProtocolStore implements SignalServiceProtocolStore {
|
|||
public void storeSenderKey(
|
||||
final SignalProtocolAddress sender, final UUID distributionId, final SenderKeyRecord record
|
||||
) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
public SenderKeyRecord loadSenderKey(final SignalProtocolAddress sender, final UUID distributionId) {
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<SignalProtocolAddress> getSenderKeySharedWith(final DistributionId distributionId) {
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markSenderKeySharedWith(
|
||||
final DistributionId distributionId, final Collection<SignalProtocolAddress> addresses
|
||||
) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearSenderKeySharedWith(
|
||||
final DistributionId distributionId, final Collection<SignalProtocolAddress> addresses
|
||||
) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
|
|
@ -133,7 +133,8 @@ public class Profile {
|
|||
public enum Capability {
|
||||
gv2,
|
||||
storage,
|
||||
gv1Migration;
|
||||
gv1Migration,
|
||||
senderKey;
|
||||
|
||||
static Capability valueOfOrNull(String value) {
|
||||
try {
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.asamk.signal.manager.util.IOUtils;
|
|||
import org.asamk.signal.manager.util.Utils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.whispersystems.libsignal.NoSessionException;
|
||||
import org.whispersystems.libsignal.SignalProtocolAddress;
|
||||
import org.whispersystems.libsignal.protocol.CiphertextMessage;
|
||||
import org.whispersystems.libsignal.state.SessionRecord;
|
||||
|
@ -21,6 +22,7 @@ import java.util.Collection;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -55,6 +57,30 @@ public class SessionStore implements SignalServiceSessionStore {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SessionRecord> loadExistingSessions(final List<SignalProtocolAddress> addresses) throws NoSessionException {
|
||||
final var keys = addresses.stream().map(this::getKey).collect(Collectors.toList());
|
||||
|
||||
synchronized (cachedSessions) {
|
||||
final var sessions = keys.stream()
|
||||
.map(this::loadSessionLocked)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (sessions.size() != addresses.size()) {
|
||||
String message = "Mismatch! Asked for "
|
||||
+ addresses.size()
|
||||
+ " sessions, but only found "
|
||||
+ sessions.size()
|
||||
+ "!";
|
||||
logger.warn(message);
|
||||
throw new NoSessionException(message);
|
||||
}
|
||||
|
||||
return sessions;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getSubDeviceSessions(String name) {
|
||||
final var recipientId = resolveRecipient(name);
|
||||
|
|
|
@ -62,6 +62,9 @@ public class ProfileUtils {
|
|||
if (encryptedProfile.getCapabilities().isStorage()) {
|
||||
capabilities.add(Profile.Capability.storage);
|
||||
}
|
||||
if (encryptedProfile.getCapabilities().isSenderKey()) {
|
||||
capabilities.add(Profile.Capability.senderKey);
|
||||
}
|
||||
return capabilities;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue