116 end |
116 end |
117 end |
117 end |
118 end |
118 end |
119 session.send("</stream:stream>"); |
119 session.send("</stream:stream>"); |
120 session.conn.close(); |
120 session.conn.close(); |
121 component_listener.disconnect(session.conn, "stream error"); |
121 component_listener.ondisconnect(session.conn, "stream error"); |
122 end |
122 end |
123 end |
123 end |
124 |
124 |
125 --- Component connlistener |
125 --- Component connlistener |
126 function component_listener.listener(conn, data) |
126 function component_listener.onincoming(conn, data) |
127 local session = sessions[conn]; |
127 local session = sessions[conn]; |
128 if not session then |
128 if not session then |
129 local _send = conn.write; |
129 local _send = conn.write; |
130 session = { type = "component", conn = conn, send = function (data) return _send(tostring(data)); end }; |
130 session = { type = "component", conn = conn, send = function (data) return _send(conn, tostring(data)); end }; |
131 sessions[conn] = session; |
131 sessions[conn] = session; |
132 |
132 |
133 -- Logging functions -- |
133 -- Logging functions -- |
134 |
134 |
135 local conn_name = "jcp"..tostring(conn):match("[a-f0-9]+$"); |
135 local conn_name = "jcp"..tostring(conn):match("[a-f0-9]+$"); |
155 if data then |
155 if data then |
156 session.data(conn, data); |
156 session.data(conn, data); |
157 end |
157 end |
158 end |
158 end |
159 |
159 |
160 function component_listener.disconnect(conn, err) |
160 function component_listener.ondisconnect(conn, err) |
161 local session = sessions[conn]; |
161 local session = sessions[conn]; |
162 if session then |
162 if session then |
163 (session.log or log)("info", "component disconnected: %s (%s)", tostring(session.host), tostring(err)); |
163 (session.log or log)("info", "component disconnected: %s (%s)", tostring(session.host), tostring(err)); |
164 if session.host then |
164 if session.host then |
165 log("debug", "Deregistering component"); |
165 log("debug", "Deregistering component"); |
167 hosts[session.host].connected = nil; |
167 hosts[session.host].connected = nil; |
168 end |
168 end |
169 sessions[conn] = nil; |
169 sessions[conn] = nil; |
170 for k in pairs(session) do session[k] = nil; end |
170 for k in pairs(session) do session[k] = nil; end |
171 session = nil; |
171 session = nil; |
172 collectgarbage("collect"); |
|
173 end |
172 end |
174 end |
173 end |
175 |
174 |
176 connlisteners.register('xmppcomponent', component_listener); |
175 connlisteners.register('xmppcomponent', component_listener); |