diff options
-rw-r--r-- | net/connlisteners.lua | 11 | ||||
-rw-r--r-- | net/server.lua | 17 | ||||
-rwxr-xr-x | prosody | 11 |
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, } @@ -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 |