+++ /dev/null
--- Prosody IM
--- Copyright (C) 2008-2010 Matthew Wild
--- Copyright (C) 2008-2010 Waqas Hussain
---
--- This project is MIT/X11 licensed. Please see the
--- COPYING file in the source package for more information.
---
-
-
-\r
-local datamanager = require "util.datamanager";\r
-local st = require "util.stanza";\r
-local datetime = require "util.datetime";\r
-local ipairs = ipairs;\r
-\r
-module "offlinemanager"\r
-\r
-function store(node, host, stanza)\r
- stanza.attr.stamp = datetime.datetime();\r
- stanza.attr.stamp_legacy = datetime.legacy();\r
- return datamanager.list_append(node, host, "offline", st.preserialize(stanza));\r
-end\r
-\r
-function load(node, host)\r
- local data = datamanager.list_load(node, host, "offline");\r
- if not data then return; end\r
- for k, v in ipairs(data) do\r
- local stanza = st.deserialize(v);\r
- stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = host, stamp = stanza.attr.stamp}):up(); -- XEP-0203\r
- stanza:tag("x", {xmlns = "jabber:x:delay", from = host, stamp = stanza.attr.stamp_legacy}):up(); -- XEP-0091 (deprecated)\r
- stanza.attr.stamp, stanza.attr.stamp_legacy = nil, nil;\r
- data[k] = stanza;\r
- end\r
- return data;\r
-end\r
-\r
-function deleteAll(node, host)\r
- return datamanager.list_store(node, host, "offline", nil);\r
-end\r
-\r
-return _M;\r
local jid_bare = require "util.jid".bare;
local jid_split = require "util.jid".split;
local user_exists = require "core.usermanager".user_exists;
-local offlinemanager = require "core.offlinemanager";
local t_insert = table.insert;
local function process_to_bare(bare, origin, stanza)
local node, host = jid_split(bare);
if user_exists(node, host) then
-- TODO apply the default privacy list
- offlinemanager.store(node, host, stanza);
+
+ module:fire_event('message/offline/store', {
+ origin = origin,
+ stanza = stanza,
+ });
else
origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
end
local rostermanager = require "core.rostermanager";
local sessionmanager = require "core.sessionmanager";
-local offlinemanager = require "core.offlinemanager";
local function select_top_resources(user)
local priority = 0;
end
if priority >= 0 then
- local offline = offlinemanager.load(node, host);
- if offline then
- for _, msg in ipairs(offline) do
- origin.send(msg); -- FIXME do we need to modify to/from in any way?
- end
- offlinemanager.deleteAll(node, host);
- end
+ local event = { origin = origin }
+ module:fire_event('message/offline/broadcast', event);
+ module:fire_event('message/offline/delete', event);
end
end
if stanza.attr.type == "unavailable" then