File

net/server.lua @ 5915:e6fed1d80116

Back out 1b0ac7950129, as SSLv3 appears to still be in moderate use on the network. Also, although obsolete, SSLv3 isn't documented to have any weaknesses that TLS 1.0 (the most common version used today) doesn't also have. Get your act together clients!
author Matthew Wild <mwild1@gmail.com>
date Tue, 12 Nov 2013 02:13:01 +0000
parent 5531:483f795f6f99
child 5776:bd0ff8ae98a8
child 7095:3e1dac35af87
line wrap: on
line source

-- 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.
--

local use_luaevent = prosody and require "core.configmanager".get("*", "use_libevent");

if use_luaevent then
	use_luaevent = pcall(require, "luaevent.core");
	if not use_luaevent then
		log("error", "libevent not found, falling back to select()");
	end
end

local server;

if use_luaevent then
	server = require "net.server_event";

	-- Overwrite signal.signal() because we need to ask libevent to
	-- handle them instead
	local ok, signal = pcall(require, "util.signal");
	if ok and signal then
		local _signal_signal = signal.signal;
		function signal.signal(signal_id, handler)
			if type(signal_id) == "string" then
				signal_id = signal[signal_id:upper()];
			end
			if type(signal_id) ~= "number" then
				return false, "invalid-signal";
			end
			return server.hook_signal(signal_id, handler);
		end
	end
else
	use_luaevent = false;
	server = require "net.server_select";
end

if prosody then
	local config_get = require "core.configmanager".get;
	local defaults = {};
	for k,v in pairs(server.cfg or server.getsettings()) do
		defaults[k] = v;
	end
	local function load_config()
		local settings = config_get("*", "network_settings") or {};
		if use_luaevent then
			local event_settings = {
				ACCEPT_DELAY = settings.event_accept_retry_interval;
				ACCEPT_QUEUE = settings.tcp_backlog;
				CLEAR_DELAY = settings.event_clear_interval;
				CONNECT_TIMEOUT = settings.connect_timeout;
				DEBUG = settings.debug;
				HANDSHAKE_TIMEOUT = settings.ssl_handshake_timeout;
				MAX_CONNECTIONS = settings.max_connections;
				MAX_HANDSHAKE_ATTEMPTS = settings.max_ssl_handshake_roundtrips;
				MAX_READ_LENGTH = settings.max_receive_buffer_size;
				MAX_SEND_LENGTH = settings.max_send_buffer_size;
				READ_TIMEOUT = settings.read_timeout;
				WRITE_TIMEOUT = settings.send_timeout;
			};

			for k,default in pairs(defaults) do
				server.cfg[k] = event_settings[k] or default;
			end
		else
			local select_settings = {};
			for k,default in pairs(defaults) do
				select_settings[k] = settings[k] or default;
			end
			server.changesettings(select_settings);
		end
	end
	load_config();
	prosody.events.add_handler("config-reloaded", load_config);
end

-- require "net.server" shall now forever return this,
-- ie. server_select or server_event as chosen above.
return server;