52 if not done[feature] then |
52 if not done[feature] then |
53 query:tag("feature", {var=feature}):up(); |
53 query:tag("feature", {var=feature}):up(); |
54 done[feature] = true; |
54 done[feature] = true; |
55 end |
55 end |
56 end |
56 end |
|
57 for _,extension in ipairs(module:get_host_items("extension")) do |
|
58 if not done[extension] then |
|
59 query:add_child(extension); |
|
60 done[extension] = true; |
|
61 end |
|
62 end |
57 _cached_server_disco_info = query; |
63 _cached_server_disco_info = query; |
58 _cached_server_caps_hash = calculate_hash(query); |
64 _cached_server_caps_hash = calculate_hash(query); |
59 _cached_server_caps_feature = st.stanza("c", { |
65 _cached_server_caps_feature = st.stanza("c", { |
60 xmlns = "http://jabber.org/protocol/caps"; |
66 xmlns = "http://jabber.org/protocol/caps"; |
61 hash = "sha-1"; |
67 hash = "sha-1"; |
79 return _cached_server_caps_hash; |
85 return _cached_server_caps_hash; |
80 end |
86 end |
81 |
87 |
82 module:hook("item-added/identity", clear_disco_cache); |
88 module:hook("item-added/identity", clear_disco_cache); |
83 module:hook("item-added/feature", clear_disco_cache); |
89 module:hook("item-added/feature", clear_disco_cache); |
|
90 module:hook("item-added/extension", clear_disco_cache); |
84 module:hook("item-removed/identity", clear_disco_cache); |
91 module:hook("item-removed/identity", clear_disco_cache); |
85 module:hook("item-removed/feature", clear_disco_cache); |
92 module:hook("item-removed/feature", clear_disco_cache); |
|
93 module:hook("item-removed/extension", clear_disco_cache); |
86 |
94 |
87 -- Handle disco requests to the server |
95 -- Handle disco requests to the server |
88 module:hook("iq/host/http://jabber.org/protocol/disco#info:query", function(event) |
96 module:hook("iq/host/http://jabber.org/protocol/disco#info:query", function(event) |
89 local origin, stanza = event.origin, event.stanza; |
97 local origin, stanza = event.origin, event.stanza; |
90 if stanza.attr.type ~= "get" then return; end |
98 if stanza.attr.type ~= "get" then return; end |