core/sessionmanager.lua
author Kim Alvefur <zash@zash.se>
Thu, 04 Nov 2021 01:00:06 +0100
branch0.11
changeset 12093 76b4e3f12b53
parent 9073 21730a3642fe
child 9912 7d12af856238
permissions -rw-r--r--
mod_pep: Wipe pubsub service on user deletion Data is already wiped from storage, but this ensures everything is properly unsubscribed, possibly with notifications etc. Clears recipient cache as well, since it is no longer relevant.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1479
diff changeset
     1
-- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2858
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2858
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
     4
--
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 694
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 694
diff changeset
     6
-- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 429
diff changeset
     7
--
7952
8acc35b5355a core: Allow select core modules to mutate some globals (needs luacheck 1.19)
Kim Alvefur <zash@zash.se>
parents: 7950
diff changeset
     8
-- luacheck: globals prosody.full_sessions prosody.bare_sessions
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 429
diff changeset
     9
4981
95c18750b89e sessionmanager: Clean up some unused variables and imports
Matthew Wild <mwild1@gmail.com>
parents: 4961
diff changeset
    10
local tostring, setmetatable = tostring, setmetatable;
95c18750b89e sessionmanager: Clean up some unused variables and imports
Matthew Wild <mwild1@gmail.com>
parents: 4961
diff changeset
    11
local pairs, next= pairs, next;
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
    12
8720
9ddd0fbbe53a core: Use prosody.hosts instead of _G.hosts for consistency
Kim Alvefur <zash@zash.se>
parents: 8558
diff changeset
    13
local hosts = prosody.hosts;
6554
784fa05cf594 sessionmanager: Access bare_session and full_sessions through 'prosody'
Matthew Wild <mwild1@gmail.com>
parents: 6405
diff changeset
    14
local full_sessions = prosody.full_sessions;
784fa05cf594 sessionmanager: Access bare_session and full_sessions through 'prosody'
Matthew Wild <mwild1@gmail.com>
parents: 6405
diff changeset
    15
local bare_sessions = prosody.bare_sessions;
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
    16
1684
645e18990211 core.sessionmanager, xmppclient_listener: Move responsibility for setting session.log to the former from the latter, much more sensible
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
    17
local logger = require "util.logger";
645e18990211 core.sessionmanager, xmppclient_listener: Move responsibility for setting session.log to the former from the latter, much more sensible
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
    18
local log = logger.init("sessionmanager");
101
c690fa382743 Added some roster management functions
Waqas Hussain <waqas20@gmail.com>
parents: 77
diff changeset
    19
local rm_load_roster = require "core.rostermanager".load_roster;
429
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
    20
local config_get = require "core.configmanager".get;
2832
8c754c61c72e sessionmanager: Added resource prepping, and invalid resource checking to the bind_resource function.
Waqas Hussain <waqas20@gmail.com>
parents: 2816
diff changeset
    21
local resourceprep = require "util.encodings".stringprep.resourceprep;
3236
4727b2b0e069 sessionmanager: Moved nodeprep to sessionmanager.make_authenticated.
Waqas Hussain <waqas20@gmail.com>
parents: 3091
diff changeset
    22
local nodeprep = require "util.encodings".stringprep.nodeprep;
8875
4d7a822e837f sessionmanager: Generate shorter random resoures
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
    23
local generate_identifier = require "util.id".short;
53
14ea0fe6ca86 Session destruction fixes, some debugging code while we fix the rest. Also change logger to be more useful.
Matthew Wild <mwild1@gmail.com>
parents: 49
diff changeset
    24
3145
675241be2935 sessionmanager: Rename filters_initialize->initialize_filters
Matthew Wild <mwild1@gmail.com>
parents: 3143
diff changeset
    25
local initialize_filters = require "util.filters".initialize;
569
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 565
diff changeset
    26
local gettime = require "socket".gettime;
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 565
diff changeset
    27
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
    28
local _ENV = nil;
8558
4f0f5b49bb03 vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8188
diff changeset
    29
-- luacheck: std none
30
bcf539295f2d Huge commit to:
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
    31
local function new_session(conn)
1469
9f2b6e2bc498 sessionmanager: Newly created sessions shouldn't have a priority. Fixes one of the stanza-gobbling bugs \o/
Matthew Wild <mwild1@gmail.com>
parents: 1450
diff changeset
    32
	local session = { conn = conn, type = "c2s_unauthed", conntime = gettime() };
3145
675241be2935 sessionmanager: Rename filters_initialize->initialize_filters
Matthew Wild <mwild1@gmail.com>
parents: 3143
diff changeset
    33
	local filter = initialize_filters(session);
30
bcf539295f2d Huge commit to:
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
	local w = conn.write;
3143
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    35
	session.send = function (t)
9072
22e5f11c778a sessionmanager, mod_s2s: Bring debug line for outgoing stanzas in line with that for incoming
Kim Alvefur <zash@zash.se>
parents: 9069
diff changeset
    36
		session.log("debug", "Sending[%s]: %s", session.type, t.top_tag and t:top_tag() or t:match("^[^>]*>?"));
3143
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    37
		if t.name then
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    38
			t = filter("stanzas/out", t);
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    39
		end
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    40
		if t then
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    41
			t = filter("bytes/out", tostring(t));
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    42
			if t then
7498
caee8a32983a sessionmanager: Make session.send() return true unless there really is an error [backported from 0.10]
Kim Alvefur <zash@zash.se>
parents: 6602
diff changeset
    43
				local ret, err = w(conn, t);
caee8a32983a sessionmanager: Make session.send() return true unless there really is an error [backported from 0.10]
Kim Alvefur <zash@zash.se>
parents: 6602
diff changeset
    44
				if not ret then
6919
d0ab0069145f sessionmanager: Demote write error to debug message
Kim Alvefur <zash@zash.se>
parents: 6918
diff changeset
    45
					session.log("debug", "Error writing to connection: %s", tostring(err));
6918
9d74373d621e sessionmanager: Clarify log message when failing to write data to connection
Kim Alvefur <zash@zash.se>
parents: 6845
diff changeset
    46
					return false, err;
7498
caee8a32983a sessionmanager: Make session.send() return true unless there really is an error [backported from 0.10]
Kim Alvefur <zash@zash.se>
parents: 6602
diff changeset
    47
				end
3143
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    48
			end
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    49
		end
7498
caee8a32983a sessionmanager: Make session.send() return true unless there really is an error [backported from 0.10]
Kim Alvefur <zash@zash.se>
parents: 6602
diff changeset
    50
		return true;
3143
887a6374f51c sessionmanager: Initialize new sessions for filtering, and add filters for outgoing bytes and stanzas
Matthew Wild <mwild1@gmail.com>
parents: 3091
diff changeset
    51
	end
2103
0e0bc74c64a0 sessionmanager: Use : syntax for calling connection methods
Matthew Wild <mwild1@gmail.com>
parents: 1929
diff changeset
    52
	session.ip = conn:ip();
5306
10bc0e2aa55e s2smanager: Generate session names used for logging the same way everywhere
Kim Alvefur <zash@zash.se>
parents: 5211
diff changeset
    53
	local conn_name = "c2s"..tostring(session):match("[a-f0-9]+$");
1684
645e18990211 core.sessionmanager, xmppclient_listener: Move responsibility for setting session.log to the former from the latter, much more sensible
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
    54
	session.log = logger.init(conn_name);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
    55
30
bcf539295f2d Huge commit to:
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    56
	return session;
bcf539295f2d Huge commit to:
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    57
end
bcf539295f2d Huge commit to:
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    58
2746
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    59
local resting_session = { -- Resting, not dead
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    60
		destroyed = true;
2915
f47bd0f7e2e6 sessionmanager, s2smanager: Add type of ?2s_destroyed to resting sessions (fixes a logging traceback, thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents: 2752
diff changeset
    61
		type = "c2s_destroyed";
2750
4a6f32e6a8e5 sessionmanager: Add close method to resting sessions
Matthew Wild <mwild1@gmail.com>
parents: 2747
diff changeset
    62
		close = function (session)
4a6f32e6a8e5 sessionmanager: Add close method to resting sessions
Matthew Wild <mwild1@gmail.com>
parents: 2747
diff changeset
    63
			session.log("debug", "Attempt to close already-closed session");
4a6f32e6a8e5 sessionmanager: Add close method to resting sessions
Matthew Wild <mwild1@gmail.com>
parents: 2747
diff changeset
    64
		end;
6666
d3023dd07cb6 portmanager, s2smanager, sessionmanager, stanza_router, storagemanager, usermanager, util.xml: Add luacheck annotations
Matthew Wild <mwild1@gmail.com>
parents: 6622
diff changeset
    65
		filter = function (type, data) return data; end; --luacheck: ignore 212/type
2746
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    66
	}; resting_session.__index = resting_session;
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    67
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
    68
local function retire_session(session)
6666
d3023dd07cb6 portmanager, s2smanager, sessionmanager, stanza_router, storagemanager, usermanager, util.xml: Add luacheck annotations
Matthew Wild <mwild1@gmail.com>
parents: 6622
diff changeset
    69
	local log = session.log or log; --luacheck: ignore 431/log
2746
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    70
	for k in pairs(session) do
5447
92b88476873a sessionmanager, s2smanager: Remove open_session tracing
Matthew Wild <mwild1@gmail.com>
parents: 5377
diff changeset
    71
		if k ~= "log" and k ~= "id" then
2746
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    72
			session[k] = nil;
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    73
		end
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    74
	end
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    75
4961
29b24a4028ed sessionmanager: Have session.send() of a retired session return false to indicate failure
Matthew Wild <mwild1@gmail.com>
parents: 4813
diff changeset
    76
	function session.send(data) log("debug", "Discarding data sent to resting session: %s", tostring(data)); return false; end
2746
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    77
	function session.data(data) log("debug", "Discarding data received from resting session: %s", tostring(data)); end
7289
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7287
diff changeset
    78
	session.thread = { run = function (_, data) return session.data(data) end };
2746
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    79
	return setmetatable(session, resting_session);
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
    80
end
2857
6036c4b75235 sessionmanager, s2smanager: Give sessions dummy data handlers that log when data is received by a destroyed session
Matthew Wild <mwild1@gmail.com>
parents: 2832
diff changeset
    81
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
    82
local function destroy_session(session, err)
7950
24170d74b00b core: Split some very long lines [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7787
diff changeset
    83
	(session.log or log)("debug", "Destroying session for %s (%s@%s)%s",
24170d74b00b core: Split some very long lines [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7787
diff changeset
    84
		session.full_jid or "(unknown)", session.username or "(unknown)",
24170d74b00b core: Split some very long lines [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7787
diff changeset
    85
		session.host or "(unknown)", err and (": "..err) or "");
24170d74b00b core: Split some very long lines [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7787
diff changeset
    86
2752
18d8009f06cb sessionmanager: Don't re-destroy destroyed sessions
Matthew Wild <mwild1@gmail.com>
parents: 2751
diff changeset
    87
	if session.destroyed then return; end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
    88
331
830fd67f9378 Quite some changes, to:
Matthew Wild <mwild1@gmail.com>
parents: 329
diff changeset
    89
	-- Remove session/resource from user's session list
1225
1e01a913baf5 sessionmanager: Fixed an old FIXME: A problem caused by an error on an authenticated but unbound session
Waqas Hussain <waqas20@gmail.com>
parents: 1224
diff changeset
    90
	if session.full_jid then
4230
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
    91
		local host_session = hosts[session.host];
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
    92
4230
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
    93
		-- Allow plugins to prevent session destruction
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
    94
		if host_session.events.fire_event("pre-resource-unbind", {session=session, error=err}) then
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
    95
			return;
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
    96
		end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
    97
4230
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
    98
		host_session.sessions[session.username].sessions[session.resource] = nil;
1226
3b5f9dac2045 sessionmanager: Removed a redundant check
Waqas Hussain <waqas20@gmail.com>
parents: 1225
diff changeset
    99
		full_sessions[session.full_jid] = nil;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
   100
4230
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
   101
		if not next(host_session.sessions[session.username].sessions) then
1225
1e01a913baf5 sessionmanager: Fixed an old FIXME: A problem caused by an error on an authenticated but unbound session
Waqas Hussain <waqas20@gmail.com>
parents: 1224
diff changeset
   102
			log("debug", "All resources of %s are now offline", session.username);
4230
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
   103
			host_session.sessions[session.username] = nil;
1301
d10d84f755b5 sessionmanager: It really is username@host, not host@username :)
Waqas Hussain <waqas20@gmail.com>
parents: 1290
diff changeset
   104
			bare_sessions[session.username..'@'..session.host] = nil;
53
14ea0fe6ca86 Session destruction fixes, some debugging code while we fix the rest. Also change logger to be more useful.
Matthew Wild <mwild1@gmail.com>
parents: 49
diff changeset
   105
		end
2591
d540a75a11db sessionmanager: Fire resource-unbind event after removing session from sessions table
Matthew Wild <mwild1@gmail.com>
parents: 2580
diff changeset
   106
4230
23b68616b6d8 sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
Matthew Wild <mwild1@gmail.com>
parents: 3459
diff changeset
   107
		host_session.events.fire_event("resource-unbind", {session=session, error=err});
53
14ea0fe6ca86 Session destruction fixes, some debugging code while we fix the rest. Also change logger to be more useful.
Matthew Wild <mwild1@gmail.com>
parents: 49
diff changeset
   108
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
   109
2746
3b9547fc0bed sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead) until they are collected - prevents a whole class of tracebacks
Matthew Wild <mwild1@gmail.com>
parents: 2622
diff changeset
   110
	retire_session(session);
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   111
end
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   112
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   113
local function make_authenticated(session, username)
3236
4727b2b0e069 sessionmanager: Moved nodeprep to sessionmanager.make_authenticated.
Waqas Hussain <waqas20@gmail.com>
parents: 3091
diff changeset
   114
	username = nodeprep(username);
3239
5ea90ee96022 sessionmanager: Fixed a traceback on invalid usernames (typo in previous commit).
Waqas Hussain <waqas20@gmail.com>
parents: 3236
diff changeset
   115
	if not username or #username == 0 then return nil, "Invalid username"; end
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   116
	session.username = username;
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   117
	if session.type == "c2s_unauthed" then
7787
9f70d35a1602 core.sessionmanager, mod_saslauth: Introduce intermediate session type for authenticated but unbound sessions so that resource binding is not treated as a normal stanza
Kim Alvefur <zash@zash.se>
parents: 7499
diff changeset
   118
		session.type = "c2s_unbound";
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   119
	end
1076
ba3639692493 sessionmanager: Miscellaneous logging improvements, changing levels, improving messages and using session loggers where possible
Matthew Wild <mwild1@gmail.com>
parents: 970
diff changeset
   120
	session.log("info", "Authenticated as %s@%s", username or "(unknown)", session.host or "(unknown)");
53
14ea0fe6ca86 Session destruction fixes, some debugging code while we fix the rest. Also change logger to be more useful.
Matthew Wild <mwild1@gmail.com>
parents: 49
diff changeset
   121
	return true;
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   122
end
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   123
304
7b28fa8bbfe5 Code cleanup for resource binding
Waqas Hussain <waqas20@gmail.com>
parents: 176
diff changeset
   124
-- returns true, nil on success
7b28fa8bbfe5 Code cleanup for resource binding
Waqas Hussain <waqas20@gmail.com>
parents: 176
diff changeset
   125
-- returns nil, err_type, err, err_message on failure
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   126
local function bind_resource(session, resource)
304
7b28fa8bbfe5 Code cleanup for resource binding
Waqas Hussain <waqas20@gmail.com>
parents: 176
diff changeset
   127
	if not session.username then return nil, "auth", "not-authorized", "Cannot bind resource before authentication"; end
6602
f93e1b2ec327 sessionmanager: Return 'not-allowed' error instead of the non-existent 'already-bound' error when client tries to bind a resource twice on the same stream (thanks Flow) fixes issue #484.
Matthew Wild <mwild1@gmail.com>
parents: 5459
diff changeset
   128
	if session.resource then return nil, "cancel", "not-allowed", "Cannot bind multiple resources on a single connection"; end
304
7b28fa8bbfe5 Code cleanup for resource binding
Waqas Hussain <waqas20@gmail.com>
parents: 176
diff changeset
   129
	-- We don't support binding multiple resources
7b28fa8bbfe5 Code cleanup for resource binding
Waqas Hussain <waqas20@gmail.com>
parents: 176
diff changeset
   130
6564
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   131
	local event_payload = { session = session, resource = resource };
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   132
	if hosts[session.host].events.fire_event("pre-resource-bind", event_payload) == false then
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   133
		local err = event_payload.error;
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   134
		if err then return nil, err.type, err.condition, err.text; end
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   135
		return nil, "cancel", "not-allowed";
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   136
	else
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   137
		-- In case a plugin wants to poke at it
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   138
		resource = event_payload.resource;
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   139
	end
bae84401a02c sessionmanager: Add pre-resource-bind event that would let plugins have a say in resource binding
Kim Alvefur <zash@zash.se>
parents: 6554
diff changeset
   140
2832
8c754c61c72e sessionmanager: Added resource prepping, and invalid resource checking to the bind_resource function.
Waqas Hussain <waqas20@gmail.com>
parents: 2816
diff changeset
   141
	resource = resourceprep(resource);
8875
4d7a822e837f sessionmanager: Generate shorter random resoures
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
   142
	resource = resource ~= "" and resource or generate_identifier();
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   143
	--FIXME: Randomly-generated resources must be unique per-user, and never conflict with existing
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
   144
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   145
	if not hosts[session.host].sessions[session.username] then
1224
35fa588e43a6 sessionmanager: Add/remove sessions from full_sessions and bare_sessions when binding/unbinding sessions
Waqas Hussain <waqas20@gmail.com>
parents: 1223
diff changeset
   146
		local sessions = { sessions = {} };
35fa588e43a6 sessionmanager: Add/remove sessions from full_sessions and bare_sessions when binding/unbinding sessions
Waqas Hussain <waqas20@gmail.com>
parents: 1223
diff changeset
   147
		hosts[session.host].sessions[session.username] = sessions;
1290
c253905a8a55 sessionmanager: It's username@host, not host@username :)
Matthew Wild <mwild1@gmail.com>
parents: 1226
diff changeset
   148
		bare_sessions[session.username..'@'..session.host] = sessions;
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   149
	else
429
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   150
		local sessions = hosts[session.host].sessions[session.username].sessions;
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   151
		if sessions[resource] then
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   152
			-- Resource conflict
5377
898454038524 core.*: Complete removal of all traces of the "core" section and section-related code.
Kim Alvefur <zash@zash.se>
parents: 5306
diff changeset
   153
			local policy = config_get(session.host, "conflict_resolve");
429
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   154
			local increment;
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   155
			if policy == "random" then
8875
4d7a822e837f sessionmanager: Generate shorter random resoures
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
   156
				resource = generate_identifier();
429
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   157
				increment = true;
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   158
			elseif policy == "increment" then
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   159
				increment = true; -- TODO ping old resource
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   160
			elseif policy == "kick_new" then
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   161
				return nil, "cancel", "conflict", "Resource already exists";
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   162
			else -- if policy == "kick_old" then
791
a4be1d80775c Fixed: kick_old resource conflict resolution policy could fail with a backtrace
Waqas Hussain <waqas20@gmail.com>
parents: 760
diff changeset
   163
				sessions[resource]:close {
429
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   164
					condition = "conflict";
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   165
					text = "Replaced by new connection";
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   166
				};
791
a4be1d80775c Fixed: kick_old resource conflict resolution policy could fail with a backtrace
Waqas Hussain <waqas20@gmail.com>
parents: 760
diff changeset
   167
				if not next(sessions) then
a4be1d80775c Fixed: kick_old resource conflict resolution policy could fail with a backtrace
Waqas Hussain <waqas20@gmail.com>
parents: 760
diff changeset
   168
					hosts[session.host].sessions[session.username] = { sessions = sessions };
1471
8b3753b080fc sessionmanager: Reset bare_sessions[user] after resource conflict resolution. Fixes the other stanza gobbling bug \o/
Matthew Wild <mwild1@gmail.com>
parents: 1469
diff changeset
   169
					bare_sessions[session.username.."@"..session.host] = hosts[session.host].sessions[session.username];
791
a4be1d80775c Fixed: kick_old resource conflict resolution policy could fail with a backtrace
Waqas Hussain <waqas20@gmail.com>
parents: 760
diff changeset
   170
				end
429
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   171
			end
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   172
			if increment and sessions[resource] then
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   173
				local count = 1;
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   174
				while sessions[resource.."#"..count] do
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   175
					count = count + 1;
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   176
				end
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   177
				resource = resource.."#"..count;
b1d86f89fa27 Added options to limit the number of resources and for handling of resource conflicts
Waqas Hussain <waqas20@gmail.com>
parents: 357
diff changeset
   178
			end
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   179
		end
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   180
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
   181
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   182
	session.resource = resource;
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   183
	session.full_jid = session.username .. '@' .. session.host .. '/' .. resource;
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   184
	hosts[session.host].sessions[session.username].sessions[resource] = session;
1224
35fa588e43a6 sessionmanager: Add/remove sessions from full_sessions and bare_sessions when binding/unbinding sessions
Waqas Hussain <waqas20@gmail.com>
parents: 1223
diff changeset
   185
	full_sessions[session.full_jid] = session;
7787
9f70d35a1602 core.sessionmanager, mod_saslauth: Introduce intermediate session type for authenticated but unbound sessions so that resource binding is not treated as a normal stanza
Kim Alvefur <zash@zash.se>
parents: 7499
diff changeset
   186
	if session.type == "c2s_unbound" then
9f70d35a1602 core.sessionmanager, mod_saslauth: Introduce intermediate session type for authenticated but unbound sessions so that resource binding is not treated as a normal stanza
Kim Alvefur <zash@zash.se>
parents: 7499
diff changeset
   187
		session.type = "c2s";
9f70d35a1602 core.sessionmanager, mod_saslauth: Introduce intermediate session type for authenticated but unbound sessions so that resource binding is not treated as a normal stanza
Kim Alvefur <zash@zash.se>
parents: 7499
diff changeset
   188
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
   189
3088
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   190
	local err;
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   191
	session.roster, err = rm_load_roster(session.username, session.host);
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   192
	if err then
8187
dbcae15b4282 sessionmanager: Revert session.type if binding fails due to roster load error
Matthew Wild <mwild1@gmail.com>
parents: 7952
diff changeset
   193
		-- FIXME: Why is all this rollback down here, instead of just doing the roster test up above?
3088
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   194
		full_sessions[session.full_jid] = nil;
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   195
		hosts[session.host].sessions[session.username].sessions[resource] = nil;
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   196
		session.full_jid = nil;
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   197
		session.resource = nil;
8187
dbcae15b4282 sessionmanager: Revert session.type if binding fails due to roster load error
Matthew Wild <mwild1@gmail.com>
parents: 7952
diff changeset
   198
		if session.type == "c2s" then
dbcae15b4282 sessionmanager: Revert session.type if binding fails due to roster load error
Matthew Wild <mwild1@gmail.com>
parents: 7952
diff changeset
   199
			session.type = "c2s_unbound";
dbcae15b4282 sessionmanager: Revert session.type if binding fails due to roster load error
Matthew Wild <mwild1@gmail.com>
parents: 7952
diff changeset
   200
		end
3091
d6a059af2077 rostermanager: Correctly clear the bare_sessions table on roster load errors during bind.
Waqas Hussain <waqas20@gmail.com>
parents: 3089
diff changeset
   201
		if next(bare_sessions[session.username..'@'..session.host].sessions) == nil then
3088
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   202
			bare_sessions[session.username..'@'..session.host] = nil;
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   203
			hosts[session.host].sessions[session.username] = nil;
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   204
		end
5211
80635a6cb126 sessionmanager: Log the actual error message when roster loading fails.
Waqas Hussain <waqas20@gmail.com>
parents: 4995
diff changeset
   205
		session.log("error", "Roster loading failed: %s", err);
3088
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   206
		return nil, "cancel", "internal-server-error", "Error loading roster";
a233aa051125 sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
Waqas Hussain <waqas20@gmail.com>
parents: 2925
diff changeset
   207
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
   208
1478
da11f2652ae9 sessionmanager: Replace raw session by an event data table for resource bind/unbind events, allowing extra data
Waqas Hussain <waqas20@gmail.com>
parents: 1471
diff changeset
   209
	hosts[session.host].events.fire_event("resource-bind", {session=session});
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5459
diff changeset
   210
38
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   211
	return true;
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   212
end
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
   213
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   214
local function send_to_available_resources(username, host, stanza)
6622
78d1706982b2 sessionmanager: Rename parameter to avoid varible name conflict
Matthew Wild <mwild1@gmail.com>
parents: 6605
diff changeset
   215
	local jid = username.."@"..host;
176
e5cd2a03891d Outbound presence subscription
Waqas Hussain <waqas20@gmail.com>
parents: 175
diff changeset
   216
	local count = 0;
2140
94b7ba39787d sessionmanager: Fixed and cleaned function send_to_available_resources(). The 'to' attribute for presence subscription stanzas is now preserved.
Waqas Hussain <waqas20@gmail.com>
parents: 1929
diff changeset
   217
	local user = bare_sessions[jid];
94b7ba39787d sessionmanager: Fixed and cleaned function send_to_available_resources(). The 'to' attribute for presence subscription stanzas is now preserved.
Waqas Hussain <waqas20@gmail.com>
parents: 1929
diff changeset
   218
	if user then
6679
a536978e0f01 sessionmanager: Rename unused loop variables to '_' [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 6666
diff changeset
   219
		for _, session in pairs(user.sessions) do
2140
94b7ba39787d sessionmanager: Fixed and cleaned function send_to_available_resources(). The 'to' attribute for presence subscription stanzas is now preserved.
Waqas Hussain <waqas20@gmail.com>
parents: 1929
diff changeset
   220
			if session.presence then
94b7ba39787d sessionmanager: Fixed and cleaned function send_to_available_resources(). The 'to' attribute for presence subscription stanzas is now preserved.
Waqas Hussain <waqas20@gmail.com>
parents: 1929
diff changeset
   221
				session.send(stanza);
94b7ba39787d sessionmanager: Fixed and cleaned function send_to_available_resources(). The 'to' attribute for presence subscription stanzas is now preserved.
Waqas Hussain <waqas20@gmail.com>
parents: 1929
diff changeset
   222
				count = count + 1;
175
5f71d290bb44 Routing code reorganization
Waqas Hussain <waqas20@gmail.com>
parents: 156
diff changeset
   223
			end
5f71d290bb44 Routing code reorganization
Waqas Hussain <waqas20@gmail.com>
parents: 156
diff changeset
   224
		end
5f71d290bb44 Routing code reorganization
Waqas Hussain <waqas20@gmail.com>
parents: 156
diff changeset
   225
	end
176
e5cd2a03891d Outbound presence subscription
Waqas Hussain <waqas20@gmail.com>
parents: 175
diff changeset
   226
	return count;
175
5f71d290bb44 Routing code reorganization
Waqas Hussain <waqas20@gmail.com>
parents: 156
diff changeset
   227
end
5f71d290bb44 Routing code reorganization
Waqas Hussain <waqas20@gmail.com>
parents: 156
diff changeset
   228
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   229
local function send_to_interested_resources(username, host, stanza)
6680
1089f45c5e67 sessionmanager: Rename argument to avoid name clash with local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 6679
diff changeset
   230
	local jid = username.."@"..host;
2141
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   231
	local count = 0;
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   232
	local user = bare_sessions[jid];
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   233
	if user then
6679
a536978e0f01 sessionmanager: Rename unused loop variables to '_' [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 6666
diff changeset
   234
		for _, session in pairs(user.sessions) do
2141
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   235
			if session.interested then
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   236
				session.send(stanza);
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   237
				count = count + 1;
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   238
			end
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   239
		end
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   240
	end
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   241
	return count;
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   242
end
f544729f9228 sessionmanager: Added function send_to_interested_resources().
Waqas Hussain <waqas20@gmail.com>
parents: 2140
diff changeset
   243
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   244
return {
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   245
	new_session = new_session;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   246
	retire_session = retire_session;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   247
	destroy_session = destroy_session;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   248
	make_authenticated = make_authenticated;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   249
	bind_resource = bind_resource;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   250
	send_to_available_resources = send_to_available_resources;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   251
	send_to_interested_resources = send_to_interested_resources;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6680
diff changeset
   252
};