HTTP-Upload: parsing max-file-size attribute (#809)

When a server returns multiple <x/> elements
in response to a discinfo query, this change
uses all of them instead of just the first one.
This commit is contained in:
kmq 2020-04-17 17:50:10 +00:00 committed by GitHub
parent 13d3d2aca6
commit fcad6720e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -154,14 +154,16 @@ public class Module : XmppStreamModule {
private long extract_max_file_size(Xep.ServiceDiscovery.InfoResult info_result) {
string? max_file_size_str = null;
StanzaNode x_node = info_result.iq.stanza.get_deep_subnode("http://jabber.org/protocol/disco#info:query", "jabber:x:data:x");
Gee.List<StanzaNode> field_nodes = x_node.get_subnodes("field", "jabber:x:data");
foreach (StanzaNode node in field_nodes) {
string? var_attr = node.get_attribute("var");
if (var_attr == "max-file-size") {
StanzaNode value_node = node.get_subnode("value", "jabber:x:data");
max_file_size_str = value_node.get_string_content();
break;
Gee.List<StanzaNode> x_nodes = info_result.iq.stanza.get_deep_subnodes("http://jabber.org/protocol/disco#info:query", "jabber:x:data:x");
foreach(StanzaNode x_node in x_nodes) {
Gee.List<StanzaNode> field_nodes = x_node.get_subnodes("field", "jabber:x:data");
foreach (StanzaNode node in field_nodes) {
string? var_attr = node.get_attribute("var");
if (var_attr == "max-file-size") {
StanzaNode value_node = node.get_subnode("value", "jabber:x:data");
max_file_size_str = value_node.get_string_content();
break;
}
}
}
if (max_file_size_str != null) return long.parse(max_file_size_str);