aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/connlisteners.lua11
-rw-r--r--net/server.lua17
2 files changed, 19 insertions, 9 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,
}