xmppcomponent_listener: Switch to util.xmppstream from xmlhandlers
authorMatthew Wild <mwild1@gmail.com>
Tue, 7 Dec 2010 18:18:11 +0000 (18:18 +0000)
committerMatthew Wild <mwild1@gmail.com>
Tue, 7 Dec 2010 18:18:11 +0000 (18:18 +0000)
net/xmppcomponent_listener.lua

index 90293559a30e0c1df8c71034c1b6ceda3ed51507..3ffa4ba45f6f74ac469607d1b43bd24fdc0223fa 100644 (file)
@@ -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