aboutsummaryrefslogtreecommitdiffstats
path: root/net/server_select.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_select.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_select.lua')
-rw-r--r--net/server_select.lua19
1 files changed, 14 insertions, 5 deletions
diff --git a/net/server_select.lua b/net/server_select.lua
index 1a40a6d3..deb8fe48 100644
--- a/net/server_select.lua
+++ b/net/server_select.lua
@@ -264,7 +264,7 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx ) -- t
return handler
end
-wrapconnection = function( server, listeners, socket, ip, serverport, clientport, pattern, sslctx ) -- this function wraps a client to a handler object
+wrapconnection = function( server, listeners, socket, ip, serverport, clientport, pattern, sslctx, extra ) -- this function wraps a client to a handler object
if socket:getfd() >= _maxfd then
out_error("server.lua: Disallowed FD number: "..socket:getfd()) -- PROTIP: Switch to libevent
@@ -314,6 +314,11 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
local handler = bufferqueue -- saves a table ^_^
+ handler.extra = extra
+ if extra then
+ handler.servername = extra.servername
+ end
+
handler.dispatch = function( )
return dispatch
end
@@ -624,6 +629,10 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
return nil, err -- fatal error
end
+ if socket.sni and self.servername then
+ socket:sni(self.servername);
+ end
+
socket:settimeout( 0 )
-- add the new socket to our system
@@ -977,8 +986,8 @@ end
--// EXPERIMENTAL //--
-local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx )
- local handler, socket, err = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx )
+local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx, extra )
+ local handler, socket, err = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx, extra)
if not handler then return nil, err end
_socketlist[ socket ] = handler
if not sslctx then
@@ -997,7 +1006,7 @@ local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx
return handler, socket
end
-local addclient = function( address, port, listeners, pattern, sslctx, typ )
+local addclient = function( address, port, listeners, pattern, sslctx, typ, extra )
local err
if type( listeners ) ~= "table" then
err = "invalid listener table"
@@ -1034,7 +1043,7 @@ local addclient = function( address, port, listeners, pattern, sslctx, typ )
client:settimeout( 0 )
local ok, err = client:setpeername( address, port )
if ok or err == "timeout" or err == "Operation already in progress" then
- return wrapclient( client, address, port, listeners, pattern, sslctx )
+ return wrapclient( client, address, port, listeners, pattern, sslctx, extra )
else
return nil, err
end