X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Fsessionmanager.lua;h=d833dbe50f409538d0592beca373a238f2e2345a;hb=ff13994caa4ddcd02afbd8d5ff3134e89e14b3be;hp=5f7f688eb90ce61e712b5b0c2074f03df3370529;hpb=f12247a65f9b2a14e998c88df28cf2bc452d358e;p=prosody.git diff --git a/core/sessionmanager.lua b/core/sessionmanager.lua index 5f7f688e..d833dbe5 100644 --- a/core/sessionmanager.lua +++ b/core/sessionmanager.lua @@ -10,8 +10,8 @@ local tostring, setmetatable = tostring, setmetatable; local pairs, next= pairs, next; local hosts = hosts; -local full_sessions = full_sessions; -local bare_sessions = bare_sessions; +local full_sessions = prosody.full_sessions; +local bare_sessions = prosody.bare_sessions; local logger = require "util.logger"; local log = logger.init("sessionmanager"); @@ -67,6 +67,7 @@ function retire_session(session) function session.send(data) log("debug", "Discarding data sent to resting session: %s", tostring(data)); return false; end function session.data(data) log("debug", "Discarding data received from resting session: %s", tostring(data)); end + session.thread = { run = function (_, data) return session.data(data) end }; return setmetatable(session, resting_session); end @@ -113,9 +114,19 @@ end -- returns nil, err_type, err, err_message on failure function bind_resource(session, resource) if not session.username then return nil, "auth", "not-authorized", "Cannot bind resource before authentication"; end - if session.resource then return nil, "cancel", "already-bound", "Cannot bind multiple resources on a single connection"; end + if session.resource then return nil, "cancel", "not-allowed", "Cannot bind multiple resources on a single connection"; end -- We don't support binding multiple resources + local event_payload = { session = session, resource = resource }; + if hosts[session.host].events.fire_event("pre-resource-bind", event_payload) == false then + local err = event_payload.error; + if err then return nil, err.type, err.condition, err.text; end + return nil, "cancel", "not-allowed"; + else + -- In case a plugin wants to poke at it + resource = event_payload.resource; + end + resource = resourceprep(resource); resource = resource ~= "" and resource or uuid_generate(); --FIXME: Randomly-generated resources must be unique per-user, and never conflict with existing @@ -182,8 +193,8 @@ function bind_resource(session, resource) return true; end -function send_to_available_resources(user, host, stanza) - local jid = user.."@"..host; +function send_to_available_resources(username, host, stanza) + local jid = username.."@"..host; local count = 0; local user = bare_sessions[jid]; if user then