X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=prosody;h=98d15da2a6c3783c5b6f3b31dd26e38eb7101308;hb=04e58425b9ccf5f83845bbe02266be8e6a32cd36;hp=9fd5e4ff6c00c31409d8e909f6bf050a5e55d1a2;hpb=930d1bd2569d90df0472265804d94b82fb2ec7ae;p=prosody.git diff --git a/prosody b/prosody index 9fd5e4ff..98d15da2 100755 --- a/prosody +++ b/prosody @@ -1,5 +1,5 @@ #!/usr/bin/env lua --- Prosody IM v0.1 +-- Prosody IM v0.2 -- Copyright (C) 2008 Matthew Wild -- Copyright (C) 2008 Waqas Hussain -- @@ -18,8 +18,6 @@ -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -- - - -- Config here -- CFG_SOURCEDIR=nil; @@ -47,6 +45,9 @@ pcall(require, "luarocks.require") config = require "core.configmanager" log = require "util.logger".init("general"); +-- Disable log output, needs to read from config +-- require "util.logger".setwriter(function () end); + do -- TODO: Check for other formats when we add support for them -- Use lfs? Make a new conf/ dir? @@ -68,8 +69,6 @@ do end end -require "util.datamanager".set_data_path(data_path); - local server = require "net.server" require "util.dependencies" @@ -78,7 +77,6 @@ require "util.dependencies" sessions = {}; hosts = {}; - -- Load and initialise core modules -- require "util.import" @@ -104,17 +102,20 @@ require "util.jid" ------------------------------------------------------------------------ + ------------- Begin code without a home --------------------- local data_path = config.get("*", "core", "data_path") or CFG_DATADIR or "data"; +require "util.datamanager".set_data_path(data_path); + + local path_separator = "/"; if os.getenv("WINDIR") then path_separator = "\\" end local _mkdir = {} function mkdir(path) path = path:gsub("/", path_separator); - --print("mkdir",path); local x = io.popen("mkdir \""..path.."\" 2>&1"):read("*a"); end -function encode(s) return s and (s:gsub("%W", function (c) return string.format("%%%x", c:byte()); end)); end +function encode(s) return s and (s:gsub("%W", function (c) return string.format("%%%02x", c:byte()); end)); end function mkdirs(host) if not _mkdir[host] then local host_dir = string.format("%s/%s", data_path, encode(host)); @@ -135,25 +136,9 @@ eventmanager.add_event_hook("host-activated", mkdirs); eventmanager.fire_event("server-starting"); --- Initialise modules - -for host in pairs(hosts) do - if host ~= "*" then - local modules_enabled = config.get(host, "core", "modules_enabled"); - if modules_enabled then - for _, module in pairs(modules_enabled) do - modulemanager.load(host, module); - end - end - end -end -- setup error handling -setmetatable(_G, { __index = function (t, k) print("WARNING: ATTEMPT TO READ A NIL GLOBAL!!!", k); error("Attempt to read a non-existent global. Naughty boy.", 2); end, __newindex = function (t, k, v) print("ATTEMPT TO SET A GLOBAL!!!!", tostring(k).." = "..tostring(v)); error("Attempt to set a global. Naughty boy.", 2); end }) --]][][[]][]; - -local protected_handler = function (conn, data, err) local success, ret = pcall(handler, conn, data, err); if not success then print("ERROR on "..tostring(conn)..": "..ret); conn:close(); end end; -local protected_disconnect = function (conn, err) local success, ret = pcall(disconnect, conn, err); if not success then print("ERROR on "..tostring(conn).." disconnect: "..ret); conn:close(); end end; - +setmetatable(_G, { __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 }); local global_ssl_ctx = config.get("*", "core", "ssl"); if global_ssl_ctx then @@ -162,8 +147,25 @@ if global_ssl_ctx then end -- start listening on sockets -cl.start("xmppclient", { ssl = global_ssl_ctx }) -cl.start("xmppserver", { ssl = global_ssl_ctx }) +local function do_ports(option, listener, default, key) + local ports = config.get("*", "core", option) or default; + --if type(ports) == "number" then ports = {ports} end; + if type(ports) ~= "table" then + log("error", "core."..option.." is not a table"); + else + for _, port in ipairs(ports) do + if type(port) ~= "number" then + log("error", "Non-numeric "..option..": "..tostring(port)); + else + cl.start(listener, { ssl = global_ssl_ctx, [key] = port }); + end + end + end +end + +do_ports("c2s_ports", "xmppclient", {5222}, "port"); +do_ports("s2s_ports", "xmppserver", {5269}, "port"); +do_ports("legacy_ssl_ports", "xmppclient", {}, "legacy_ssl_port"); if config.get("*", "core", "console_enabled") then if cl.get("console") then