18 local st = require "util.stanza"; |
18 local st = require "util.stanza"; |
19 local logger = require "util.logger"; |
19 local logger = require "util.logger"; |
20 local log = logger.init("mod_bosh"); |
20 local log = logger.init("mod_bosh"); |
21 local initialize_filters = require "util.filters".initialize; |
21 local initialize_filters = require "util.filters".initialize; |
22 local math_min = math.min; |
22 local math_min = math.min; |
|
23 local xpcall, tostring, type = xpcall, tostring, type; |
|
24 local traceback = debug.traceback; |
23 |
25 |
24 local xmlns_streams = "http://etherx.jabber.org/streams"; |
26 local xmlns_streams = "http://etherx.jabber.org/streams"; |
25 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams"; |
27 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams"; |
26 local xmlns_bosh = "http://jabber.org/protocol/httpbind"; -- (hard-coded into a literal in session.send) |
28 local xmlns_bosh = "http://jabber.org/protocol/httpbind"; -- (hard-coded into a literal in session.send) |
27 |
29 |
350 session.send(tostring(features)); |
352 session.send(tostring(features)); |
351 session.notopen = nil; |
353 session.notopen = nil; |
352 end |
354 end |
353 end |
355 end |
354 |
356 |
|
357 local function handleerr(err) log("error", "Traceback[bosh]: %s", traceback(tostring(err), 2)); end |
355 function stream_callbacks.handlestanza(context, stanza) |
358 function stream_callbacks.handlestanza(context, stanza) |
356 if context.ignore then return; end |
359 if context.ignore then return; end |
357 log("debug", "BOSH stanza received: %s\n", stanza:top_tag()); |
360 log("debug", "BOSH stanza received: %s\n", stanza:top_tag()); |
358 local session = sessions[context.sid]; |
361 local session = sessions[context.sid]; |
359 if session then |
362 if session then |
360 if stanza.attr.xmlns == xmlns_bosh then |
363 if stanza.attr.xmlns == xmlns_bosh then |
361 stanza.attr.xmlns = nil; |
364 stanza.attr.xmlns = nil; |
362 end |
365 end |
363 stanza = session.filter("stanzas/in", stanza); |
366 stanza = session.filter("stanzas/in", stanza); |
364 if stanza then |
367 if stanza then |
365 core_process_stanza(session, stanza); |
368 return xpcall(function () return core_process_stanza(session, stanza) end, handleerr); |
366 end |
369 end |
367 end |
370 end |
368 end |
371 end |
369 |
372 |
370 function stream_callbacks.streamclosed(request) |
373 function stream_callbacks.streamclosed(request) |