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:
parent
3af5f33489
commit
54667c022f
@ -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;
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user