about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2021-11-30 15:31:51 +0100
committerGitHub <noreply@github.com>2021-11-30 15:31:51 +0100
commit7a8f0e487370d952560585e414e83441de602bd6 (patch)
treeb56e79edbd66e92174edf168b5538b1d0a2743a5
parent9efceb8240c228fd0979365faa40559dcaa020c6 (diff)
parentfee23b55f08c3635731aa625e31bd54f14282cb6 (diff)
downloadprofani-tty-7a8f0e487370d952560585e414e83441de602bd6.tar.gz
Merge pull request #1610 from nandesu-utils/master
Fix message encryption for sender devices
-rw-r--r--src/omemo/omemo.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c
index e1126e62..4d53ad0c 100644
--- a/src/omemo/omemo.c
+++ b/src/omemo/omemo.c
@@ -84,6 +84,7 @@ static unsigned char* _omemo_fingerprint_decode(const char* const fingerprint, s
 static char* _omemo_unformat_fingerprint(const char* const fingerprint_formatted);
 static void _cache_device_identity(const char* const jid, uint32_t device_id, ec_public_key* identity);
 static void _g_hash_table_free(GHashTable* hash_table);
+static void _acquire_sender_devices_list(void);
 
 typedef gboolean (*OmemoDeviceListHandler)(const char* const jid, GList* device_list);
 
@@ -384,21 +385,26 @@ omemo_publish_crypto_materials(void)
         return;
     }
 
+    omemo_bundle_publish(true);
+}
+
+static void _acquire_sender_devices_list(void) {
     char* barejid = connection_get_barejid();
 
-    /* Ensure we get our current device list, and it gets updated with our
-     * device_id */
     g_hash_table_insert(omemo_ctx.device_list_handler, strdup(barejid), _handle_own_device_list);
     omemo_devicelist_request(barejid);
 
-    omemo_bundle_publish(true);
-
     free(barejid);
 }
 
 void
 omemo_start_sessions(void)
 {
+    // before any session may be started, a list on
+    // available sender devices must be acquired
+    log_debug("[OMEMO] Acquiring sender devices list");
+    _acquire_sender_devices_list();
+
     GSList* contacts = roster_get_contacts(ROSTER_ORD_NAME);
     if (contacts) {
         GSList* curr;