From ee9795d8f466706e06b2fdbc9beca2f8ecbf5d08 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sat, 25 Apr 2020 16:12:08 +0200 Subject: Handle if Items/InfoResult are null --- xmpp-vala/src/module/xep/0363_http_file_upload.vala | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 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 64fbbebc..a6ebbecb 100644 --- a/xmpp-vala/src/module/xep/0363_http_file_upload.vala +++ b/xmpp-vala/src/module/xep/0363_http_file_upload.vala @@ -116,14 +116,26 @@ public class Module : XmppStreamModule { 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); + if (items_result == null) return; + + for (int i = 0; i < 2; i++) { + foreach (Xep.ServiceDiscovery.Item item in items_result.items) { + + // First try the promising items and only afterwards all the others + bool promising_upload_item = item.jid.to_string().has_prefix("upload"); + if ((i == 0 && !promising_upload_item) || (i == 1) && promising_upload_item) continue; + + ServiceDiscovery.InfoResult? info_result2 = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, item.jid); + bool available2 = check_ns_in_info(stream, item.jid, info_result2); + if (available2) return; + } } } } - private bool check_ns_in_info(XmppStream stream, Jid jid, Xep.ServiceDiscovery.InfoResult info_result) { + private bool check_ns_in_info(XmppStream stream, Jid jid, Xep.ServiceDiscovery.InfoResult? info_result) { + if (info_result == null) return false; + bool ver_available = false; bool ver_0_available = false; foreach (string feature in info_result.features) { -- cgit v1.2.3-54-g00ecf