aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0363_http_file_upload.vala
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2020-04-25 16:12:08 +0200
committerfiaxh <git@lightrise.org>2020-04-25 16:15:43 +0200
commitee9795d8f466706e06b2fdbc9beca2f8ecbf5d08 (patch)
tree17f4ecdf43e0fe031e220d58d0cade7b70711440 /xmpp-vala/src/module/xep/0363_http_file_upload.vala
parent231df1bbbb683fa0c74f2f10743f7592e219eccd (diff)
downloaddino-ee9795d8f466706e06b2fdbc9beca2f8ecbf5d08.tar.gz
dino-ee9795d8f466706e06b2fdbc9beca2f8ecbf5d08.zip
Handle if Items/InfoResult are null
Diffstat (limited to 'xmpp-vala/src/module/xep/0363_http_file_upload.vala')
-rw-r--r--xmpp-vala/src/module/xep/0363_http_file_upload.vala20
1 files changed, 16 insertions, 4 deletions
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) {