aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/crypto/omemo/simple_ss.vala
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2026-10-23 16:46:01 +0200
committerMarvin W <git@larma.de>2026-10-23 17:01:44 +0200
commit5bf8b829b7f7f2fb6e2b920eed8eace6a801157c (patch)
treeb6a4ce6ca29c9ce96dd4547b825436f20e83a793 /libdino/src/crypto/omemo/simple_ss.vala
parent2eb311938665f92ef48e2cfa030720fc68ca7cc9 (diff)
omemo: Hand direct database access to libomemo
Previously used an in-memory map to represent the database content and kept those in sync
Diffstat (limited to 'libdino/src/crypto/omemo/simple_ss.vala')
-rw-r--r--libdino/src/crypto/omemo/simple_ss.vala24
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