diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/componentmanager.lua | 35 | ||||
-rw-r--r-- | core/stanza_router.lua | 16 |
2 files changed, 12 insertions, 39 deletions
diff --git a/core/componentmanager.lua b/core/componentmanager.lua deleted file mode 100644 index 18bf5c02..00000000 --- a/core/componentmanager.lua +++ /dev/null @@ -1,35 +0,0 @@ -
-
-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 diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 01b6128a..68a71d3b 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -60,8 +60,8 @@ function core_process_stanza(origin, stanza) local from_bare = from_node and (from_node.."@"..from_host) or from_host; -- bare JID if origin.type == "s2sin" then - if origin.host ~= from_host then -- remote server trying to impersonate some other server? - log("warn", "origin.host ~= from_host"); + if origin.from_host ~= from_host then -- remote server trying to impersonate some other server? + log("warn", "Received a stanza claiming to be from %s, over a conn authed for %s!", from, origin.from_host); return; -- FIXME what should we do here? does this work with subdomains? end end @@ -75,6 +75,8 @@ function core_process_stanza(origin, stanza) core_handle_stanza(origin, stanza); elseif hosts[to] and hosts[to].type == "local" then -- directed at a local server core_handle_stanza(origin, stanza); + elseif stanza.attr.xmlns and stanza.attr.xmlns ~= "jabber:client" and stanza.attr.xmlns ~= "jabber:server" then + modules_handle_stanza(origin, stanza); elseif hosts[to_bare] and hosts[to_bare].type == "component" then -- hack to allow components to handle node@server component_handle_stanza(origin, stanza); elseif hosts[to] and hosts[to].type == "component" then -- hack to allow components to handle node@server/resource and server/resource @@ -85,8 +87,6 @@ function core_process_stanza(origin, stanza) handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare); elseif stanza.name == "iq" and not resource then -- directed at bare JID core_handle_stanza(origin, stanza); - elseif stanza.attr.xmlns and stanza.attr.xmlns ~= "jabber:client" and stanza.attr.xmlns ~= "jabber:server" then - modules_handle_stanza(origin, stanza); elseif origin.type == "c2s" or origin.type == "s2sin" then core_route_stanza(origin, stanza); else @@ -370,6 +370,12 @@ function core_route_stanza(origin, stanza) log("debug", "sending s2s stanza: %s", tostring(stanza)); send_s2s(origin.host, host, stanza); -- TODO handle remote routing errors stanza.attr.xmlns = xmlns; -- reset + elseif origin.type == "component" or origin.type == "local" then + -- Route via s2s for components and modules + log("debug", "Routing outgoing stanza for %s to %s", origin.host, host); + for k,v in pairs(origin) do print("origin:", tostring(k), tostring(v)); end + print(tostring(host), tostring(from_host)) + send_s2s(origin.host, host, stanza); else log("warn", "received stanza from unhandled connection type: %s", origin.type); end @@ -379,3 +385,5 @@ end function handle_stanza_toremote(stanza) log("error", "Stanza bound for remote host, but s2s is not implemented"); end + + |