2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
9 local server_type = prosody and require "core.configmanager".get("*", "server") or "select";
10 if prosody and require "core.configmanager".get("*", "use_libevent") then
11 server_type = "event";
14 if server_type == "event" then
15 if not pcall(require, "luaevent.core") then
17 log("error", "libevent not found, falling back to select()");
18 server_type = "select"
24 if server_type == "event" then
25 server = require "net.server_event";
27 -- Overwrite signal.signal() because we need to ask libevent to
28 -- handle them instead
29 local ok, signal = pcall(require, "util.signal");
31 local _signal_signal = signal.signal;
32 function signal.signal(signal_id, handler)
33 if type(signal_id) == "string" then
34 signal_id = signal[signal_id:upper()];
36 if type(signal_id) ~= "number" then
37 return false, "invalid-signal";
39 return server.hook_signal(signal_id, handler);
44 for k,v in pairs(server.cfg) do
47 function set_config(settings)
48 local event_settings = {
49 ACCEPT_DELAY = settings.event_accept_retry_interval;
50 ACCEPT_QUEUE = settings.tcp_backlog;
51 CLEAR_DELAY = settings.event_clear_interval;
52 CONNECT_TIMEOUT = settings.connect_timeout;
53 DEBUG = settings.debug;
54 HANDSHAKE_TIMEOUT = settings.ssl_handshake_timeout;
55 MAX_CONNECTIONS = settings.max_connections;
56 MAX_HANDSHAKE_ATTEMPTS = settings.max_ssl_handshake_roundtrips;
57 MAX_READ_LENGTH = settings.max_receive_buffer_size;
58 MAX_SEND_LENGTH = settings.max_send_buffer_size;
59 READ_TIMEOUT = settings.read_timeout;
60 WRITE_TIMEOUT = settings.send_timeout;
63 for k,default in pairs(defaults) do
64 server.cfg[k] = event_settings[k] or default;
67 elseif server_type == "select" then
68 server = require "net.server_select";
71 for k,v in pairs(server.getsettings()) do
74 function set_config(settings)
75 local select_settings = {};
76 for k,default in pairs(defaults) do
77 select_settings[k] = settings[k] or default;
79 server.changesettings(select_settings);
82 error("Unsupported server type")
86 local config_get = require "core.configmanager".get;
87 local function load_config()
88 local settings = config_get("*", "network_settings") or {};
89 return set_config(settings);
92 prosody.events.add_handler("config-reloaded", load_config);
95 -- require "net.server" shall now forever return this,
96 -- ie. server_select or server_event as chosen above.