Mercurial > prosody-modules
diff mod_delegation/mod_delegation.lua @ 1717:e22cd2205fc1
mod_delegation: reset features/identities/extensions before doing a disco nesting
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 18 Apr 2015 00:13:10 +0200 |
parents | 29dfdfc767b4 |
children | 48be6e7efbe8 |
line wrap: on
line diff
--- a/mod_delegation/mod_delegation.lua Sat Apr 18 00:13:09 2015 +0200 +++ b/mod_delegation/mod_delegation.lua Sat Apr 18 00:13:10 2015 +0200 @@ -370,9 +370,7 @@ for feature in query:childtags("feature") do local namespace = feature.attr.var if main then - if not module:has_feature(namespace) then -- we avoid doubling features in case of disconnection/reconnexion - module:add_feature(namespace) - end + module:add_feature(namespace) else bare_features:add(namespace) end @@ -380,20 +378,9 @@ for identity in query:childtags("identity") do local category, type_, name = identity.attr.category, identity.attr.type, identity.attr.name if main then - if not module:has_identity(category, type_, name) then - module:add_identity(category, type_, name) - end + module:add_identity(category, type_, name) else - local found=false - for _, item in ipairs(bare_identities) do - if item.category == category and item.type == type_ and item.name == name then - found=true - break - end - end - if not found then - table.insert(bare_identities, {category=category, type=type_, name=name}) - end + table.insert(bare_identities, {category=category, type=type_, name=name}) end end for extension in query:childtags("x", _DATA_NS) do @@ -418,6 +405,18 @@ end function disco_nest(namespace, entity_jid) + -- manage discovery nesting (see ยง 7.2) + + -- first we reset the current values + if module.items then + module.items['feature'] = nil + module.items['identity'] = nil + module.items['extension'] = nil + bare_features = set.new() + bare_identities = {} + bare_extensions = {} + end + for _, prefix in ipairs(_PREFIXES) do local node = prefix..namespace