X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fserver.lua;h=3cdbe5510862805c20929dec487bec9e97207600;hb=99b003b1917a8ab0b561f7fb98d28d1fad8f8dc8;hp=15bba603f3a90fcc04884df913d5235fdf45c79c;hpb=8dd448b689f6fb590d9794c04c15ccbcecc0f32a;p=prosody.git diff --git a/net/server.lua b/net/server.lua index 15bba603..3cdbe551 100644 --- a/net/server.lua +++ b/net/server.lua @@ -1,21 +1,75 @@ -local have_luaevent = pcall(require, "luaevent.core"); -local use_luaevent = require "core.configmanager".get("*", "core", "use_libevent"); +-- 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"); + +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 have_luaevent and use_luaevent == true then +if use_luaevent then server = require "net.server_event"; - 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); + + -- 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"; - package.loaded["net.server"] = server; end +if prosody then + local config_get = require "core.configmanager".get; + local function load_config() + local settings = config_get("*", "core", "network_settings") or {}; + if use_luaevent then + local event_settings = { + ACCEPT_DELAY = settings.event_accept_retry_interval; + 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, v in pairs(event_settings) do + server.cfg[k] = v; + end + else + server.changesettings(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;