File

prosody @ 12568:fc6213104d78

util.hashes: Revert to HMAC() convenience function Reverts some of 1e41dd0f8353 Seems HMAC() isn't deprecated after all? Must have been at some point according to #1589 Twice as fast for some reason.
author Kim Alvefur <zash@zash.se>
date Fri, 24 Jun 2022 16:59:54 +0200
parent 12553:cc0ec0277813
child 12578:10bb58ad5583
line wrap: on
line source

#!/usr/bin/env lua
-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--

-- prosody - main executable for Prosody XMPP server

-- Will be modified by configure script if run --

CFG_SOURCEDIR=CFG_SOURCEDIR or os.getenv("PROSODY_SRCDIR");
CFG_CONFIGDIR=CFG_CONFIGDIR or os.getenv("PROSODY_CFGDIR");
CFG_PLUGINDIR=CFG_PLUGINDIR or os.getenv("PROSODY_PLUGINDIR");
CFG_DATADIR=CFG_DATADIR or os.getenv("PROSODY_DATADIR");

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

local function is_relative(path)
	local path_sep = package.config:sub(1,1);
	return ((path_sep == "/" and path:sub(1,1) ~= "/")
		or (path_sep == "\\" and (path:sub(1,1) ~= "/" and path:sub(2,3) ~= ":\\")))
end

-- Tell Lua where to find our libraries
if CFG_SOURCEDIR then
	local function filter_relative_paths(path)
		if is_relative(path) then return ""; end
	end
	local function sanitise_paths(paths)
		return (paths:gsub("[^;]+;?", filter_relative_paths):gsub(";;+", ";"));
	end
	package.path = sanitise_paths(CFG_SOURCEDIR.."/?.lua;"..package.path);
	package.cpath = sanitise_paths(CFG_SOURCEDIR.."/?.so;"..package.cpath);
end

-- Substitute ~ with path to home directory in data path
if CFG_DATADIR then
	if os.getenv("HOME") then
		CFG_DATADIR = CFG_DATADIR:gsub("^~", os.getenv("HOME"));
	end
end



local startup = require "util.startup";
local async = require "util.async";

-- Note: it's important that this thread is not GC'd, as some C libraries
-- that are initialized here store a pointer to it ( :/ ).
local thread = async.runner();

thread:run(startup.prosody);

prosody.main_thread = thread;

local function loop()
	-- Error handler for errors that make it this far
	local function catch_uncaught_error(err)
		if type(err) == "string" and err:match("interrupted!$") then
			return "quitting";
		end

		prosody.log("error", "Top-level error, please report:\n%s", tostring(err));
		local traceback = debug.traceback("", 2);
		if traceback then
			prosody.log("error", "%s", traceback);
		end

		prosody.events.fire_event("very-bad-error", {error = err, traceback = traceback});
	end

	local sleep = require"socket".sleep;
	local server = require "net.server";

	while select(2, xpcall(server.loop, catch_uncaught_error)) ~= "quitting" do
		sleep(0.2);
	end
end

loop();

startup.exit();