aboutsummaryrefslogtreecommitdiffstats
path: root/core/rostermanager.lua
diff options
context:
space:
mode:
Diffstat (limited to 'core/rostermanager.lua')
-rw-r--r--core/rostermanager.lua56
1 files changed, 40 insertions, 16 deletions
diff --git a/core/rostermanager.lua b/core/rostermanager.lua
index a9b26f23..f196ccf3 100644
--- a/core/rostermanager.lua
+++ b/core/rostermanager.lua
@@ -22,9 +22,11 @@ local datamanager = require "util.datamanager"
local um_user_exists = require "core.usermanager".user_exists;
local st = require "util.stanza";
-module "rostermanager"
+local _ENV = nil;
-function add_to_roster(session, jid, item)
+local save_roster; -- forward declaration
+
+local function add_to_roster(session, jid, item)
if session.roster then
local old_item = session.roster[jid];
session.roster[jid] = item;
@@ -39,7 +41,7 @@ function add_to_roster(session, jid, item)
end
end
-function remove_from_roster(session, jid)
+local function remove_from_roster(session, jid)
if session.roster then
local old_item = session.roster[jid];
session.roster[jid] = nil;
@@ -54,7 +56,7 @@ function remove_from_roster(session, jid)
end
end
-function roster_push(username, host, jid)
+local function roster_push(username, host, jid)
local roster = jid and hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster;
if roster then
local item = hosts[host].sessions[username].roster[jid];
@@ -95,7 +97,7 @@ local function roster_metadata(roster, err)
return metadata;
end
-function load_roster(username, host)
+local function load_roster(username, host)
local jid = username.."@"..host;
log("debug", "load_roster: asked for: %s", jid);
local user = bare_sessions[jid];
@@ -147,7 +149,7 @@ function save_roster(username, host, roster)
return nil;
end
-function process_inbound_subscription_approval(username, host, jid)
+local function process_inbound_subscription_approval(username, host, jid)
local roster = load_roster(username, host);
local item = roster[jid];
if item and item.ask then
@@ -161,7 +163,9 @@ function process_inbound_subscription_approval(username, host, jid)
end
end
-function process_inbound_subscription_cancellation(username, host, jid)
+local is_contact_pending_out -- forward declaration
+
+local function process_inbound_subscription_cancellation(username, host, jid)
local roster = load_roster(username, host);
local item = roster[jid];
local changed = nil;
@@ -183,7 +187,9 @@ function process_inbound_subscription_cancellation(username, host, jid)
end
end
-function process_inbound_unsubscribe(username, host, jid)
+local is_contact_pending_in -- forward declaration
+
+local function process_inbound_unsubscribe(username, host, jid)
local roster = load_roster(username, host);
local item = roster[jid];
local changed = nil;
@@ -210,7 +216,7 @@ local function _get_online_roster_subscription(jidA, jidB)
local item = user and (user.roster[jidB] or { subscription = "none" });
return item and item.subscription;
end
-function is_contact_subscribed(username, host, jid)
+local function is_contact_subscribed(username, host, jid)
do
local selfjid = username.."@"..host;
local user_subscription = _get_online_roster_subscription(selfjid, jid);
@@ -227,7 +233,7 @@ function is_contact_pending_in(username, host, jid)
local roster = load_roster(username, host);
return roster[false].pending[jid];
end
-function set_contact_pending_in(username, host, jid)
+local function set_contact_pending_in(username, host, jid)
local roster = load_roster(username, host);
local item = roster[jid];
if item and (item.subscription == "from" or item.subscription == "both") then
@@ -241,7 +247,7 @@ function is_contact_pending_out(username, host, jid)
local item = roster[jid];
return item and item.ask;
end
-function set_contact_pending_out(username, host, jid) -- subscribe
+local function set_contact_pending_out(username, host, jid) -- subscribe
local roster = load_roster(username, host);
local item = roster[jid];
if item and (item.ask or item.subscription == "to" or item.subscription == "both") then
@@ -255,7 +261,7 @@ function set_contact_pending_out(username, host, jid) -- subscribe
log("debug", "set_contact_pending_out: saving roster; set %s@%s.roster[%q].ask=subscribe", username, host, jid);
return save_roster(username, host, roster);
end
-function unsubscribe(username, host, jid)
+local function unsubscribe(username, host, jid)
local roster = load_roster(username, host);
local item = roster[jid];
if not item then return false; end
@@ -270,7 +276,7 @@ function unsubscribe(username, host, jid)
end
return save_roster(username, host, roster);
end
-function subscribed(username, host, jid)
+local function subscribed(username, host, jid)
if is_contact_pending_in(username, host, jid) then
local roster = load_roster(username, host);
local item = roster[jid];
@@ -287,7 +293,7 @@ function subscribed(username, host, jid)
return save_roster(username, host, roster);
end -- TODO else implement optional feature pre-approval (ask = subscribed)
end
-function unsubscribed(username, host, jid)
+local function unsubscribed(username, host, jid)
local roster = load_roster(username, host);
local item = roster[jid];
local pending = is_contact_pending_in(username, host, jid);
@@ -308,7 +314,7 @@ function unsubscribed(username, host, jid)
return success, pending, subscribed;
end
-function process_outbound_subscription_request(username, host, jid)
+local function process_outbound_subscription_request(username, host, jid)
local roster = load_roster(username, host);
local item = roster[jid];
if item and (item.subscription == "none" or item.subscription == "from") then
@@ -328,4 +334,22 @@ end]]
-return _M;
+return {
+ add_to_roster = add_to_roster;
+ remove_from_roster = remove_from_roster;
+ roster_push = roster_push;
+ load_roster = load_roster;
+ save_roster = save_roster;
+ process_inbound_subscription_approval = process_inbound_subscription_approval;
+ process_inbound_subscription_cancellation = process_inbound_subscription_cancellation;
+ process_inbound_unsubscribe = process_inbound_unsubscribe;
+ is_contact_subscribed = is_contact_subscribed;
+ is_contact_pending_in = is_contact_pending_in;
+ set_contact_pending_in = set_contact_pending_in;
+ is_contact_pending_out = is_contact_pending_out;
+ set_contact_pending_out = set_contact_pending_out;
+ unsubscribe = unsubscribe;
+ subscribed = subscribed;
+ unsubscribed = unsubscribed;
+ process_outbound_subscription_request = process_outbound_subscription_request;
+};