mirror of
https://github.com/bjc/prosody.git
synced 2025-04-03 05:07:42 +03:00
84 lines
2.4 KiB
Lua
84 lines
2.4 KiB
Lua
-- 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("*", "use_libevent");
|
|
|
|
if use_luaevent then
|
|
use_luaevent = pcall(require, "luaevent.core");
|
|
if not use_luaevent then
|
|
log("error", "libevent not found, falling back to select()");
|
|
end
|
|
end
|
|
|
|
local server;
|
|
|
|
if use_luaevent 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
|
|
else
|
|
use_luaevent = false;
|
|
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
|
|
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,
|
|
-- ie. server_select or server_event as chosen above.
|
|
return server;
|