326 end |
326 end |
327 function api:add_iq_handler(origin_type, xmlns, handler) |
327 function api:add_iq_handler(origin_type, xmlns, handler) |
328 self:add_handler(origin_type, "iq", xmlns, handler); |
328 self:add_handler(origin_type, "iq", xmlns, handler); |
329 end |
329 end |
330 |
330 |
331 addDiscoInfoHandler("*host", function(reply, to, from, node) |
|
332 if #node == 0 then |
|
333 local done = {}; |
|
334 for module, identities in pairs(identities_table:get(to) or NULL) do -- for each module |
|
335 for identity, attr in pairs(identities) do |
|
336 if not done[identity] then |
|
337 reply:tag("identity", attr):up(); -- TODO cache |
|
338 done[identity] = true; |
|
339 end |
|
340 end |
|
341 end |
|
342 for module, identities in pairs(identities_table:get("*") or NULL) do -- for each module |
|
343 for identity, attr in pairs(identities) do |
|
344 if not done[identity] then |
|
345 reply:tag("identity", attr):up(); -- TODO cache |
|
346 done[identity] = true; |
|
347 end |
|
348 end |
|
349 end |
|
350 for module, features in pairs(features_table:get(to) or NULL) do -- for each module |
|
351 for feature in pairs(features) do |
|
352 if not done[feature] then |
|
353 reply:tag("feature", {var = feature}):up(); -- TODO cache |
|
354 done[feature] = true; |
|
355 end |
|
356 end |
|
357 end |
|
358 for module, features in pairs(features_table:get("*") or NULL) do -- for each module |
|
359 for feature in pairs(features) do |
|
360 if not done[feature] then |
|
361 reply:tag("feature", {var = feature}):up(); -- TODO cache |
|
362 done[feature] = true; |
|
363 end |
|
364 end |
|
365 end |
|
366 return next(done) ~= nil; |
|
367 end |
|
368 end); |
|
369 |
|
370 function api:add_feature(xmlns) |
331 function api:add_feature(xmlns) |
371 self:add_item("feature", xmlns); |
332 self:add_item("feature", xmlns); |
372 end |
333 end |
373 function api:add_identity(category, type, name) |
334 function api:add_identity(category, type, name) |
374 self:add_item("identity", {category = category, type = type, name = name}); |
335 self:add_item("identity", {category = category, type = type, name = name}); |