Re-use session objects during multi-recipient encryption.

This commit is contained in:
Clark
2023-11-27 15:20:18 -05:00
committed by Cody Henthorne
parent 59401e18ed
commit 61810cc977
11 changed files with 80 additions and 23 deletions

View File

@@ -21,6 +21,7 @@ import org.whispersystems.signalservice.api.push.DistributionId;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -126,7 +127,7 @@ public class SignalServiceAccountDataStoreImpl implements SignalServiceAccountDa
}
@Override
public Set<SignalProtocolAddress> getAllAddressesWithActiveSessions(List<String> addressNames) {
public Map<SignalProtocolAddress, SessionRecord> getAllAddressesWithActiveSessions(List<String> addressNames) {
return sessionStore.getAllAddressesWithActiveSessions(addressNames);
}

View File

@@ -17,6 +17,7 @@ import org.whispersystems.signalservice.api.SignalSessionLock;
import org.whispersystems.signalservice.api.push.ServiceId;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@@ -104,14 +105,13 @@ public class TextSecureSessionStore implements SignalServiceSessionStore {
}
@Override
public Set<SignalProtocolAddress> getAllAddressesWithActiveSessions(List<String> addressNames) {
public Map<SignalProtocolAddress, SessionRecord> getAllAddressesWithActiveSessions(List<String> addressNames) {
try (SignalSessionLock.Lock unused = ReentrantSessionLock.INSTANCE.acquire()) {
return SignalDatabase.sessions()
.getAllFor(accountId, addressNames)
.stream()
.filter(row -> isActive(row.getRecord()))
.map(row -> new SignalProtocolAddress(row.getAddress(), row.getDeviceId()))
.collect(Collectors.toSet());
.collect(Collectors.toMap(row -> new SignalProtocolAddress(row.getAddress(), row.getDeviceId()), SessionTable.SessionRow::getRecord));
}
}

View File

@@ -100,7 +100,7 @@ class BufferedSessionStore(private val selfServiceId: ServiceId) : SignalService
error("Should not happen during the intended usage pattern of this class")
}
override fun getAllAddressesWithActiveSessions(addressNames: MutableList<String>): Set<SignalProtocolAddress> {
override fun getAllAddressesWithActiveSessions(addressNames: MutableList<String>): Map<SignalProtocolAddress, SessionRecord> {
error("Should not happen during the intended usage pattern of this class")
}

View File

@@ -177,7 +177,7 @@ class BufferedSignalServiceAccountDataStore(selfServiceId: ServiceId) : SignalSe
sessionStore.archiveSession(address)
}
override fun getAllAddressesWithActiveSessions(addressNames: MutableList<String>): Set<SignalProtocolAddress> {
override fun getAllAddressesWithActiveSessions(addressNames: MutableList<String>): Map<SignalProtocolAddress, SessionRecord> {
return sessionStore.getAllAddressesWithActiveSessions(addressNames)
}