aboutsummaryrefslogtreecommitdiffstats
path: root/net/server.lua
diff options
context:
space:
mode:
Diffstat (limited to 'net/server.lua')
-rw-r--r--net/server.lua58
1 files changed, 43 insertions, 15 deletions
diff --git a/net/server.lua b/net/server.lua
index 1c1a63a4..2a0b89ae 100644
--- a/net/server.lua
+++ b/net/server.lua
@@ -1,12 +1,12 @@
-- 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("*", "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,