X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmod_disco.lua;h=72c9a34c85ca87ec954e2e1c0dec6ebf45f4ad1c;hb=6215c7e1ebde79b5f618035c4333b22a6276e821;hp=9fc890ee31608556814a3c3840ff9be8c75f4496;hpb=1a08dde7bb2a62f3cc1a7896a1814c55fbe3bd39;p=prosody.git diff --git a/plugins/mod_disco.lua b/plugins/mod_disco.lua index 9fc890ee..72c9a34c 100644 --- a/plugins/mod_disco.lua +++ b/plugins/mod_disco.lua @@ -6,7 +6,7 @@ -- COPYING file in the source package for more information. -- -local componentmanager_get_children = require "core.componentmanager".get_children; +local get_children = require "core.hostmanager".get_children; local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; local jid_split = require "util.jid".split; local jid_bare = require "util.jid".bare; @@ -32,7 +32,7 @@ do -- validate disco_items end end -module:add_identity("server", "im", "Prosody"); -- FIXME should be in the non-existing mod_router +module:add_identity("server", "im", module:get_option_string("name", "Prosody")); -- FIXME should be in the non-existing mod_router module:add_feature("http://jabber.org/protocol/disco#info"); module:add_feature("http://jabber.org/protocol/disco#items"); @@ -54,6 +54,12 @@ local function build_server_disco_info() done[feature] = true; end end + for _,extension in ipairs(module:get_host_items("extension")) do + if not done[extension] then + query:add_child(extension); + done[extension] = true; + end + end _cached_server_disco_info = query; _cached_server_caps_hash = calculate_hash(query); _cached_server_caps_feature = st.stanza("c", { @@ -81,6 +87,10 @@ end module:hook("item-added/identity", clear_disco_cache); module:hook("item-added/feature", clear_disco_cache); +module:hook("item-added/extension", clear_disco_cache); +module:hook("item-removed/identity", clear_disco_cache); +module:hook("item-removed/feature", clear_disco_cache); +module:hook("item-removed/extension", clear_disco_cache); -- Handle disco requests to the server module:hook("iq/host/http://jabber.org/protocol/disco#info:query", function(event) @@ -101,8 +111,8 @@ module:hook("iq/host/http://jabber.org/protocol/disco#items:query", function(eve if node and node ~= "" then return; end -- TODO fire event? local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#items"); - for jid in pairs(componentmanager_get_children(module.host)) do - reply:tag("item", {jid = jid}):up(); + for jid, name in pairs(get_children(module.host)) do + reply:tag("item", {jid = jid, name = name~=true and name or nil}):up(); end for _, item in ipairs(disco_items) do reply:tag("item", {jid=item[1], name=item[2]}):up(); @@ -113,7 +123,9 @@ end); -- Handle caps stream feature module:hook("stream-features", function (event) - event.features:add_child(get_server_caps_feature()); + if event.origin.type == "c2s" then + event.features:add_child(get_server_caps_feature()); + end end); -- Handle disco requests to user accounts