Software /
code /
prosody
Comparison
net/xmppcomponent_listener.lua @ 3872:cbfa3ab250f7
net.xmppcomponent_listener: Move session creation from listener.onincoming to listener.onconnect.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 15 Dec 2010 03:33:00 +0500 |
parent | 3871:2305d3139fb9 |
child | 4463:df2cbc52c83b |
comparison
equal
deleted
inserted
replaced
3871:2305d3139fb9 | 3872:cbfa3ab250f7 |
---|---|
163 component_listener.ondisconnect(session.conn, "stream error"); | 163 component_listener.ondisconnect(session.conn, "stream error"); |
164 end | 164 end |
165 end | 165 end |
166 | 166 |
167 --- Component connlistener | 167 --- Component connlistener |
168 function component_listener.onconnect(conn) | |
169 local _send = conn.write; | |
170 local session = { type = "component", conn = conn, send = function (data) return _send(conn, tostring(data)); end }; | |
171 | |
172 -- Logging functions -- | |
173 local conn_name = "jcp"..tostring(conn):match("[a-f0-9]+$"); | |
174 session.log = logger.init(conn_name); | |
175 session.close = session_close; | |
176 | |
177 session.log("info", "Incoming Jabber component connection"); | |
178 | |
179 local stream = new_xmpp_stream(session, stream_callbacks); | |
180 session.stream = stream; | |
181 | |
182 session.notopen = true; | |
183 | |
184 function session.reset_stream() | |
185 session.notopen = true; | |
186 session.stream:reset(); | |
187 end | |
188 | |
189 function session.data(conn, data) | |
190 local ok, err = stream:feed(data); | |
191 if ok then return; end | |
192 log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_")); | |
193 session:close("not-well-formed"); | |
194 end | |
195 | |
196 session.dispatch_stanza = stream_callbacks.handlestanza; | |
197 | |
198 sessions[conn] = session; | |
199 end | |
168 function component_listener.onincoming(conn, data) | 200 function component_listener.onincoming(conn, data) |
169 local session = sessions[conn]; | 201 local session = sessions[conn]; |
170 if not session then | 202 session.data(conn, data); |
171 local _send = conn.write; | 203 end |
172 session = { type = "component", conn = conn, send = function (data) return _send(conn, tostring(data)); end }; | |
173 sessions[conn] = session; | |
174 | |
175 -- Logging functions -- | |
176 | |
177 local conn_name = "jcp"..tostring(conn):match("[a-f0-9]+$"); | |
178 session.log = logger.init(conn_name); | |
179 session.close = session_close; | |
180 | |
181 session.log("info", "Incoming Jabber component connection"); | |
182 | |
183 local stream = new_xmpp_stream(session, stream_callbacks); | |
184 session.stream = stream; | |
185 | |
186 session.notopen = true; | |
187 | |
188 function session.reset_stream() | |
189 session.notopen = true; | |
190 session.stream:reset(); | |
191 end | |
192 | |
193 function session.data(conn, data) | |
194 local ok, err = stream:feed(data); | |
195 if ok then return; end | |
196 log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_")); | |
197 session:close("not-well-formed"); | |
198 end | |
199 | |
200 session.dispatch_stanza = stream_callbacks.handlestanza; | |
201 | |
202 end | |
203 if data then | |
204 session.data(conn, data); | |
205 end | |
206 end | |
207 | |
208 function component_listener.ondisconnect(conn, err) | 204 function component_listener.ondisconnect(conn, err) |
209 local session = sessions[conn]; | 205 local session = sessions[conn]; |
210 if session then | 206 if session then |
211 (session.log or log)("info", "component disconnected: %s (%s)", tostring(session.host), tostring(err)); | 207 (session.log or log)("info", "component disconnected: %s (%s)", tostring(session.host), tostring(err)); |
212 if session.on_destroy then session:on_destroy(err); end | 208 if session.on_destroy then session:on_destroy(err); end |