aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/modulemanager.lua18
-rw-r--r--core/offlinemessage.lua35
-rw-r--r--doc/lxmppd_core_offlinemessages.txt12
-rwxr-xr-xprosody1
-rw-r--r--util/sasl.lua6
5 files changed, 20 insertions, 52 deletions
diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index 4d654ae0..7c1bc0d8 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -55,6 +55,9 @@ local modulehelpers = setmetatable({}, { __index = _G });
local features_table = multitable_new();
local handler_table = multitable_new();
+local hooked = multitable_new();
+local event_hooks = multitable_new();
+
local NULL = {};
-- Load modules when a host is activated
@@ -151,6 +154,7 @@ function unload(host, name, ...)
handler_info[handlers[1]] = nil;
stanza_handlers:remove(param[1], param[2], param[3], param[4]);
end
+ event_hooks:remove(host, name);
return true;
end
@@ -234,7 +238,19 @@ function api:add_feature(xmlns)
features_table:set(self.host, self.name, xmlns, true);
end
-function api:add_event_hook (...) return eventmanager.add_event_hook(...); end
+local event_hook = function(host, mod_name, event_name, ...)
+ if type((...)) == "table" and (...).host and (...).host ~= host then return; end
+ for handler in pairs(event_hooks:get(host, mod_name, event_name) or NULL) do
+ handler(...);
+ end
+end;
+function api:add_event_hook(name, handler)
+ if not hooked:get(self.host, self.name, name) then
+ eventmanager.add_event_hook(name, function(...) event_hook(self.host, self.name, name, ...); end);
+ hooked:set(self.host, self.name, name, true);
+ end
+ event_hooks:set(self.host, self.name, name, handler, true);
+end
--------------------------------------------------------------------
diff --git a/core/offlinemessage.lua b/core/offlinemessage.lua
deleted file mode 100644
index 36f2948d..00000000
--- a/core/offlinemessage.lua
+++ /dev/null
@@ -1,35 +0,0 @@
--- Prosody IM v0.2
--- Copyright (C) 2008 Matthew Wild
--- Copyright (C) 2008 Waqas Hussain
---
--- This program is free software; you can redistribute it and/or
--- modify it under the terms of the GNU General Public License
--- as published by the Free Software Foundation; either version 2
--- of the License, or (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
---
-
-
-
-require "util.datamanager"
-
-local datamanager = datamanager;
-local t_insert = table.insert;
-
-module "offlinemessage"
-
-function new(user, host, stanza)
- local offlinedata = datamanager.load(user, host, "offlinemsg") or {};
- t_insert(offlinedata, stanza);
- return datamanager.store(user, host, "offlinemsg", offlinedata);
-end
-
-return _M; \ No newline at end of file
diff --git a/doc/lxmppd_core_offlinemessages.txt b/doc/lxmppd_core_offlinemessages.txt
deleted file mode 100644
index fa06a8e0..00000000
--- a/doc/lxmppd_core_offlinemessages.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-lxmppd -> core -> offlinemessages.lua
- requires "util.datamanager"
- module "offlinemessage"
-
-function new(user, host, stanza)
- returns a function that stores the offline message it received
-
-This module offers storing of offline messages.
-
-Description: If the user that is supposed to get the message is not online,
- we store the messages locally as offline messages for later
- processing. \ No newline at end of file
diff --git a/prosody b/prosody
index 5cfa740d..b9e927fb 100755
--- a/prosody
+++ b/prosody
@@ -82,7 +82,6 @@ hosts = {};
require "util.import"
require "core.xmlhandlers"
require "core.rostermanager"
-require "core.offlinemessage"
require "core.eventmanager"
require "core.hostmanager"
require "core.modulemanager"
diff --git a/util/sasl.lua b/util/sasl.lua
index dd8c2002..ee2ba035 100644
--- a/util/sasl.lua
+++ b/util/sasl.lua
@@ -177,12 +177,12 @@ local function new_digest_md5(realm, password_handler)
if not response["qop"] then response["qop"] = "auth" end
if response["realm"] == nil then
- response["realm"] = ""
- elseif response["realm"] ~= self.realm then
+ response["realm"] = "";
+ elseif response["realm"] ~= self.realm and response["realm"] ~= "" then
return "failure", "not-authorized", "Incorrect realm value";
end
- local decoder;
+ local decoder;
if response["charset"] == nil then
decoder = utf8tolatin1ifpossible;
elseif response["charset"] ~= "utf-8" then