From e7bc68ad4d02b8e5f6ba26c0e917abf4d9ab2ccc Mon Sep 17 00:00:00 2001 From: fiaxh Date: Thu, 23 Apr 2020 13:53:44 +0200 Subject: Handle entity hash in server features node, make ServiceDiscovery request_info/items async, add caching has_entity_feature --- .../src/module/xep/0363_http_file_upload.vala | 23 ++++++++++------------ 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'xmpp-vala/src/module/xep/0363_http_file_upload.vala') diff --git a/xmpp-vala/src/module/xep/0363_http_file_upload.vala b/xmpp-vala/src/module/xep/0363_http_file_upload.vala index d3faae2d..64fbbebc 100644 --- a/xmpp-vala/src/module/xep/0363_http_file_upload.vala +++ b/xmpp-vala/src/module/xep/0363_http_file_upload.vala @@ -105,25 +105,22 @@ public class Module : XmppStreamModule { } public override void detach(XmppStream stream) { - stream.get_module(Bind.Module.IDENTITY).bound_to_resource.disconnect(query_availability); + stream.stream_negotiated.disconnect(query_availability); } public override string get_ns() { return NS_URI; } public override string get_id() { return IDENTITY.id; } - private void query_availability(XmppStream stream) { - stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, stream.remote_name, (stream, info_result) => { - bool available = check_ns_in_info(stream, stream.remote_name, info_result); - if (!available) { - stream.get_module(ServiceDiscovery.Module.IDENTITY).request_items(stream, stream.remote_name, (stream, items_result) => { - foreach (Xep.ServiceDiscovery.Item item in items_result.items) { - stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, item.jid, (stream, info_result) => { - check_ns_in_info(stream, item.jid, info_result); - }); - } - }); + private async void query_availability(XmppStream stream) { + ServiceDiscovery.InfoResult? info_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, stream.remote_name); + bool available = check_ns_in_info(stream, stream.remote_name, info_result); + if (!available) { + ServiceDiscovery.ItemsResult? items_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_items(stream, stream.remote_name); + foreach (Xep.ServiceDiscovery.Item item in items_result.items) { + ServiceDiscovery.InfoResult? info_result2 = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, item.jid); + check_ns_in_info(stream, item.jid, info_result2); } - }); + } } private bool check_ns_in_info(XmppStream stream, Jid jid, Xep.ServiceDiscovery.InfoResult info_result) { -- cgit v1.2.3-54-g00ecf