core/sessionmanager.lua

changeset 3116
90a98a6b52ac
parent 3091
d6a059af2077
child 3143
887a6374f51c
child 3236
4727b2b0e069
equal deleted inserted replaced
3081:4ee34d07e042 3116:90a98a6b52ac
134 bare_sessions[session.username..'@'..session.host] = sessions; 134 bare_sessions[session.username..'@'..session.host] = sessions;
135 else 135 else
136 local sessions = hosts[session.host].sessions[session.username].sessions; 136 local sessions = hosts[session.host].sessions[session.username].sessions;
137 local limit = config_get(session.host, "core", "max_resources") or 10; 137 local limit = config_get(session.host, "core", "max_resources") or 10;
138 if #sessions >= limit then 138 if #sessions >= limit then
139 return nil, "cancel", "conflict", "Resource limit reached; only "..limit.." resources allowed"; 139 return nil, "cancel", "resource-constraint", "Resource limit reached; only "..limit.." resources allowed";
140 end 140 end
141 if sessions[resource] then 141 if sessions[resource] then
142 -- Resource conflict 142 -- Resource conflict
143 local policy = config_get(session.host, "core", "conflict_resolve"); 143 local policy = config_get(session.host, "core", "conflict_resolve");
144 local increment; 144 local increment;
172 session.resource = resource; 172 session.resource = resource;
173 session.full_jid = session.username .. '@' .. session.host .. '/' .. resource; 173 session.full_jid = session.username .. '@' .. session.host .. '/' .. resource;
174 hosts[session.host].sessions[session.username].sessions[resource] = session; 174 hosts[session.host].sessions[session.username].sessions[resource] = session;
175 full_sessions[session.full_jid] = session; 175 full_sessions[session.full_jid] = session;
176 176
177 session.roster = rm_load_roster(session.username, session.host); 177 local err;
178 session.roster, err = rm_load_roster(session.username, session.host);
179 if err then
180 full_sessions[session.full_jid] = nil;
181 hosts[session.host].sessions[session.username].sessions[resource] = nil;
182 session.full_jid = nil;
183 session.resource = nil;
184 if next(bare_sessions[session.username..'@'..session.host].sessions) == nil then
185 bare_sessions[session.username..'@'..session.host] = nil;
186 hosts[session.host].sessions[session.username] = nil;
187 end
188 return nil, "cancel", "internal-server-error", "Error loading roster";
189 end
178 190
179 hosts[session.host].events.fire_event("resource-bind", {session=session}); 191 hosts[session.host].events.fire_event("resource-bind", {session=session});
180 192
181 return true; 193 return true;
182 end 194 end

mercurial