X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=prosody;h=b6247f21543aef6ee68a8d9f1993cdd880fd60a9;hb=40ec7f894bbea6c50bb014fbd5d203ea781dfe79;hp=8cc56afd25f7d526121da68bfdcf58d2a686dd1f;hpb=c53905eb32f7bfd86f749f260b68d354552262c4;p=prosody.git diff --git a/prosody b/prosody index 8cc56afd..b6247f21 100755 --- a/prosody +++ b/prosody @@ -1,5 +1,5 @@ #!/usr/bin/env lua --- Prosody IM v0.4 +-- Prosody IM -- Copyright (C) 2008-2009 Matthew Wild -- Copyright (C) 2008-2009 Waqas Hussain -- @@ -17,10 +17,13 @@ CFG_DATADIR=os.getenv("PROSODY_DATADIR"); -- -- -- -- -- -- -- ---- -- -- -- -- -- -- -- -- 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")); @@ -85,6 +88,22 @@ prosody.paths = { source = CFG_SOURCEDIR, config = CFG_CONFIGDIR, prosody.arg = arg; +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" @@ -119,16 +138,19 @@ require "util.jid" 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 @@ -143,17 +165,19 @@ end 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"); @@ -164,6 +188,7 @@ end -- start listening on sockets function net_activate_ports(option, listener, default, conntype) + if not cl.get(listener) then return; end local ports = config.get("*", "core", option.."_ports") or default; if type(ports) == "number" then ports = {ports} end; @@ -177,7 +202,9 @@ function net_activate_ports(option, listener, default, conntype) cl.start(listener, { ssl = conntype ~= "tcp" and global_ssl_ctx, port = port, - interface = config.get("*", "core", option.."_interface"), + interface = config.get("*", "core", option.."_interface") + or cl.get(listener).default_interface + or config.get("*", "core", "interface"), type = conntype }); end @@ -189,10 +216,7 @@ net_activate_ports("c2s", "xmppclient", {5222}, (global_ssl_ctx and "tls") or "t net_activate_ports("s2s", "xmppserver", {5269}, "tcp"); net_activate_ports("component", "xmppcomponent", {}, "tcp"); net_activate_ports("legacy_ssl", "xmppclient", {}, "ssl"); - -if cl.get("console") then - cl.start("console", { interface = config.get("*", "core", "console_interface") or "127.0.0.1" }) -end +net_activate_ports("console", "console", {5582}, "tcp"); -- Catch global accesses -- local locked_globals_mt = { __index = function (t, k) error("Attempt to read a non-existent global '"..k.."'", 2); end, __newindex = function (t, k, v) error("Attempt to set a global: "..tostring(k).." = "..tostring(v), 2); end } @@ -208,7 +232,10 @@ end -- And lock now... prosody.lock_globals(); +prosody.start_time = os.time(); + 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) @@ -222,7 +249,7 @@ 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 @@ -230,7 +257,7 @@ 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 :) @@ -266,4 +293,5 @@ server.closeall(); server.setquitting(true); eventmanager.fire_event("server-stopped"); +prosody.events.fire_event("server-stopped"); log("info", "Shutdown status: Complete!");