configmanager: nameprep VirtualHost and Component names
[prosody.git] / net / server.lua
index 1c1a63a4743651ea6120a582dd070a584cdb8233..375e7081f670bb760f46fe8df757215a34e9617d 100644 (file)
@@ -6,7 +6,7 @@
 -- COPYING file in the source package for more information.
 --
 
-local use_luaevent = prosody and require "core.configmanager".get("*", "core", "use_libevent");
+local use_luaevent = prosody and require "core.configmanager".get("*", "use_libevent");
 
 if use_luaevent then
        use_luaevent = pcall(require, "luaevent.core");
@@ -19,18 +19,7 @@ local server;
 
 if use_luaevent then
        server = require "net.server_event";
-       -- util.timer requires "net.server", so instead of having
-       -- Lua look for, and load us again (causing a loop) - set this here
-       -- (usually it isn't set until we return, look down there...)
-       package.loaded["net.server"] = server;
-       
-       -- Backwards compatibility for timers, addtimer
-       -- called a function roughly every second
-       local add_task = require "util.timer".add_task;
-       function server.addtimer(f)
-               return add_task(1, function (...) f(...); return 1; end);
-       end
-       
+
        -- Overwrite signal.signal() because we need to ask libevent to
        -- handle them instead
        local ok, signal = pcall(require, "util.signal");
@@ -47,8 +36,47 @@ if use_luaevent then
                end
        end
 else
+       use_luaevent = false;
        server = require "net.server_select";
-       package.loaded["net.server"] = server;
+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,