aboutsummaryrefslogtreecommitdiffstats
path: root/core/componentmanager.lua
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2008-11-04 17:25:12 +0500
committerWaqas Hussain <waqas20@gmail.com>2008-11-04 17:25:12 +0500
commit0ee447e39f7d8f52c3b6bf13f9023819c863c65a (patch)
treeb5c19585006c6645719c0839f5ad217feadeba49 /core/componentmanager.lua
parent97853af1a890067177eea401614b0cc0de1486d7 (diff)
downloadprosody-0ee447e39f7d8f52c3b6bf13f9023819c863c65a.tar.gz
prosody-0ee447e39f7d8f52c3b6bf13f9023819c863c65a.zip
Internal component support
Diffstat (limited to 'core/componentmanager.lua')
-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