aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2008-11-05 03:06:05 +0500
committerWaqas Hussain <waqas20@gmail.com>2008-11-05 03:06:05 +0500
commitc2a6d44d9dad7961ff6dfadd86fce06cc2aaf9da (patch)
treee4c4aa6c503cc2ccb80d99c99ede73c9eb150c13 /core
parentf20354901086278fe2dbe39458aa101e9782a4c3 (diff)
downloadprosody-c2a6d44d9dad7961ff6dfadd86fce06cc2aaf9da.tar.gz
prosody-c2a6d44d9dad7961ff6dfadd86fce06cc2aaf9da.zip
/me glares at MattJ
Diffstat (limited to 'core')
-rw-r--r--core/componentmanager.lua35
1 files changed, 35 insertions, 0 deletions
diff --git a/core/componentmanager.lua b/core/componentmanager.lua
new file mode 100644
index 00000000..18bf5c02
--- /dev/null
+++ b/core/componentmanager.lua
@@ -0,0 +1,35 @@
+
+
+local log = require "util.logger".init("componentmanager")
+local jid_split = require "util.jid".split;
+local hosts = hosts;
+
+local components = {};
+
+module "componentmanager"
+
+function handle_stanza(origin, stanza)
+ local node, host = jid_split(stanza.attr.to);
+ local component = components[host];
+ if not component then component = components[node.."@"..host]; end -- hack to allow hooking node@server
+ if not component then component = components[stanza.attr.to]; end -- hack to allow hooking node@server/resource and server/resource
+ if component then
+ log("debug", "stanza being handled by component: "..host);
+ component(origin, stanza);
+ else
+ log("error", "Component manager recieved a stanza for a non-existing component: " .. stanza.attr.to);
+ end
+end
+
+function register_component(host, component)
+ if not hosts[host] then
+ -- TODO check for host well-formedness
+ components[host] = component;
+ hosts[host] = {type = "component", connected = true};
+ log("debug", "component added: "..host);
+ else
+ log("error", "Attempt to set component for existing host: "..host);
+ end
+end
+
+return _M; \ No newline at end of file