Changeset

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
parents 1978:8f9dc8a25660
children 1980:8fceabd84d74
files net/server.lua
diffstat 1 files changed, 22 insertions(+), 16 deletions(-) [+]
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