diff options
Diffstat (limited to 'java/src/main/java/org/whispersystems/libaxolotl/state/impl/InMemorySessionStore.java')
-rw-r--r-- | java/src/main/java/org/whispersystems/libaxolotl/state/impl/InMemorySessionStore.java | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/java/src/main/java/org/whispersystems/libaxolotl/state/impl/InMemorySessionStore.java b/java/src/main/java/org/whispersystems/libaxolotl/state/impl/InMemorySessionStore.java new file mode 100644 index 00000000..f5270c7d --- /dev/null +++ b/java/src/main/java/org/whispersystems/libaxolotl/state/impl/InMemorySessionStore.java @@ -0,0 +1,70 @@ +package org.whispersystems.libaxolotl.state.impl; + +import org.whispersystems.libaxolotl.AxolotlAddress; +import org.whispersystems.libaxolotl.state.SessionRecord; +import org.whispersystems.libaxolotl.state.SessionStore; + +import java.io.IOException; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +public class InMemorySessionStore implements SessionStore { + + private Map<AxolotlAddress, byte[]> sessions = new HashMap<>(); + + public InMemorySessionStore() {} + + @Override + public synchronized SessionRecord loadSession(AxolotlAddress remoteAddress) { + try { + if (containsSession(remoteAddress)) { + return new SessionRecord(sessions.get(remoteAddress)); + } else { + return new SessionRecord(); + } + } catch (IOException e) { + throw new AssertionError(e); + } + } + + @Override + public synchronized List<Integer> getSubDeviceSessions(String name) { + List<Integer> deviceIds = new LinkedList<>(); + + for (AxolotlAddress key : sessions.keySet()) { + if (key.getName().equals(name) && + key.getDeviceId() != 1) + { + deviceIds.add(key.getDeviceId()); + } + } + + return deviceIds; + } + + @Override + public synchronized void storeSession(AxolotlAddress address, SessionRecord record) { + sessions.put(address, record.serialize()); + } + + @Override + public synchronized boolean containsSession(AxolotlAddress address) { + return sessions.containsKey(address); + } + + @Override + public synchronized void deleteSession(AxolotlAddress address) { + sessions.remove(address); + } + + @Override + public synchronized void deleteAllSessions(String name) { + for (AxolotlAddress key : sessions.keySet()) { + if (key.getName().equals(name)) { + sessions.remove(key); + } + } + } +} |