Software /
code /
prosody
Changeset
1334:6846c5cc9ce2
modulemanager: Added function add_identity(category, type) to the modules API
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Fri, 12 Jun 2009 14:32:32 +0500 |
parents | 1333:d74441a2f3e8 |
children | 1335:7c71783b40cf |
files | core/modulemanager.lua |
diffstat | 1 files changed, 21 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/core/modulemanager.lua Fri Jun 12 13:46:31 2009 +0500 +++ b/core/modulemanager.lua Fri Jun 12 14:32:32 2009 +0500 @@ -47,6 +47,7 @@ local modulehelpers = setmetatable({}, { __index = _G }); local features_table = multitable_new(); +local identities_table = multitable_new(); local handler_table = multitable_new(); local hooked = multitable_new(); local hooks = multitable_new(); @@ -162,6 +163,7 @@ end modulemap[host][name] = nil; features_table:remove(host, name); + identities_table:remove(host, name); local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns} for _, param in pairs(params or NULL) do local handlers = stanza_handlers:get(param[1], param[2], param[3], param[4]); @@ -326,6 +328,22 @@ addDiscoInfoHandler("*host", function(reply, to, from, node) if #node == 0 then local done = {}; + for module, identities in pairs(identities_table:get(to) or NULL) do -- for each module + for identity, attr in pairs(identities) do + if not done[identity] then + reply:tag("identity", attr):up(); -- TODO cache + done[identity] = true; + end + end + end + for module, identities in pairs(identities_table:get("*") or NULL) do -- for each module + for identity, attr in pairs(identities) do + if not done[identity] then + reply:tag("identity", attr):up(); -- TODO cache + done[identity] = true; + end + end + end for module, features in pairs(features_table:get(to) or NULL) do -- for each module for feature in pairs(features) do if not done[feature] then @@ -349,6 +367,9 @@ function api:add_feature(xmlns) features_table:set(self.host, self.name, xmlns, true); end +function api:add_identity(category, typ) + identities_table:set(self.host, self.name, category.."\0"..typ, {category = category, typ = typ}); +end local event_hook = function(host, mod_name, event_name, ...) if type((...)) == "table" and (...).host and (...).host ~= host then return; end