diff options
Diffstat (limited to 'libdino/src/crypto/omemo/simple_ss.vala')
| -rw-r--r-- | libdino/src/crypto/omemo/simple_ss.vala | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/libdino/src/crypto/omemo/simple_ss.vala b/libdino/src/crypto/omemo/simple_ss.vala index a2e11607..8c095c6d 100644 --- a/libdino/src/crypto/omemo/simple_ss.vala +++ b/libdino/src/crypto/omemo/simple_ss.vala @@ -4,12 +4,14 @@ using Omemo; namespace Dino.Crypto.Omemo { public class SimpleSessionStore : SessionStore { + public signal void session_stored(Session session); + public signal void session_removed(Session session); - private Map<string, ArrayList<SessionStore.Session>> session_map = new HashMap<string, ArrayList<SessionStore.Session>>(); + private Map<string, ArrayList<Session>> session_map = new HashMap<string, ArrayList<Session>>(); public override uint8[]? load_session(Address address) throws Error { if (session_map.has_key(address.name)) { - foreach (SessionStore.Session session in session_map[address.name]) { + foreach (Session session in session_map[address.name]) { if (session.device_id == address.device_id) return session.record; } } @@ -19,7 +21,7 @@ public class SimpleSessionStore : SessionStore { public override IntList get_sub_device_sessions(string name) throws Error { IntList res = new IntList(); if (session_map.has_key(name)) { - foreach (SessionStore.Session session in session_map[name]) { + foreach (Session session in session_map[name]) { res.add(session.device_id); } } @@ -31,16 +33,16 @@ public class SimpleSessionStore : SessionStore { delete_session(address); } if (!session_map.has_key(address.name)) { - session_map[address.name] = new ArrayList<SessionStore.Session>(); + session_map[address.name] = new ArrayList<Session>(); } - SessionStore.Session session = new Session() { name = address.name, device_id = address.device_id, record = record }; + Session session = new Session() { name = address.name, device_id = address.device_id, record = record }; session_map[address.name].add(session); session_stored(session); } public override bool contains_session(Address address) throws Error { if (!session_map.has_key(address.name)) return false; - foreach (SessionStore.Session session in session_map[address.name]) { + foreach (Session session in session_map[address.name]) { if (session.device_id == address.device_id) return true; } return false; @@ -48,7 +50,7 @@ public class SimpleSessionStore : SessionStore { public override void delete_session(Address address) throws Error { if (!session_map.has_key(address.name)) throw_by_code(ErrorCode.UNKNOWN, "No session found"); - foreach (SessionStore.Session session in session_map[address.name]) { + foreach (Session session in session_map[address.name]) { if (session.device_id == address.device_id) { session_map[address.name].remove(session); if (session_map[address.name].size == 0) { @@ -62,7 +64,7 @@ public class SimpleSessionStore : SessionStore { public override void delete_all_sessions(string name) throws Error { if (session_map.has_key(name)) { - foreach (SessionStore.Session session in session_map[name]) { + foreach (Session session in session_map[name]) { session_map[name].remove(session); if (session_map[name].size == 0) { session_map.unset(name); @@ -71,6 +73,12 @@ public class SimpleSessionStore : SessionStore { } } } + + public class Session { + public string name; + public int device_id; + public uint8[] record; + } } }
\ No newline at end of file |
