net/server: Split up different backends in a nicer way. Add global config option 'server'
authordaurnimator <quae@daurnimator.com>
Fri, 17 Oct 2014 17:30:21 -0400
changeset 6483 37b12475f648
parent 6482 d016437e01bf
child 6484 dbc72cd1332e
net/server: Split up different backends in a nicer way. Add global config option 'server'
net/server.lua
--- a/net/server.lua	Fri Oct 17 16:35:46 2014 -0400
+++ b/net/server.lua	Fri Oct 17 17:30:21 2014 -0400
@@ -6,18 +6,22 @@
 -- COPYING file in the source package for more information.
 --
 
-local use_luaevent = prosody and require "core.configmanager".get("*", "use_libevent");
+local server_type = prosody and require "core.configmanager".get("*", "server") or "select";
+if prosody and require "core.configmanager".get("*", "use_libevent") then
+	server_type = "event";
+end
 
-if use_luaevent then
-	use_luaevent = pcall(require, "luaevent.core");
-	if not use_luaevent then
+if server_type == "event" then
+	if not pcall(require, "luaevent.core") then
+		print(log)
 		log("error", "libevent not found, falling back to select()");
+		server_type = "select"
 	end
 end
 
 local server;
-
-if use_luaevent then
+local set_config;
+if server_type == "event" then
 	server = require "net.server_event";
 
 	-- Overwrite signal.signal() because we need to ask libevent to
@@ -35,45 +39,54 @@
 			return server.hook_signal(signal_id, handler);
 		end
 	end
+
+	local defaults = {};
+	for k,v in pairs(server.cfg) do
+		defaults[k] = v;
+	end
+	function set_config(settings)
+		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
+	end
+elseif server_type == "select" then
+	server = require "net.server_select";
+
+	local defaults = {};
+	for k,v in pairs(server.getsettings()) do
+		defaults[k] = v;
+	end
+	function set_config(settings)
+		local select_settings = {};
+		for k,default in pairs(defaults) do
+			select_settings[k] = settings[k] or default;
+		end
+		server.changesettings(select_settings);
+	end
 else
-	use_luaevent = false;
-	server = require "net.server_select";
+	error("Unsupported server type")
 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
+		return set_config(settings);
 	end
 	load_config();
 	prosody.events.add_handler("config-reloaded", load_config);