aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2020-04-21 16:25:21 +0200
committerfiaxh <git@lightrise.org>2020-04-21 16:25:21 +0200
commit7c4260eed718961874fc0ea665263ea2ce59338b (patch)
tree7d583974ebf797e7e827836176c87735a87c39f6 /xmpp-vala/src/module/xep/0030_service_discovery/module.vala
parent3a8fef7b7b3c101c4bcb8cd3d7460a009c98a41e (diff)
downloaddino-7c4260eed718961874fc0ea665263ea2ce59338b.tar.gz
dino-7c4260eed718961874fc0ea665263ea2ce59338b.zip
Remove features from service discovery module when detaching module from stream
fixes #179 fixes #812
Diffstat (limited to 'xmpp-vala/src/module/xep/0030_service_discovery/module.vala')
-rw-r--r--xmpp-vala/src/module/xep/0030_service_discovery/module.vala33
1 files changed, 25 insertions, 8 deletions
diff --git a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
index e2bb46f8..332e8fc3 100644
--- a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
+++ b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
@@ -9,27 +9,39 @@ public const string NS_URI_ITEMS = NS_URI + "#items";
public class Module : XmppStreamModule, Iq.Handler {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0030_service_discovery_module");
- public ArrayList<Identity> identities = new ArrayList<Identity>();
+ public Identity own_identity;
public Module.with_identity(string category, string type, string? name = null) {
- add_identity(category, type, name);
+ own_identity = new Identity(category, type, name);
}
public void add_feature(XmppStream stream, string feature) {
stream.get_flag(Flag.IDENTITY).add_own_feature(feature);
}
+ public void remove_feature(XmppStream stream, string feature) {
+ stream.get_flag(Flag.IDENTITY).remove_own_feature(feature);
+ }
+
public void add_feature_notify(XmppStream stream, string feature) {
add_feature(stream, feature + "+notify");
}
- public void add_identity(string category, string type, string? name = null) {
- identities.add(new Identity(category, type, name));
+ public void remove_feature_notify(XmppStream stream, string feature) {
+ remove_feature(stream, feature + "+notify");
+ }
+
+ public void add_identity(XmppStream stream, Identity identity) {
+ stream.get_flag(Flag.IDENTITY).add_own_identity(identity);
}
- public delegate void HasEntryCategoryRes(XmppStream stream, Gee.List<Identity>? identities);
+ public void remove_identity(XmppStream stream, Identity identity) {
+ stream.get_flag(Flag.IDENTITY).remove_own_identity(identity);
+ }
+
+ public delegate void HasEntryCategoryRes(XmppStream stream, Gee.Set<Identity>? identities);
public void get_entity_categories(XmppStream stream, Jid jid, owned HasEntryCategoryRes listener) {
- Gee.List<Identity>? res = stream.get_flag(Flag.IDENTITY).get_entity_categories(jid);
+ Gee.Set<Identity>? res = stream.get_flag(Flag.IDENTITY).get_entity_categories(jid);
if (res != null) listener(stream, res);
request_info(stream, jid, (stream, query_result) => {
listener(stream, query_result != null ? query_result.identities : null);
@@ -68,12 +80,17 @@ public class Module : XmppStreamModule, Iq.Handler {
public override void attach(XmppStream stream) {
stream.add_flag(new Flag());
+ add_identity(stream, own_identity);
+
stream.get_module(Iq.Module.IDENTITY).register_for_namespace(NS_URI_INFO, this);
add_feature(stream, NS_URI_INFO);
}
public override void detach(XmppStream stream) {
+ remove_identity(stream, own_identity);
+
stream.get_module(Iq.Module.IDENTITY).unregister_from_namespace(NS_URI_INFO, this);
+ remove_feature(stream, NS_URI_INFO);
}
public static void require(XmppStream stream) {
@@ -85,8 +102,8 @@ public class Module : XmppStreamModule, Iq.Handler {
private void send_query_result(XmppStream stream, Iq.Stanza iq_request) {
InfoResult query_result = new ServiceDiscovery.InfoResult(iq_request);
- query_result.features = stream.get_flag(Flag.IDENTITY).features;
- query_result.identities = identities;
+ query_result.features = stream.get_flag(Flag.IDENTITY).own_features;
+ query_result.identities = stream.get_flag(Flag.IDENTITY).own_identities;
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, query_result.iq);
}
}