mirror of
https://github.com/bjc/prosody.git
synced 2025-04-03 21:27:38 +03:00
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
This commit is contained in:
parent
5da7c3dac3
commit
93d0d13fbb
4 changed files with 42 additions and 16 deletions
|
@ -483,6 +483,9 @@ function interface:tlshandskake()
|
|||
end
|
||||
conn:settimeout(0);
|
||||
self.conn = conn;
|
||||
if conn.sni and self.servername then
|
||||
conn:sni(self.servername);
|
||||
end
|
||||
self:on("starttls");
|
||||
self.ondrain = nil;
|
||||
self.onwritable = interface.tlshandskake;
|
||||
|
@ -512,7 +515,7 @@ function interface:tlshandskake()
|
|||
end
|
||||
end
|
||||
|
||||
local function wrapsocket(client, server, read_size, listeners, tls_ctx) -- luasocket object -> interface object
|
||||
local function wrapsocket(client, server, read_size, listeners, tls_ctx, extra) -- luasocket object -> interface object
|
||||
client:settimeout(0);
|
||||
local conn = setmetatable({
|
||||
conn = client;
|
||||
|
@ -523,8 +526,15 @@ local function wrapsocket(client, server, read_size, listeners, tls_ctx) -- luas
|
|||
writebuffer = {};
|
||||
tls_ctx = tls_ctx or (server and server.tls_ctx);
|
||||
tls_direct = server and server.tls_direct;
|
||||
extra = extra;
|
||||
}, interface_mt);
|
||||
|
||||
if extra then
|
||||
if extra.servername then
|
||||
conn.servername = extra.servername;
|
||||
end
|
||||
end
|
||||
|
||||
conn:updatenames();
|
||||
return conn;
|
||||
end
|
||||
|
@ -617,8 +627,8 @@ local function addserver(addr, port, listeners, read_size, tls_ctx)
|
|||
end
|
||||
|
||||
-- COMPAT
|
||||
local function wrapclient(conn, addr, port, listeners, read_size, tls_ctx)
|
||||
local client = wrapsocket(conn, nil, read_size, listeners, tls_ctx);
|
||||
local function wrapclient(conn, addr, port, listeners, read_size, tls_ctx, extra)
|
||||
local client = wrapsocket(conn, nil, read_size, listeners, tls_ctx, extra);
|
||||
if not client.peername then
|
||||
client.peername, client.peerport = addr, port;
|
||||
end
|
||||
|
@ -631,7 +641,7 @@ local function wrapclient(conn, addr, port, listeners, read_size, tls_ctx)
|
|||
end
|
||||
|
||||
-- New outgoing TCP connection
|
||||
local function addclient(addr, port, listeners, read_size, tls_ctx, typ)
|
||||
local function addclient(addr, port, listeners, read_size, tls_ctx, typ, extra)
|
||||
local create;
|
||||
if not typ then
|
||||
local n = inet_pton(addr);
|
||||
|
@ -653,7 +663,7 @@ local function addclient(addr, port, listeners, read_size, tls_ctx, typ)
|
|||
if not ok then return ok, err; end
|
||||
local ok, err = conn:setpeername(addr, port);
|
||||
if not ok and err ~= "timeout" then return ok, err; end
|
||||
local client = wrapsocket(conn, nil, read_size, listeners, tls_ctx)
|
||||
local client = wrapsocket(conn, nil, read_size, listeners, tls_ctx, extra)
|
||||
local ok, err = client:init();
|
||||
if not ok then return ok, err; end
|
||||
if tls_ctx then
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue