1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
-- 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 function log(level, format, ...)
print("net.server", level, format:format(...));
end
local default_backend = "select";
local server_type = default_backend;
if (prosody and prosody.config_loaded) then
default_backend = "epoll";
log = require"prosody.util.logger".init("net.server");
server_type = require"prosody.core.configmanager".get("*", "network_backend") or default_backend;
if require"prosody.core.configmanager".get("*", "use_libevent") then
server_type = "event";
end
elseif pcall(require, "prosody.util.poll") then
server_type = "epoll";
end
if server_type == "event" then
if not pcall(require, "luaevent.core") then
log("error", "libevent not found, falling back to %s", default_backend);
server_type = default_backend;
end
end
local server;
local set_config;
if server_type == "event" then
server = require "prosody.net.server_event";
local defaults = {};
for k,v in pairs(server.cfg) do
defaults[k] = v;
end
function set_config(settings)
local event_settings = {
ACCEPT_DELAY = settings.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
end
elseif server_type == "select" then
-- TODO Remove completely.
log("warn", "select is deprecated, the new default is epoll. For more info see https://prosody.im/doc/network_backend");
server = require "prosody.net.server_select";
local defaults = {};
for k,v in pairs(server.getsettings()) do
defaults[k] = v;
end
function set_config(settings)
local select_settings = {};
for k,default in pairs(defaults) do
select_settings[k] = settings[k] or default;
end
server.changesettings(select_settings);
end
else
server = require("prosody.net.server_"..server_type);
set_config = server.set_config;
if not server.get_backend then
function server.get_backend()
return server_type;
end
end
end
-- If server.hook_signal exists, replace signal.signal()
local has_signal, signal = pcall(require, "prosody.util.signal");
if has_signal then
if server.hook_signal then
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
else
server.hook_signal = signal.signal;
end
else
if not server.hook_signal then
server.hook_signal = function()
return false, "signal hooking not supported"
end
end
end
if prosody and set_config then
local config_get = require "prosody.core.configmanager".get;
local function load_config()
local settings = config_get("*", "network_settings") or {};
return set_config(settings);
end
load_config();
prosody.events.add_handler("config-reloaded", load_config);
end
if prosody and server.tls_builder then
local tls_builder = server.tls_builder;
-- resolving the basedir here avoids util.sslconfig depending on
-- prosody.paths.config
function server.tls_builder()
return tls_builder(prosody.paths.config or "")
end
end
-- require "prosody.net.server" shall now forever return this,
-- ie. server_select or server_event as chosen above.
return server;
|