aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
diff options
context:
space:
mode:
authorfiaxh <git@mx.ax.lt>2017-03-31 01:17:01 +0200
committerfiaxh <git@mx.ax.lt>2017-03-31 16:39:28 +0200
commit22adbd38dca0868f0e10754314a3859bba0a7d87 (patch)
tree44ecf9cf8af6aef78030dade95aecb1de2b99873 /xmpp-vala/src/module/xep/0030_service_discovery/module.vala
parent7d2f995a097086be01426cc79c9c801dabaf9e3b (diff)
downloaddino-22adbd38dca0868f0e10754314a3859bba0a7d87.tar.gz
dino-22adbd38dca0868f0e10754314a3859bba0a7d87.zip
Handle MUC private messages
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.vala153
1 files changed, 69 insertions, 84 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 4b51e230..2ec0f630 100644
--- a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
+++ b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
@@ -3,109 +3,94 @@ using Gee;
using Xmpp.Core;
namespace Xmpp.Xep.ServiceDiscovery {
- private const string NS_URI = "http://jabber.org/protocol/disco";
- public const string NS_URI_INFO = NS_URI + "#info";
- 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");
+private const string NS_URI = "http://jabber.org/protocol/disco";
+public const string NS_URI_INFO = NS_URI + "#info";
+public const string NS_URI_ITEMS = NS_URI + "#items";
- public ArrayList<Identity> identities = new ArrayList<Identity>();
+public class Module : XmppStreamModule, Iq.Handler {
+ public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0030_service_discovery_module");
- public Module.with_identity(string category, string type, string? name = null) {
- add_identity(category, type, name);
- }
-
- public void add_feature(XmppStream stream, string feature) {
- stream.get_flag(Flag.IDENTITY).add_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));
- }
-
- [CCode (has_target = false)] public delegate void OnInfoResult(XmppStream stream, InfoResult query_result, Object? store);
- public void request_info(XmppStream stream, string jid, OnInfoResult listener, Object? store) {
- Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_INFO).add_self_xmlns());
- iq.to = jid;
- stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, on_request_info_response, Tuple.create(listener, store));
- }
-
- [CCode (has_target = false)] public delegate void OnItemsResult(XmppStream stream, ItemsResult query_result);
- public void request_items(XmppStream stream, string jid, OnItemsResult listener, Object? store) {
- Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_ITEMS).add_self_xmlns());
- iq.to = jid;
- stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq);
- }
-
- public void on_iq_get(XmppStream stream, Iq.Stanza iq) {
- StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI_INFO);
- if (query_node != null) {
- send_query_result(stream, iq);
- }
- }
+ public ArrayList<Identity> identities = new ArrayList<Identity>();
- public void on_iq_set(XmppStream stream, Iq.Stanza iq) { }
+ public Module.with_identity(string category, string type, string? name = null) {
+ add_identity(category, type, name);
+ }
- public override void attach(XmppStream stream) {
- Iq.Module.require(stream);
- stream.get_module(Iq.Module.IDENTITY).register_for_namespace(NS_URI_INFO, this);
- stream.add_flag(new Flag());
- add_feature(stream, NS_URI_INFO);
- }
+ public void add_feature(XmppStream stream, string feature) {
+ stream.get_flag(Flag.IDENTITY).add_own_feature(feature);
+ }
- public override void detach(XmppStream stream) { }
+ public void add_feature_notify(XmppStream stream, string feature) {
+ add_feature(stream, feature + "+notify");
+ }
- public static void require(XmppStream stream) {
- if (stream.get_module(IDENTITY) == null) stream.add_module(new ServiceDiscovery.Module());
- }
+ public void add_identity(string category, string type, string? name = null) {
+ identities.add(new Identity(category, type, name));
+ }
- public override string get_ns() { return NS_URI; }
- public override string get_id() { return IDENTITY.id; }
+ [CCode (has_target = false)] public delegate void HasEntryCategoryRes(XmppStream stream, ArrayList<Identity>? identities, Object? store);
+ public void get_entity_categories(XmppStream stream, string jid, HasEntryCategoryRes on_result, Object? store) {
+ ArrayList<Identity>? res = stream.get_flag(Flag.IDENTITY).get_entity_categories(jid);
+ if (res != null) on_result(stream, res, store);
+ request_info(stream, jid, (stream, query_result, store) => {
+ Tuple<HasEntryCategoryRes, Object> tuple = store as Tuple<HasEntryCategoryRes, Object>;
+ tuple.a(stream, query_result != null ? query_result.identities : null, tuple.b);
+ }, Tuple.create(on_result, store));
+ }
- private static void on_request_info_response(XmppStream stream, Iq.Stanza iq, Object o) {
+ [CCode (has_target = false)] public delegate void OnInfoResult(XmppStream stream, InfoResult? query_result, Object? store);
+ public void request_info(XmppStream stream, string jid, OnInfoResult listener, Object? store) {
+ Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_INFO).add_self_xmlns());
+ iq.to = jid;
+ stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq, o) => {
Tuple<OnInfoResult, Object> tuple = o as Tuple<OnInfoResult, Object>;
OnInfoResult on_result = tuple.a;
InfoResult? result = InfoResult.create_from_iq(iq);
- if (result != null) {
- stream.get_flag(Flag.IDENTITY).set_entitiy_features(iq.from, result.features);
- on_result(stream, result, tuple.b);
- }
- }
+ stream.get_flag(Flag.IDENTITY).set_entity_features(iq.from, result != null ? result.features : null);
+ stream.get_flag(Flag.IDENTITY).set_entity_identities(iq.from, result != null ? result.identities : null);
+ on_result(stream, result, tuple.b);
+ }, Tuple.create(listener, store));
+ }
+
+ [CCode (has_target = false)] public delegate void OnItemsResult(XmppStream stream, ItemsResult query_result);
+ public void request_items(XmppStream stream, string jid, OnItemsResult listener, Object? store) {
+ Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_ITEMS).add_self_xmlns());
+ iq.to = jid;
+ stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq);
+ }
- 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;
- stream.get_module(Iq.Module.IDENTITY).send_iq(stream, query_result.iq);
+ public void on_iq_get(XmppStream stream, Iq.Stanza iq) {
+ StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI_INFO);
+ if (query_node != null) {
+ send_query_result(stream, iq);
}
}
- public class Identity {
- public string category { get; set; }
- public string type_ { get; set; }
- public string? name { get; set; }
+ public void on_iq_set(XmppStream stream, Iq.Stanza iq) { }
- public Identity(string category, string type, string? name = null) {
- this.category = category;
- this.type_ = type;
- this.name = name;
- }
+ public override void attach(XmppStream stream) {
+ Iq.Module.require(stream);
+ stream.get_module(Iq.Module.IDENTITY).register_for_namespace(NS_URI_INFO, this);
+ stream.add_flag(new Flag());
+ add_feature(stream, NS_URI_INFO);
}
- public class Item {
- public string jid;
- public string? name;
- public string? node;
+ public override void detach(XmppStream stream) { }
- public Item(string jid, string? name = null, string? node = null) {
- this.jid = jid;
- this.name = name;
- this.node = node;
- }
+ public static void require(XmppStream stream) {
+ if (stream.get_module(IDENTITY) == null) stream.add_module(new ServiceDiscovery.Module());
}
+
+ public override string get_ns() { return NS_URI; }
+ public override string get_id() { return IDENTITY.id; }
+
+ 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;
+ stream.get_module(Iq.Module.IDENTITY).send_iq(stream, query_result.iq);
+ }
+}
+
}