aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/configmanager.lua36
-rw-r--r--core/modulemanager.lua8
2 files changed, 30 insertions, 14 deletions
diff --git a/core/configmanager.lua b/core/configmanager.lua
index cc7ffb7e..5f5648b9 100644
--- a/core/configmanager.lua
+++ b/core/configmanager.lua
@@ -1,5 +1,7 @@
local _G = _G;
+local setmetatable, loadfile, pcall, rawget, rawset, io =
+ setmetatable, loadfile, pcall, rawget, rawset, io;
module "configmanager"
local parsers = {};
@@ -21,6 +23,10 @@ function section_mt(section_name)
end };
end
+function getconfig()
+ return config;
+end
+
function get(host, section, key)
local sec = config[host][section];
if sec then
@@ -45,15 +51,20 @@ function set(host, section, key, value)
end
function load(filename, format)
+ format = format or filename:match("%w+$");
if parsers[format] and parsers[format].load then
local f = io.open(filename);
if f then
- local ok, err = parsers[format](f:read("*a"));
+ local ok, err = parsers[format].load(f:read("*a"));
f:close();
return ok, err;
end
end
- return false, "no parser";
+ if not format then
+ return nil, "no parser specified";
+ else
+ return false, "no parser";
+ end
end
function save(filename, format)
@@ -65,21 +76,28 @@ function addparser(format, parser)
end
end
+-- Built-in Lua parser
do
+ local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable;
+ local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring;
parsers.lua = {};
function parsers.lua.load(data)
- local env = setmetatable({}, { __index = function (t, k)
- if k:match("^mod_") then
- return function (settings_table)
+ local env;
+ env = setmetatable({ Host = true; host = true; }, { __index = function (t, k)
+ return rawget(_G, k) or
+ function (settings_table)
config[__currenthost or "*"][k] = settings_table;
end;
- end
- return rawget(_G, k);
+ end,
+ __newindex = function (t, k, v)
+ set(env.__currenthost or "*", "core", k, v);
end});
function env.Host(name)
- env.__currenthost = name;
+ rawset(env, "__currenthost", name);
+ set(name or "*", "core", "defined", true);
end
+ env.host = env.Host;
local chunk, err = loadstring(data);
@@ -95,8 +113,6 @@ do
return nil, err;
end
-
-
return true;
end
diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index f4893089..b0fb6cd9 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -78,7 +78,7 @@ function load(name)
local success, ret = pcall(mod);
if not success then
log("error", "Error initialising module '%s': %s", name or "nil", ret or "nil");
- return nil, err;
+ return nil, ret;
end
return true;
end
@@ -92,15 +92,15 @@ function handle_stanza(origin, stanza)
if child then
local xmlns = child.attr.xmlns or xmlns;
log("debug", "Stanza of type %s from %s has xmlns: %s", name, origin_type, xmlns);
- local handler = handlers[origin_type][name] and handlers[origin_type][name][xmlns];
- if handler then
+ local handler = handlers[origin_type][name][xmlns];
+ if handler then
log("debug", "Passing stanza to mod_%s", handler_info[handler].name);
return handler(origin, stanza) or true;
end
end
elseif handlers[origin_type] then
local handler = handlers[origin_type][name];
- if handler then
+ if handler then
handler = handler[xmlns];
if handler then
log("debug", "Passing stanza to mod_%s", handler_info[handler].name);