8 |
8 |
9 |
9 |
10 |
10 |
11 local logger = require "logger"; |
11 local logger = require "logger"; |
12 local log = logger.init("xmppclient_listener"); |
12 local log = logger.init("xmppclient_listener"); |
13 local lxp = require "lxp" |
|
14 local new_xmpp_stream = require "util.xmppstream".new; |
13 local new_xmpp_stream = require "util.xmppstream".new; |
15 local sm_new_session = require "core.sessionmanager".new_session; |
|
16 |
14 |
17 local connlisteners_register = require "net.connlisteners".register; |
15 local connlisteners_register = require "net.connlisteners".register; |
18 |
16 |
19 local t_insert = table.insert; |
|
20 local t_concat = table.concat; |
|
21 local t_concatall = function (t, sep) local tt = {}; for _, s in ipairs(t) do t_insert(tt, tostring(s)); end return t_concat(tt, sep); end |
|
22 local m_random = math.random; |
|
23 local format = string.format; |
|
24 local sessionmanager = require "core.sessionmanager"; |
17 local sessionmanager = require "core.sessionmanager"; |
25 local sm_new_session, sm_destroy_session = sessionmanager.new_session, sessionmanager.destroy_session; |
18 local sm_new_session, sm_destroy_session = sessionmanager.new_session, sessionmanager.destroy_session; |
26 local sm_streamopened = sessionmanager.streamopened; |
19 local sm_streamopened = sessionmanager.streamopened; |
27 local sm_streamclosed = sessionmanager.streamclosed; |
20 local sm_streamclosed = sessionmanager.streamclosed; |
28 local st = require "util.stanza"; |
21 local st = require "util.stanza"; |
|
22 local xpcall = xpcall; |
|
23 local tostring = tostring; |
|
24 local type = type; |
|
25 local traceback = debug.traceback; |
29 |
26 |
30 local config = require "core.configmanager"; |
27 local config = require "core.configmanager"; |
31 local opt_keepalives = config.get("*", "core", "tcp_keepalives"); |
28 local opt_keepalives = config.get("*", "core", "tcp_keepalives"); |
32 |
29 |
33 local stream_callbacks = { default_ns = "jabber:client", |
30 local stream_callbacks = { default_ns = "jabber:client", |
60 session.log("info", "Session closed by remote with error: %s", text); |
57 session.log("info", "Session closed by remote with error: %s", text); |
61 session:close(nil, text); |
58 session:close(nil, text); |
62 end |
59 end |
63 end |
60 end |
64 |
61 |
65 local function handleerr(err) log("error", "Traceback[c2s]: %s: %s", tostring(err), debug.traceback()); end |
62 local function handleerr(err) log("error", "Traceback[c2s]: %s: %s", tostring(err), traceback()); end |
66 function stream_callbacks.handlestanza(session, stanza) |
63 function stream_callbacks.handlestanza(session, stanza) |
67 stanza = session.filter("stanzas/in", stanza); |
64 stanza = session.filter("stanzas/in", stanza); |
68 if stanza then |
65 if stanza then |
69 return xpcall(function () return core_process_stanza(session, stanza) end, handleerr); |
66 return xpcall(function () return core_process_stanza(session, stanza) end, handleerr); |
70 end |
67 end |