1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-11-03 19:37:16 -05:00

Messages are not shown in ChatSecure

In 0.9.x we fixed an issue, because OMEMO devices should be defined in "item"
with id "current". This should work, but it won't work if there is no "current".
If there is no "current" we will just use the first item.

Issue #1384
This commit is contained in:
DebXWoody 2020-07-03 18:30:23 +02:00 committed by Michael Vetter
parent 3af5f33489
commit 54667c022f
2 changed files with 39 additions and 21 deletions

View File

@ -98,7 +98,6 @@ struct omemo_context_t {
GHashTable *pre_key_store;
GHashTable *signed_pre_key_store;
identity_key_store_t identity_key_store;
GHashTable *device_ids;
GString *identity_filename;
GKeyFile *identity_keyfile;
GString *trust_filename;

View File

@ -441,29 +441,48 @@ _omemo_receive_devicelist(xmpp_stanza_t *const stanza, void *const userdata)
return 1;
}
xmpp_stanza_t *item = xmpp_stanza_get_child_by_name(items, "item");
if (item) {
if (g_strcmp0(xmpp_stanza_get_id(item), "current") == 0 ) {
xmpp_stanza_t *list = xmpp_stanza_get_child_by_ns(item, STANZA_NS_OMEMO);
if (!list) {
return 1;
}
xmpp_stanza_t *device;
for (device = xmpp_stanza_get_children(list); device != NULL; device = xmpp_stanza_get_next(device)) {
if (g_strcmp0(xmpp_stanza_get_name(device), "device") != 0) {
continue;
}
const char *id = xmpp_stanza_get_id(device);
if (id != NULL) {
device_list = g_list_append(device_list, GINT_TO_POINTER(strtoul(id, NULL, 10)));
} else {
log_error("OMEMO: received device without ID");
}
// Looking for "current" item - if there is no current, take the first item.
xmpp_stanza_t* first = NULL;
xmpp_stanza_t* current = NULL;
xmpp_stanza_t *item = xmpp_stanza_get_children(items);
while ( item ) {
if (g_strcmp0(xmpp_stanza_get_name(item), "item") == 0) {
first = item;
if (g_strcmp0(xmpp_stanza_get_id(item), "current") == 0 ) {
current = item;
break;
}
}
item = xmpp_stanza_get_next(item);
}
if(current) {
item = current;
} else if( first ) {
log_warning("OMEMO: User %s has a non 'current' device item list: %s.", from, xmpp_stanza_get_id(first));
item = first;
} else {
return 1;
}
xmpp_stanza_t *list = xmpp_stanza_get_child_by_ns(item, STANZA_NS_OMEMO);
if (!list) {
return 1;
}
xmpp_stanza_t *device;
for (device = xmpp_stanza_get_children(list); device != NULL; device = xmpp_stanza_get_next(device)) {
if (g_strcmp0(xmpp_stanza_get_name(device), "device") != 0) {
continue;
}
const char *id = xmpp_stanza_get_id(device);
if (id != NULL) {
device_list = g_list_append(device_list, GINT_TO_POINTER(strtoul(id, NULL, 10)));
} else {
log_warning("OMEMO: User %s has a non 'current' device item list: %s.", from, xmpp_stanza_get_id(item));
log_error("OMEMO: received device without ID");
}
}