net/xmppcomponent_listener.lua

changeset 3752
c34a58c3ea43
parent 3751
46edbc8339b1
child 4004
3aea0f8ac7e9
equal deleted inserted replaced
3751:46edbc8339b1 3752:c34a58c3ea43
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

mercurial