aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/connlisteners.lua11
-rw-r--r--net/server.lua17
-rwxr-xr-xprosody11
3 files changed, 25 insertions, 14 deletions
diff --git a/net/connlisteners.lua b/net/connlisteners.lua
index f027dfeb..b2435f44 100644
--- a/net/connlisteners.lua
+++ b/net/connlisteners.lua
@@ -20,7 +20,7 @@
local listeners_dir = (CFG_SOURCEDIR or ".").."/net/";
-local server_add = require "net.server".add;
+local server = require "net.server";
local log = require "util.logger".init("connlisteners");
local dofile, pcall, error =
@@ -54,14 +54,19 @@ function get(name)
return h;
end
+local wrapper_functions = { tcp = server.wraptcpclient, ssl = server.wrapsslclient, tls = server.wraptlsclient }
+
function start(name, udata)
local h = get(name);
if not h then
error("No such connection module: "..name, 0);
end
- return server_add(h,
+
+ local wrapper_function = wrapper_functions[(udata and udata.type)] or wrapper_functions.tcp;
+
+ return server.add(h,
(udata and udata.port) or h.default_port or error("Can't start listener "..name.." because no port was specified, and it has no default port", 0),
- (udata and udata.interface) or "*", (udata and udata.mode) or h.default_mode or 1, (udata and udata.ssl) or nil );
+ (udata and udata.interface) or "*", (udata and udata.mode) or h.default_mode or 1, (udata and udata.ssl) or nil, wrapper_function);
end
return _M;
diff --git a/net/server.lua b/net/server.lua
index 8ec2bcfd..ff599419 100644
--- a/net/server.lua
+++ b/net/server.lua
@@ -94,14 +94,14 @@ stats = function( )
return receivestat, sendstat
end
-wrapserver = function( listener, socket, ip, serverport, mode, sslctx ) -- this function wraps a server
+wrapserver = function( listener, socket, ip, serverport, mode, sslctx, wrapper_function ) -- this function wraps a server
local dispatch, disconnect = listener.listener, listener.disconnect -- dangerous
local wrapclient, err
out_put("Starting a new server on "..tostring(serverport).." with ssl: "..tostring(sslctx));
-
+ out_put(traceback())
if sslctx then
if not ssl_newcontext then
return nil, "luasec not found"
@@ -116,12 +116,16 @@ wrapserver = function( listener, socket, ip, serverport, mode, sslctx ) -- th
out_error( "server.lua: ", err )
return nil, err
end
+ end
+
+ if wrapper_function then
+ wrapclient = wrapper_function
+ elseif sslctx then
wrapclient = wrapsslclient
- wrapclient = wraptlsclient
else
wrapclient = wraptcpclient
end
-
+
local accept = socket.accept
local close = socket.close
@@ -768,7 +772,7 @@ firetimer = function( listener )
end
end
-addserver = function( listeners, port, addr, mode, sslctx ) -- this function provides a way for other scripts to reg a server
+addserver = function( listeners, port, addr, mode, sslctx, wrapper_function ) -- this function provides a way for other scripts to reg a server
local err
if type( listeners ) ~= "table" then
err = "invalid listener table"
@@ -797,7 +801,7 @@ addserver = function( listeners, port, addr, mode, sslctx ) -- this function
out_error( "server.lua: ", err )
return nil, err
end
- local handler, err = wrapserver( listeners, server, addr, port, mode, sslctx ) -- wrap new server socket
+ local handler, err = wrapserver( listeners, server, addr, port, mode, sslctx, wrapper_function ) -- wrap new server socket
if not handler then
server:close( )
return nil, err
@@ -877,5 +881,6 @@ return {
closeall = closeall,
addtimer = addtimer,
wraptcpclient = wraptcpclient,
+ wrapsslclient = wrapsslclient,
wraptlsclient = wraptlsclient,
}
diff --git a/prosody b/prosody
index a386324b..2cff8ca4 100755
--- a/prosody
+++ b/prosody
@@ -123,9 +123,10 @@ if global_ssl_ctx then
end
-- start listening on sockets
-local function do_ports(option, listener, default, key)
+local function do_ports(option, listener, default, conntype)
local ports = config.get("*", "core", option) or default;
--if type(ports) == "number" then ports = {ports} end;
+
if type(ports) ~= "table" then
log("error", "core."..option.." is not a table");
else
@@ -133,15 +134,15 @@ local function do_ports(option, listener, default, key)
if type(port) ~= "number" then
log("error", "Non-numeric "..option..": "..tostring(port));
else
- cl.start(listener, { ssl = global_ssl_ctx, [key] = port });
+ cl.start(listener, { ssl = global_ssl_ctx, port = port, type = conntype });
end
end
end
end
-do_ports("c2s_ports", "xmppclient", {5222}, "port");
-do_ports("s2s_ports", "xmppserver", {5269}, "port");
-do_ports("legacy_ssl_ports", "xmppclient", {}, "legacy_ssl_port");
+do_ports("c2s_ports", "xmppclient", {5222}, "tls");
+do_ports("s2s_ports", "xmppserver", {5269}, "tcp");
+do_ports("legacy_ssl_ports", "xmppclient", {}, "ssl");
if config.get("*", "core", "console_enabled") then
if cl.get("console") then