Software /
code /
prosody
Comparison
core/modulemanager.lua @ 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 |
parent | 1330:baad431dabc5 |
child | 1346:e34f9455b779 |
comparison
equal
deleted
inserted
replaced
1333:d74441a2f3e8 | 1334:6846c5cc9ce2 |
---|---|
45 local handler_info = {}; | 45 local handler_info = {}; |
46 | 46 |
47 local modulehelpers = setmetatable({}, { __index = _G }); | 47 local modulehelpers = setmetatable({}, { __index = _G }); |
48 | 48 |
49 local features_table = multitable_new(); | 49 local features_table = multitable_new(); |
50 local identities_table = multitable_new(); | |
50 local handler_table = multitable_new(); | 51 local handler_table = multitable_new(); |
51 local hooked = multitable_new(); | 52 local hooked = multitable_new(); |
52 local hooks = multitable_new(); | 53 local hooks = multitable_new(); |
53 local event_hooks = multitable_new(); | 54 local event_hooks = multitable_new(); |
54 | 55 |
160 log("warn", "Non-fatal error unloading module '%s' on '%s': %s", name, host, err); | 161 log("warn", "Non-fatal error unloading module '%s' on '%s': %s", name, host, err); |
161 end | 162 end |
162 end | 163 end |
163 modulemap[host][name] = nil; | 164 modulemap[host][name] = nil; |
164 features_table:remove(host, name); | 165 features_table:remove(host, name); |
166 identities_table:remove(host, name); | |
165 local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns} | 167 local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns} |
166 for _, param in pairs(params or NULL) do | 168 for _, param in pairs(params or NULL) do |
167 local handlers = stanza_handlers:get(param[1], param[2], param[3], param[4]); | 169 local handlers = stanza_handlers:get(param[1], param[2], param[3], param[4]); |
168 if handlers then | 170 if handlers then |
169 handler_info[handlers[1]] = nil; | 171 handler_info[handlers[1]] = nil; |
324 end | 326 end |
325 | 327 |
326 addDiscoInfoHandler("*host", function(reply, to, from, node) | 328 addDiscoInfoHandler("*host", function(reply, to, from, node) |
327 if #node == 0 then | 329 if #node == 0 then |
328 local done = {}; | 330 local done = {}; |
331 for module, identities in pairs(identities_table:get(to) or NULL) do -- for each module | |
332 for identity, attr in pairs(identities) do | |
333 if not done[identity] then | |
334 reply:tag("identity", attr):up(); -- TODO cache | |
335 done[identity] = true; | |
336 end | |
337 end | |
338 end | |
339 for module, identities in pairs(identities_table:get("*") or NULL) do -- for each module | |
340 for identity, attr in pairs(identities) do | |
341 if not done[identity] then | |
342 reply:tag("identity", attr):up(); -- TODO cache | |
343 done[identity] = true; | |
344 end | |
345 end | |
346 end | |
329 for module, features in pairs(features_table:get(to) or NULL) do -- for each module | 347 for module, features in pairs(features_table:get(to) or NULL) do -- for each module |
330 for feature in pairs(features) do | 348 for feature in pairs(features) do |
331 if not done[feature] then | 349 if not done[feature] then |
332 reply:tag("feature", {var = feature}):up(); -- TODO cache | 350 reply:tag("feature", {var = feature}):up(); -- TODO cache |
333 done[feature] = true; | 351 done[feature] = true; |
346 end | 364 end |
347 end); | 365 end); |
348 | 366 |
349 function api:add_feature(xmlns) | 367 function api:add_feature(xmlns) |
350 features_table:set(self.host, self.name, xmlns, true); | 368 features_table:set(self.host, self.name, xmlns, true); |
369 end | |
370 function api:add_identity(category, typ) | |
371 identities_table:set(self.host, self.name, category.."\0"..typ, {category = category, typ = typ}); | |
351 end | 372 end |
352 | 373 |
353 local event_hook = function(host, mod_name, event_name, ...) | 374 local event_hook = function(host, mod_name, event_name, ...) |
354 if type((...)) == "table" and (...).host and (...).host ~= host then return; end | 375 if type((...)) == "table" and (...).host and (...).host ~= host then return; end |
355 for handler in pairs(event_hooks:get(host, mod_name, event_name) or NULL) do | 376 for handler in pairs(event_hooks:get(host, mod_name, event_name) or NULL) do |