local new_xmpp_stream = require "util.xmppstream".new;
local uuid_gen = require "util.uuid".generate;
+local core_process_stanza = prosody.core_process_stanza;
+
local log = module._log;
local function handle_component_auth(event)
local session, stanza = event.origin, event.stanza;
- if session.type ~= "component" then return; end
+ if session.type ~= "component_unauthed" then return; end
if (not session.host) or #stanza.tags > 0 then
(session.log or log)("warn", "Invalid component handshake for host: %s", session.host);
send = session.send;
session.on_destroy = on_destroy;
session.component_validate_from = module:get_option_boolean("validate_from_addresses", true);
+ session.type = "component";
module:log("info", "External component successfully authenticated");
session.send(st.stanza("handshake"));
function stream_callbacks.error(session, error, data, data2)
if session.destroyed then return; end
- module:log("warn", "Error processing component stream: "..tostring(error));
+ module:log("warn", "Error processing component stream: %s", tostring(error));
if error == "no-stream" then
session:close("invalid-namespace");
elseif error == "parse-error" then
session.streamid = uuid_gen();
session.notopen = nil;
-- Return stream header
+ session.send("<?xml version='1.0'?>");
session.send(st.stanza("stream:stream", { xmlns=xmlns_component,
["xmlns:stream"]='http://etherx.jabber.org/streams', id=session.streamid, from=session.host }):top_tag());
end
session:close();
end
-local core_process_stanza = core_process_stanza;
-
function stream_callbacks.handlestanza(session, stanza)
-- Namespaces are icky.
if not stanza.attr.xmlns and stanza.name == "handshake" then
local default_stream_attr = { ["xmlns:stream"] = "http://etherx.jabber.org/streams", xmlns = stream_callbacks.default_ns, version = "1.0", id = "" };
local function session_close(session, reason)
if session.destroyed then return; end
- local log = session.log or log;
if session.conn then
if session.notopen then
session.send("<?xml version='1.0'?>");
function listener.onconnect(conn)
local _send = conn.write;
- local session = { type = "component", conn = conn, send = function (data) return _send(conn, tostring(data)); end };
+ local session = { type = "component_unauthed", conn = conn, send = function (data) return _send(conn, tostring(data)); end };
-- Logging functions --
local conn_name = "jcp"..tostring(conn):match("[a-f0-9]+$");