aboutsummaryrefslogtreecommitdiffstats
path: root/net/server_event.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-08-17 23:01:14 +0200
committerKim Alvefur <zash@zash.se>2020-08-17 23:01:14 +0200
commit93d0d13fbb20af44330260c2884d1358efc3e653 (patch)
tree865d487db4a9ea6ec76ce093bfd405bfb76a87ff /net/server_event.lua
parent5da7c3dac30393ae30505fac2f641f9e04ea5458 (diff)
downloadprosody-93d0d13fbb20af44330260c2884d1358efc3e653.tar.gz
prosody-93d0d13fbb20af44330260c2884d1358efc3e653.zip
net.server: Backport client parts of SNI support from trunk (#409)
Partial backports of the following commits from trunk: 6c804b6b2ca2 net.http: Pass server name along for SNI (fixes #1408) 75d2874502c3 net.server_select: SNI support (#409) 9a905888b96c net.server_event: Add SNI support (#409) adc0672b700e net.server_epoll: Add support for SNI (#409) d4390c427a66 net.server: Handle server name (SNI) as extra argument
Diffstat (limited to 'net/server_event.lua')
-rw-r--r--net/server_event.lua17
1 files changed, 12 insertions, 5 deletions
diff --git a/net/server_event.lua b/net/server_event.lua
index 11bd6a29..746526ce 100644
--- a/net/server_event.lua
+++ b/net/server_event.lua
@@ -164,6 +164,11 @@ function interface_mt:_start_ssl(call_onconnect) -- old socket will be destroyed
debug( "fatal error while ssl wrapping:", err )
return false
end
+
+ if self.conn.sni and self.servername then
+ self.conn:sni(self.servername);
+ end
+
self.conn:settimeout( 0 ) -- set non blocking
local handshakecallback = coroutine_wrap(function( event )
local _, err
@@ -456,7 +461,7 @@ end
-- End of client interface methods
-local function handleclient( client, ip, port, server, pattern, listener, sslctx ) -- creates an client interface
+local function handleclient( client, ip, port, server, pattern, listener, sslctx, extra ) -- creates an client interface
--vdebug("creating client interfacce...")
local interface = {
type = "client";
@@ -492,6 +497,8 @@ local function handleclient( client, ip, port, server, pattern, listener, sslctx
_serverport = (server and server:port() or nil),
_sslctx = sslctx; -- parameters
_usingssl = false; -- client is using ssl;
+ extra = extra;
+ servername = extra and extra.servername;
}
if not has_luasec then interface.starttls = false; end
interface.id = tostring(interface):match("%x+$");
@@ -716,14 +723,14 @@ local function addserver( addr, port, listener, pattern, sslctx, startssl ) --
return interface
end
-local function wrapclient( client, ip, port, listeners, pattern, sslctx )
- local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx )
+local function wrapclient( client, ip, port, listeners, pattern, sslctx, extra )
+ local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx, extra )
interface:_start_connection(sslctx)
return interface, client
--function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface
end
-local function addclient( addr, serverport, listener, pattern, sslctx, typ )
+local function addclient( addr, serverport, listener, pattern, sslctx, typ, extra )
if sslctx and not has_luasec then
debug "need luasec, but not available"
return nil, "luasec not found"
@@ -750,7 +757,7 @@ local function addclient( addr, serverport, listener, pattern, sslctx, typ )
local res, err = client:setpeername( addr, serverport ) -- connect
if res or ( err == "timeout" ) then
local ip, port = client:getsockname( )
- local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx )
+ local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx, extra )
debug( "new connection id:", interface.id )
return interface, err
else