Software /
code /
prosody
Diff
net/server.lua @ 1979:52ddaa2e6ab8
net.server: Allow changing the sslctx of a connection after it has been established
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 17 Oct 2009 16:21:27 +0100 |
parent | 1953:64538c620450 |
child | 2057:ee2929e620bb |
line wrap: on
line diff
--- 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