mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge branch 'omemofix'
This commit is contained in:
commit
bf170d6c91
@ -98,7 +98,6 @@ struct omemo_context_t {
|
|||||||
GHashTable *pre_key_store;
|
GHashTable *pre_key_store;
|
||||||
GHashTable *signed_pre_key_store;
|
GHashTable *signed_pre_key_store;
|
||||||
identity_key_store_t identity_key_store;
|
identity_key_store_t identity_key_store;
|
||||||
GHashTable *device_ids;
|
|
||||||
GString *identity_filename;
|
GString *identity_filename;
|
||||||
GKeyFile *identity_keyfile;
|
GKeyFile *identity_keyfile;
|
||||||
GString *trust_filename;
|
GString *trust_filename;
|
||||||
|
@ -441,29 +441,48 @@ _omemo_receive_devicelist(xmpp_stanza_t *const stanza, void *const userdata)
|
|||||||
return 1;
|
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;
|
// Looking for "current" item - if there is no current, take the first item.
|
||||||
for (device = xmpp_stanza_get_children(list); device != NULL; device = xmpp_stanza_get_next(device)) {
|
xmpp_stanza_t* first = NULL;
|
||||||
if (g_strcmp0(xmpp_stanza_get_name(device), "device") != 0) {
|
xmpp_stanza_t* current = NULL;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *id = xmpp_stanza_get_id(device);
|
xmpp_stanza_t *item = xmpp_stanza_get_children(items);
|
||||||
if (id != NULL) {
|
while ( item ) {
|
||||||
device_list = g_list_append(device_list, GINT_TO_POINTER(strtoul(id, NULL, 10)));
|
if (g_strcmp0(xmpp_stanza_get_name(item), "item") == 0) {
|
||||||
} else {
|
first = item;
|
||||||
log_error("OMEMO: received device without ID");
|
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 {
|
} 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