X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fserver.lua;h=375e7081f670bb760f46fe8df757215a34e9617d;hb=fb4d2179c4432d5e18f74758c37cdf125ee2c211;hp=971e17669f5f282109fddab8e9c61f26f0deba59;hpb=af9323473bde0236bfbc32ecb2c7c39f8aec75bf;p=prosody.git diff --git a/net/server.lua b/net/server.lua index 971e1766..375e7081 100644 --- a/net/server.lua +++ b/net/server.lua @@ -1,5 +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 = 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"); @@ -12,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"); @@ -40,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,