-- -- -- -- -- -- -- ---- -- -- -- -- -- -- -- --
if CFG_SOURCEDIR then
- package.path = CFG_SOURCEDIR.."/?.lua;"..package.path
- package.cpath = CFG_SOURCEDIR.."/?.so;"..package.cpath
+ package.path = CFG_SOURCEDIR.."/?.lua;"..package.path;
+ package.cpath = CFG_SOURCEDIR.."/?.so;"..package.cpath;
end
+package.path = package.path..";"..(CFG_SOURCEDIR or ".").."/fallbacks/?.lua";
+package.cpath = package.cpath..";"..(CFG_SOURCEDIR or ".").."/fallbacks/?.so";
+
if CFG_DATADIR then
if os.getenv("HOME") then
CFG_DATADIR = CFG_DATADIR:gsub("^~", os.getenv("HOME"));
prosody.events = require "util.events".new();
+-- Try to determine version
+local version_file = io.open((CFG_SOURCEDIR or ".").."/prosody.version");
+if version_file then
+ prosody.version = version_file:read("*a"):gsub("%s*$", "");
+ version_file:close();
+ if #prosody.version == 12 and prosody.version:match("^[a-f0-9]+$") then
+ prosody.version = "hg:"..prosody.version;
+ end
+else
+ prosody.version = "unknown";
+end
+
+log("info", "Hello and welcome to Prosody version %s", prosody.version);
+
--- Load and initialise core modules
require "util.import"
require "core.xmlhandlers"
local data_path = config.get("*", "core", "data_path") or CFG_DATADIR or "data";
require "util.datamanager".set_data_path(data_path);
-require "util.datamanager".set_callback(function(username, host, datastore)
- return config.get(host, "core", "anonymous_login");
+require "util.datamanager".add_callback(function(username, host, datastore, data)
+ if config.get(host, "core", "anonymous_login") then
+ return false;
+ end
+ return username, host, datastore, data;
end);
----------- End of out-of-place code --------------
-- Function to reload the config file
-function prosody_reload_config()
+function prosody.reload_config()
log("info", "Reloading configuration file");
- eventmanager.fire_event("reloading-config");
+ prosody.events.fire_event("reloading-config");
local ok, level, err = config.load((rawget(_G, "CFG_CONFIGDIR") or ".").."/prosody.cfg.lua");
if not ok then
if level == "parser" then
function prosody.reopen_logfiles()
log("info", "Re-opening log files");
eventmanager.fire_event("reopen-log-files"); -- Handled by appropriate log sinks
+ prosody.events.fire_event("reopen-log-files");
end
-- Function to initiate prosody shutdown
function prosody.shutdown(reason)
log("info", "Shutting down: %s", reason or "unknown reason");
- eventmanager.fire_event("server-stopping", { reason = reason });
+ prosody.events.fire_event("server-stopping", {reason = reason});
server.setquitting(true);
end
-- Signal to modules that we are ready to start
eventmanager.fire_event("server-starting");
+prosody.events.fire_event("server-starting");
-- Load SSL settings from config, and create a ctx table
local global_ssl_ctx = ssl and config.get("*", "core", "ssl");
prosody.lock_globals();
eventmanager.fire_event("server-started");
+prosody.events.fire_event("server-started");
-- Error handler for errors that make it this far
local function catch_uncaught_error(err)
log("error", "%s", traceback);
end
- eventmanager.fire_event("very-bad-error", "*", err, traceback);
+ prosody.events.fire_event("very-bad-error", {error = err, traceback = traceback});
end
while select(2, xpcall(server.loop, catch_uncaught_error)) ~= "quitting" do
end
log("info", "Shutdown status: Cleaning up");
-eventmanager.fire_event("server-cleanup");
+prosody.events.fire_event("server-cleanup");
-- Ok, we're quitting I know, but we
-- need to do some tidying before we go :)
server.setquitting(true);
eventmanager.fire_event("server-stopped");
+prosody.events.fire_event("server-stopped");
log("info", "Shutdown status: Complete!");