package org.whispersystems.libaxolotl; 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 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 getSubDeviceSessions(String name) { List deviceIds = new LinkedList<>(); for (AxolotlAddress key : sessions.keySet()) { if (key.getName().equals(name)) { 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); } } } }