aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2008-11-23 05:03:36 +0000
committerMatthew Wild <mwild1@gmail.com>2008-11-23 05:03:36 +0000
commitb94fd79634deabef5f4761825495e0940aec0ac6 (patch)
treebe1d302b3f7e9e812e294b95cad8750e1a690ac6 /core
parent21df2699e2ffd587a014c9c345ca1161d6a4fc5c (diff)
parent43c503330db3d5b1613c1babcd5ef150d2ccf247 (diff)
downloadprosody-b94fd79634deabef5f4761825495e0940aec0ac6.tar.gz
prosody-b94fd79634deabef5f4761825495e0940aec0ac6.zip
Merge from waqas
Diffstat (limited to 'core')
-rw-r--r--core/discomanager.lua39
-rw-r--r--core/modulemanager.lua6
2 files changed, 42 insertions, 3 deletions
diff --git a/core/discomanager.lua b/core/discomanager.lua
new file mode 100644
index 00000000..471f1101
--- /dev/null
+++ b/core/discomanager.lua
@@ -0,0 +1,39 @@
+
+local helper = require "util.discohelper".new();
+local hosts = hosts;
+local jid_split = require "util.jid".split;
+local jid_bare = require "util.jid".bare;
+local usermanager_user_exists = require "core.usermanager".user_exists;
+local rostermanager_is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
+
+do
+ helper:addDiscoInfoHandler("*host", function(reply, to, from, node)
+ if hosts[to] then
+ reply:tag("identity", {category="server", type="im", name="ejabberd"}):up();
+ return true;
+ end
+ end);
+ helper:addDiscoInfoHandler("*node", function(reply, to, from, node)
+ local node, host = jid_split(to);
+ if hosts[host] and rostermanager_is_contact_subscribed(node, host, jid_bare(from)) then
+ reply:tag("identity", {category="account", type="registered"}):up();
+ return true;
+ end
+ end);
+end
+
+module "discomanager"
+
+function handle(stanza)
+ return helper:handle(stanza);
+end
+
+function addDiscoItemsHandler(jid, func)
+ return helper:addDiscoItemsHandler(jid, func);
+end
+
+function addDiscoInfoHandler(jid, func)
+ return helper:addDiscoInfoHandler(jid, func);
+end
+
+return _M;
diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index 783fea55..f4893089 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -92,15 +92,15 @@ function handle_stanza(origin, stanza)
if child then
local xmlns = child.attr.xmlns or xmlns;
log("debug", "Stanza of type %s from %s has xmlns: %s", name, origin_type, xmlns);
- local handler = handlers[origin_type][name][xmlns];
- if handler then
+ local handler = handlers[origin_type][name] and handlers[origin_type][name][xmlns];
+ if handler then
log("debug", "Passing stanza to mod_%s", handler_info[handler].name);
return handler(origin, stanza) or true;
end
end
elseif handlers[origin_type] then
local handler = handlers[origin_type][name];
- if handler then
+ if handler then
handler = handler[xmlns];
if handler then
log("debug", "Passing stanza to mod_%s", handler_info[handler].name);