projects
/
prosody.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge 0.9->trunk
[prosody.git]
/
plugins
/
mod_disco.lua
diff --git
a/plugins/mod_disco.lua
b/plugins/mod_disco.lua
index 8bb0afec58ade2e8e6090db527c745a104aca53b..72c9a34c85ca87ec954e2e1c0dec6ebf45f4ad1c 100644
(file)
--- a/
plugins/mod_disco.lua
+++ b/
plugins/mod_disco.lua
@@
-6,7
+6,7
@@
-- COPYING file in the source package for more information.
--
-- COPYING file in the source package for more information.
--
-local
componentmanager_get_children = require "core.componen
tmanager".get_children;
+local
get_children = require "core.hos
tmanager".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;
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
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");
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
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", {
_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/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)
-- 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");
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();
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)
-- 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
end);
-- Handle disco requests to user accounts
@@
-126,7
+138,7
@@
module:hook("iq/bare/http://jabber.org/protocol/disco#info:query", function(even
if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then
local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info'});
if not reply.attr.from then reply.attr.from = origin.username.."@"..origin.host; end -- COMPAT To satisfy Psi when querying own account
if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then
local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info'});
if not reply.attr.from then reply.attr.from = origin.username.."@"..origin.host; end -- COMPAT To satisfy Psi when querying own account
- module:fire_event("account-disco-info", {
sessio
n = origin, stanza = reply });
+ module:fire_event("account-disco-info", {
origi
n = origin, stanza = reply });
origin.send(reply);
return true;
end
origin.send(reply);
return true;
end
@@
-140,7
+152,7
@@
module:hook("iq/bare/http://jabber.org/protocol/disco#items:query", function(eve
if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then
local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#items'});
if not reply.attr.from then reply.attr.from = origin.username.."@"..origin.host; end -- COMPAT To satisfy Psi when querying own account
if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then
local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#items'});
if not reply.attr.from then reply.attr.from = origin.username.."@"..origin.host; end -- COMPAT To satisfy Psi when querying own account
- module:fire_event("account-disco-items", {
sessio
n = origin, stanza = reply });
+ module:fire_event("account-disco-items", {
origi
n = origin, stanza = reply });
origin.send(reply);
return true;
end
origin.send(reply);
return true;
end