33 return session; |
33 return session; |
34 end |
34 end |
35 |
35 |
36 function destroy_session(session) |
36 function destroy_session(session) |
37 (session.log or log)("info", "Destroying session"); |
37 (session.log or log)("info", "Destroying session"); |
|
38 |
|
39 -- Send unavailable presence |
|
40 if session.presence and session.presence.attr.type ~= "unavailable" then |
|
41 local pres = st.presence{ type = "unavailable" }; |
|
42 if err == "closed" then err = "connection closed"; end |
|
43 pres:tag("status"):text("Disconnected: "..err); |
|
44 session.stanza_dispatch(pres); |
|
45 end |
|
46 |
|
47 -- Remove session/resource from user's session list |
38 if session.host and session.username then |
48 if session.host and session.username then |
39 if session.resource then |
49 if session.resource then |
40 hosts[session.host].sessions[session.username].sessions[session.resource] = nil; |
50 hosts[session.host].sessions[session.username].sessions[session.resource] = nil; |
41 end |
51 end |
42 if hosts[session.host] and hosts[session.host].sessions[session.username] then |
52 if hosts[session.host] and hosts[session.host].sessions[session.username] then |