From 54d833e318feb0a6b6b44af42a6241b79fc5bce7 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Fri, 17 Oct 2014 17:30:21 -0400 Subject: net/server: Split up different backends in a nicer way. Add global config option 'server' --- net/server.lua | 89 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 38 deletions(-) (limited to 'net/server.lua') diff --git a/net/server.lua b/net/server.lua index 2a0b89ae..449632ca 100644 --- a/net/server.lua +++ b/net/server.lua @@ -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 @@ if use_luaevent then return server.hook_signal(signal_id, handler); end end -else - use_luaevent = false; + + 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"; -end -if prosody then - local config_get = require "core.configmanager".get; local defaults = {}; - for k,v in pairs(server.cfg or server.getsettings()) do + 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 + error("Unsupported server type") +end + +if prosody then + local config_get = require "core.configmanager".get; 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); -- cgit v1.2.3 From 947d91c964e4066dd1c95a57ebf8da551e51cfea Mon Sep 17 00:00:00 2001 From: daurnimator Date: Tue, 21 Oct 2014 17:26:48 -0400 Subject: net/server: If server.hook_signal exists, overwrite signal.signal; else make server.hook_signal == signal.signal No longer server_event specific server.hook_signal will always exist --- net/server.lua | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'net/server.lua') diff --git a/net/server.lua b/net/server.lua index 449632ca..5c0d0d24 100644 --- a/net/server.lua +++ b/net/server.lua @@ -24,22 +24,6 @@ local set_config; if server_type == "event" 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 - local defaults = {}; for k,v in pairs(server.cfg) do defaults[k] = v; @@ -82,6 +66,24 @@ else error("Unsupported server type") end +-- If server.hook_signal exists, replace signal.signal() +local ok, signal = pcall(require, "util.signal"); +if server.hook_signal then + if ok then + 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 + server.hook_signal = signal.signal; +end + if prosody then local config_get = require "core.configmanager".get; local function load_config() -- cgit v1.2.3 From 1299f0aa603ad2626b2acef532b8de77958e114f Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Wed, 22 Oct 2014 12:56:41 +0100 Subject: net.server: Rename 'server' config option to 'network_backend' (to select which net.server implementation to use) --- net/server.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'net/server.lua') diff --git a/net/server.lua b/net/server.lua index 5c0d0d24..163b4476 100644 --- a/net/server.lua +++ b/net/server.lua @@ -6,7 +6,7 @@ -- COPYING file in the source package for more information. -- -local server_type = prosody and require "core.configmanager".get("*", "server") or "select"; +local server_type = prosody and require "core.configmanager".get("*", "network_backend") or "select"; if prosody and require "core.configmanager".get("*", "use_libevent") then server_type = "event"; end -- cgit v1.2.3 From 96fc243b44f51b5b120431aff6d2d2bbbc4d5f71 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Wed, 22 Oct 2014 15:59:51 -0400 Subject: net/server: Remove print --- net/server.lua | 1 - 1 file changed, 1 deletion(-) (limited to 'net/server.lua') diff --git a/net/server.lua b/net/server.lua index 163b4476..9f24b0a6 100644 --- a/net/server.lua +++ b/net/server.lua @@ -13,7 +13,6 @@ end 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 -- cgit v1.2.3 From ff41d8ed2af5324b8f439a6864e41505ab778080 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Wed, 22 Oct 2014 16:00:40 -0400 Subject: net/server: Handle lack of util.signal correctly --- net/server.lua | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'net/server.lua') diff --git a/net/server.lua b/net/server.lua index 9f24b0a6..a753a19c 100644 --- a/net/server.lua +++ b/net/server.lua @@ -66,9 +66,9 @@ else end -- If server.hook_signal exists, replace signal.signal() -local ok, signal = pcall(require, "util.signal"); -if server.hook_signal then - if ok then +local has_signal, signal = pcall(require, "util.signal"); +if has_signal then + if server.hook_signal then function signal.signal(signal_id, handler) if type(signal_id) == "string" then signal_id = signal[signal_id:upper()]; @@ -78,9 +78,15 @@ if server.hook_signal then end return server.hook_signal(signal_id, handler); end + else + server.hook_signal = signal.signal; end else - server.hook_signal = signal.signal; + if not server.hook_signal then + server.hook_signal = function() + return false, "signal hooking not supported" + end + end end if prosody then -- cgit v1.2.3