local function session_reset_stream(session)
-- Reset stream
- local parser = lxp.new(init_xmlhandlers(session, sm_streamopened), ":");
+ local parser = lxp.new(init_xmlhandlers(session, sm_streamopened), "|");
session.parser = parser;
session.notopen = true;
-- TODO: Below function should be session,stanza - and xmlhandlers should use :method() notation to call,
-- this will avoid the useless indirection we have atm
-- (I'm on a mission, no time to fix now)
- session.stanza_dispatch = function (stanza) return core_process_stanza(session, stanza); end
+
+ -- Debug version --
+ local function handleerr(err) print("Traceback:", err, debug.traceback()); end
+ session.stanza_dispatch = function (stanza) return select(2, xpcall(function () return core_process_stanza(session, stanza); end, handleerr)); end
+
+-- session.stanza_dispatch = function (stanza) return core_process_stanza(session, stanza); end
end
if data then
if session then
if session.last_presence and session.last_presence.attr.type ~= "unavailable" then
local pres = st.presence{ type = "unavailable" };
- if err == "closed" then err = "connection closed"; end
+ if err == "closed" then err = "connection closed"; end --FIXME where did err come from?
pres:tag("status"):text("Disconnected: "..err);
session.stanza_dispatch(pres);
end