From 41913a0aea082c953952fe31d81c72a101d2cca9 Mon Sep 17 00:00:00 2001 From: DebXWoody Date: Tue, 1 Jun 2021 06:39:32 +0200 Subject: [PATCH] OMEMO - Unable to publish own device list If we are not able to publish our own device list, we just ignored it. This commit will show at least an error message and informs the user that this device is currently not in the list of devices. See Issue: #1538 Next task will be to handle the conflict properly. --- src/omemo/omemo.c | 5 +++-- src/xmpp/omemo.c | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index b6c7585d..192d3d2a 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -1335,14 +1335,15 @@ _handle_own_device_list(const char* const jid, GList* device_list) { // We didn't find the own device id -> publish if (!g_list_find(device_list, GINT_TO_POINTER(omemo_ctx.device_id))) { - log_debug("[OMEMO] No device id for our device? publish device list..."); + cons_show("Could not find own OMEMO device ID. Going to publish own device ID: %d", GINT_TO_POINTER(omemo_ctx.device_id)); + log_debug("[OMEMO] No device ID for our device. Publishing device list"); device_list = g_list_copy(device_list); device_list = g_list_append(device_list, GINT_TO_POINTER(omemo_ctx.device_id)); g_hash_table_insert(omemo_ctx.device_list, strdup(jid), device_list); omemo_devicelist_publish(device_list); } - log_debug("[OMEMO] Request OMEMO Bundles for my devices..."); + log_debug("[OMEMO] Request OMEMO Bundles for our devices"); GList* device_id; for (device_id = device_list; device_id != NULL; device_id = device_id->next) { omemo_bundle_request(jid, GPOINTER_TO_INT(device_id->data), omemo_start_device_session_handle_bundle, free, strdup(jid)); diff --git a/src/xmpp/omemo.c b/src/xmpp/omemo.c index 773d6224..54cd12ad 100644 --- a/src/xmpp/omemo.c +++ b/src/xmpp/omemo.c @@ -51,6 +51,8 @@ static int _omemo_bundle_publish_result(xmpp_stanza_t* const stanza, void* const static int _omemo_bundle_publish_configure(xmpp_stanza_t* const stanza, void* const userdata); static int _omemo_bundle_publish_configure_result(xmpp_stanza_t* const stanza, void* const userdata); +static int _omemo_device_list_publish_result(xmpp_stanza_t* const stanza, void* const userdata); + void omemo_devicelist_subscribe(void) { @@ -71,6 +73,8 @@ omemo_devicelist_publish(GList* device_list) stanza_attach_publish_options(ctx, iq, "pubsub#access_model", "open"); } + iq_id_handler_add(xmpp_stanza_get_id(iq), _omemo_device_list_publish_result, NULL, NULL); + iq_send_stanza(iq); xmpp_stanza_release(iq); } @@ -608,3 +612,15 @@ _omemo_bundle_publish_configure_result(xmpp_stanza_t* const stanza, void* const return 0; } + +static int +_omemo_device_list_publish_result(xmpp_stanza_t* const stanza, void* const userdata) +{ + const char* type = xmpp_stanza_get_type(stanza); + if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) { + cons_show_error("Unable to publish own OMEMO device list"); + log_error("[OMEMO] Publishing device list failed"); + return 0; + } + return 0; +}