From c43ea656e3ccdc159ba27904fe06a9226952e817 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 7 Dec 2010 18:18:11 +0000 Subject: [PATCH] xmppcomponent_listener: Switch to util.xmppstream from xmlhandlers --- net/xmppcomponent_listener.lua | 71 +++++++++++++++++----------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/net/xmppcomponent_listener.lua b/net/xmppcomponent_listener.lua index 90293559..3ffa4ba4 100644 --- a/net/xmppcomponent_listener.lua +++ b/net/xmppcomponent_listener.lua @@ -10,9 +10,6 @@ local hosts = _G.hosts; local t_concat = table.concat; -local tostring = tostring; -local type = type; -local pairs = pairs; local lxp = require "lxp"; local logger = require "util.logger"; @@ -165,42 +162,46 @@ local function session_close(session, reason) end --- Component connlistener -function component_listener.onconnect(conn) - local _send = conn.write; - local session = { type = "component", conn = conn, send = function (data) return _send(conn, tostring(data)); end }; - - -- Logging functions -- - local conn_name = "jcp"..tostring(conn):match("[a-f0-9]+$"); - session.log = logger.init(conn_name); - session.close = session_close; - - session.log("info", "Incoming Jabber component connection"); - - local stream = new_xmpp_stream(session, stream_callbacks); - session.stream = stream; - - session.notopen = true; - - function session.reset_stream() +function component_listener.onincoming(conn, data) + local session = sessions[conn]; + if not session then + local _send = conn.write; + session = { type = "component", conn = conn, send = function (data) return _send(conn, tostring(data)); end }; + sessions[conn] = session; + + -- Logging functions -- + + local conn_name = "jcp"..tostring(conn):match("[a-f0-9]+$"); + session.log = logger.init(conn_name); + session.close = session_close; + + session.log("info", "Incoming Jabber component connection"); + + local stream = new_xmpp_stream(session, stream_callbacks); + session.stream = stream; + session.notopen = true; - session.stream:reset(); + + function session.reset_stream() + session.notopen = true; + session.stream:reset(); + end + + function session.data(conn, data) + local ok, err = stream:feed(data); + if ok then return; end + log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_")); + session:close("not-well-formed"); + end + + session.dispatch_stanza = stream_callbacks.handlestanza; + end - - function session.data(conn, data) - local ok, err = stream:feed(data); - if ok then return; end - log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_")); - session:close("not-well-formed"); + if data then + session.data(conn, data); end - - session.dispatch_stanza = stream_callbacks.handlestanza; - - sessions[conn] = session; -end -function component_listener.onincoming(conn, data) - local session = sessions[conn]; - session.data(conn, data); end + function component_listener.ondisconnect(conn, err) local session = sessions[conn]; if session then -- 2.30.2