# HG changeset patch # User Matthew Wild # Date 1255792887 -3600 # Node ID 52ddaa2e6ab8587732e301f81119cc0148671a36 # Parent 8f9dc8a25660a80ecc3e09f722ccb64705d438bc net.server: Allow changing the sslctx of a connection after it has been established diff -r 8f9dc8a25660 -r 52ddaa2e6ab8 net/server.lua --- a/net/server.lua Sat Oct 17 15:34:21 2009 +0100 +++ b/net/server.lua Sat Oct 17 16:21:27 2009 +0100 @@ -531,11 +531,14 @@ end end - if sslctx then -- ssl? + -- Set the sslctx + local handshake; + function handler.set_sslctx(new_sslctx) ssl = true + sslctx = new_sslctx; local wrote local read - local handshake = coroutine_wrap( function( client ) -- create handshake coroutine + handshake = coroutine_wrap( function( client ) -- create handshake coroutine local err for i = 1, _maxsslhandshake do _sendlistlen = ( wrote and removesocket( _sendlist, socket, _sendlistlen ) ) or _sendlistlen @@ -549,20 +552,20 @@ _ = status and status( handler, "ssl-handshake-complete" ) return true else - out_put( "server.lua: error during ssl handshake: ", tostring(err) ) - if err == "wantwrite" and not wrote then - _sendlistlen = _sendlistlen + 1 - _sendlist[ _sendlistlen ] = client - wrote = true - elseif err == "wantread" and not read then - _readlistlen = _readlistlen + 1 - _readlist [ _readlistlen ] = client - read = true - else - break; - end - --coroutine_yield( handler, nil, err ) -- handshake not finished - coroutine_yield( ) + out_put( "server.lua: error during ssl handshake: ", tostring(err) ) + if err == "wantwrite" and not wrote then + _sendlistlen = _sendlistlen + 1 + _sendlist[ _sendlistlen ] = client + wrote = true + elseif err == "wantread" and not read then + _readlistlen = _readlistlen + 1 + _readlist [ _readlistlen ] = client + read = true + else + break; + end + --coroutine_yield( handler, nil, err ) -- handshake not finished + coroutine_yield( ) end end disconnect( handler, "ssl handshake failed" ) @@ -570,6 +573,9 @@ return false -- handshake failed end ) + end + if sslctx then -- ssl? + handler.set_sslctx(sslctx); if startssl then -- ssl now? --out_put("server.lua: ", "starting ssl handshake") local err