Comparison

core/sessionmanager.lua @ 339:c6446bbfe40c

Fix sending of unavailable presence on disconnect
author Matthew Wild <mwild1@gmail.com>
date Wed, 19 Nov 2008 05:07:52 +0000
parent 333:8d15b073fdbe
child 356:8ff322b550a3
comparison
equal deleted inserted replaced
338:804f5e62a41f 339:c6446bbfe40c
11 local modulemanager = require "core.modulemanager"; 11 local modulemanager = require "core.modulemanager";
12 local log = require "util.logger".init("sessionmanager"); 12 local log = require "util.logger".init("sessionmanager");
13 local error = error; 13 local error = error;
14 local uuid_generate = require "util.uuid".generate; 14 local uuid_generate = require "util.uuid".generate;
15 local rm_load_roster = require "core.rostermanager".load_roster; 15 local rm_load_roster = require "core.rostermanager".load_roster;
16
17 local st = require "util.stanza";
16 18
17 local newproxy = newproxy; 19 local newproxy = newproxy;
18 local getmetatable = getmetatable; 20 local getmetatable = getmetatable;
19 21
20 module "sessionmanager" 22 module "sessionmanager"
31 local w = conn.write; 33 local w = conn.write;
32 session.send = function (t) w(tostring(t)); end 34 session.send = function (t) w(tostring(t)); end
33 return session; 35 return session;
34 end 36 end
35 37
36 function destroy_session(session) 38 function destroy_session(session, err)
37 (session.log or log)("info", "Destroying session"); 39 (session.log or log)("info", "Destroying session");
38 40
39 -- Send unavailable presence 41 -- Send unavailable presence
40 if session.presence then 42 if session.presence then
41 local pres = st.presence{ type = "unavailable" }; 43 local pres = st.presence{ type = "unavailable" };
42 if err == "closed" then err = "connection closed"; end 44 if (not err) or err == "closed" then err = "connection closed"; end
43 pres:tag("status"):text("Disconnected: "..err); 45 pres:tag("status"):text("Disconnected: "..err);
44 session.stanza_dispatch(pres); 46 session.stanza_dispatch(pres);
45 end 47 end
46 48
47 -- Remove session/resource from user's session list 49 -- Remove session/resource from user's session list