From 7c4260eed718961874fc0ea665263ea2ce59338b Mon Sep 17 00:00:00 2001 From: fiaxh Date: Tue, 21 Apr 2020 16:25:21 +0200 Subject: Remove features from service discovery module when detaching module from stream fixes #179 fixes #812 --- xmpp-vala/src/module/xep/0115_entitiy_capabilities.vala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'xmpp-vala/src/module/xep/0115_entitiy_capabilities.vala') diff --git a/xmpp-vala/src/module/xep/0115_entitiy_capabilities.vala b/xmpp-vala/src/module/xep/0115_entitiy_capabilities.vala index 22946d4b..1d5d10c9 100644 --- a/xmpp-vala/src/module/xep/0115_entitiy_capabilities.vala +++ b/xmpp-vala/src/module/xep/0115_entitiy_capabilities.vala @@ -28,7 +28,7 @@ namespace Xmpp.Xep.EntityCapabilities { private string get_own_hash(XmppStream stream) { if (own_ver_hash == null) { - own_ver_hash = compute_hash(stream.get_module(ServiceDiscovery.Module.IDENTITY).identities, stream.get_flag(ServiceDiscovery.Flag.IDENTITY).features, new ArrayList()); + own_ver_hash = compute_hash(stream.get_flag(ServiceDiscovery.Flag.IDENTITY).own_identities, stream.get_flag(ServiceDiscovery.Flag.IDENTITY).own_features, new ArrayList()); } return own_ver_hash; } @@ -42,6 +42,7 @@ namespace Xmpp.Xep.EntityCapabilities { public override void detach(XmppStream stream) { stream.get_module(Presence.Module.IDENTITY).pre_send_presence_stanza.disconnect(on_pre_send_presence_stanza); stream.get_module(Presence.Module.IDENTITY).received_presence.disconnect(on_received_presence); + stream.get_module(ServiceDiscovery.Module.IDENTITY).remove_feature(stream, NS_URI); } public override string get_ns() { return NS_URI; } @@ -86,7 +87,10 @@ namespace Xmpp.Xep.EntityCapabilities { } } - private static string compute_hash(Gee.List identities, Gee.List features, Gee.List data_forms) { + private static string compute_hash(Gee.Set identities_set, Gee.List features, Gee.List data_forms) { + var identities = new ArrayList(); + foreach (var identity in identities_set) identities.add(identity); + identities.sort(compare_identities); features.sort(); @@ -154,7 +158,7 @@ namespace Xmpp.Xep.EntityCapabilities { } public interface Storage : Object { - public abstract void store_identities(string entity, Gee.List identities); + public abstract void store_identities(string entity, Gee.Set identities); public abstract void store_features(string entity, Gee.List capabilities); public abstract ServiceDiscovery.Identity? get_identities(string entity); public abstract Gee.List get_features(string entity); -- cgit v1.3