31 local t_insert = table.insert; |
31 local t_insert = table.insert; |
32 local t_concat = table.concat; |
32 local t_concat = table.concat; |
33 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 |
33 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 |
34 local m_random = math.random; |
34 local m_random = math.random; |
35 local format = string.format; |
35 local format = string.format; |
|
36 local sm_new_session, sm_destroy_session = sessionmanager.new_session, sessionmanager.destroy_session; --import("core.sessionmanager", "new_session", "destroy_session"); |
36 local st = stanza; |
37 local st = stanza; |
37 ------------------------------ |
38 ------------------------------ |
38 |
39 |
39 |
40 |
40 |
41 |
46 |
47 |
47 function handler(conn, data, err) |
48 function handler(conn, data, err) |
48 local session = sessions[conn]; |
49 local session = sessions[conn]; |
49 |
50 |
50 if not session then |
51 if not session then |
51 sessions[conn] = sessionmanager.new_session(conn); |
52 sessions[conn] = sm_new_session(conn); |
52 session = sessions[conn]; |
53 session = sessions[conn]; |
53 |
54 |
54 -- Logging functions -- |
55 -- Logging functions -- |
55 |
56 |
56 local mainlog, log = log; |
57 local mainlog, log = log; |
73 local pres = st.presence{ type = "unavailable" }; |
74 local pres = st.presence{ type = "unavailable" }; |
74 if err == "closed" then err = "connection closed"; end |
75 if err == "closed" then err = "connection closed"; end |
75 pres:tag("status"):text("Disconnected: "..err); |
76 pres:tag("status"):text("Disconnected: "..err); |
76 session.stanza_dispatch(pres); |
77 session.stanza_dispatch(pres); |
77 end |
78 end |
78 if session.username then |
|
79 hosts[session.host].sessions[session.username] = nil; |
|
80 end |
|
81 session = nil; |
79 session = nil; |
82 print("Disconnected: "..err); |
80 print("Disconnected: "..tostring(err)); |
83 collectgarbage("collect"); |
81 collectgarbage("collect"); |
84 end |
82 end |
85 end |
83 end |
86 if data then |
84 if data then |
87 session.connhandler:data(data); |
85 session.connhandler:data(data); |
89 |
87 |
90 --log("info", "core", "Client disconnected, connection closed"); |
88 --log("info", "core", "Client disconnected, connection closed"); |
91 end |
89 end |
92 |
90 |
93 function disconnect(conn, err) |
91 function disconnect(conn, err) |
94 sessions[conn].disconnect(err); |
92 sm_destroy_session(sessions[conn]); |
95 sessions[conn] = nil; |
93 sessions[conn] = nil; |
96 end |
94 end |
97 |
95 |
98 modulemanager.loadall(); |
96 modulemanager.loadall(); |
99 |
97 |