#!/usr/bin/env lua
--- Prosody IM v0.2
--- Copyright (C) 2008 Matthew Wild
--- Copyright (C) 2008 Waqas Hussain
+-- Prosody IM v0.3
+-- Copyright (C) 2008-2009 Matthew Wild
+-- Copyright (C) 2008-2009 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.
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
--
-- Config here --
-- Use lfs? Make a new conf/ dir?
local ok, err = config.load((CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
if not ok then
- log("error", "Couldn't load config file: %s", err);
- log("info", "Falling back to old config file format...")
- ok, err = pcall(dofile, "lxmppd.cfg");
- if not ok then
- log("error", "Old config format loading failed too: %s", err);
- else
- for _, host in ipairs(_G.config.hosts) do
- config.set(host, "core", "defined", true);
- end
-
- config.set("*", "core", "modules_enabled", _G.config.modules);
- config.set("*", "core", "ssl", _G.config.ssl_ctx);
- end
+ print("");
+ print("**************************");
+ print("Prosody was unable to find the configuration file.");
+ print("We looked for: "..(CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
+ print("A sample config file is included in the Prosody download called prosody.cfg.lua.dist");
+ print("Copy or rename it to prosody.cfg.lua and edit as necessary.");
+ print("More help on configuring Prosody can be found at http://prosody.im/doc/configure");
+ print("Good luck!");
+ print("**************************");
+ os.exit(1);
end
end
+require "util.dependencies"
+
local server = require "net.server"
-require "util.dependencies"
-- Maps connections to sessions --
sessions = {};
require "util.import"
require "core.xmlhandlers"
require "core.rostermanager"
-require "core.offlinemessage"
require "core.eventmanager"
require "core.hostmanager"
require "core.modulemanager"
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);
- 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 mkdirs(host)
- if not _mkdir[host] then
- local host_dir = string.format("%s/%s", data_path, encode(host));
- mkdir(host_dir);
- mkdir(host_dir.."/accounts");
- mkdir(host_dir.."/vcard");
- mkdir(host_dir.."/roster");
- mkdir(host_dir.."/private");
- mkdir(host_dir.."/offline");
- _mkdir[host] = true;
- end
-end
-mkdir(data_path);
-
-eventmanager.add_event_hook("host-activated", mkdirs);
-
----------- End of out-of-place code --------------
eventmanager.fire_event("server-starting");
end
-- start listening on sockets
-local function do_ports(option, listener, default, key)
+local function do_ports(option, listener, default, conntype)
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
if type(port) ~= "number" then
log("error", "Non-numeric "..option..": "..tostring(port));
else
- cl.start(listener, { ssl = global_ssl_ctx, [key] = port });
+ cl.start(listener, { ssl = conntype ~= "tcp" and global_ssl_ctx, port = port, type = conntype });
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");
+do_ports("c2s_ports", "xmppclient", {5222}, (global_ssl_ctx and "tls") or "tcp");
+do_ports("s2s_ports", "xmppserver", {5269}, "tcp");
+do_ports("legacy_ssl_ports", "xmppclient", {}, "ssl");
if config.get("*", "core", "console_enabled") then
if cl.get("console") then
- cl.start("console")
+ cl.start("console", { interface = config.get("*", "core", "console_interface") or "127.0.0.1" })
else
log("error", "Console is enabled, but the console module appears not to be loaded");
end