Merge from waqas

Sat, 06 Dec 2008 02:27:34 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Sat, 06 Dec 2008 02:27:34 +0000
changeset 571
3303fe83cd70
parent 567
ae7f6167d780 (diff)
parent 570
f40928c94933 (current diff)
child 572
b2d665689df7

Merge from waqas

--- a/net/server.lua	Sat Dec 06 07:24:15 2008 +0500
+++ b/net/server.lua	Sat Dec 06 02:27:34 2008 +0000
@@ -265,7 +265,7 @@
 			local count = #data * STAT_UNIT
 			rstat = rstat + count
 			receivestat = receivestat + count
-			out_put( "server.lua: read data '", data, "', error: ", err )
+			--out_put( "server.lua: read data '", data, "', error: ", err )
 			return dispatch( handler, data, err )
 		else    -- connections was closed or fatal error
 			out_put( "server.lua: client ", ip, ":", clientport, " error: ", err )
@@ -364,8 +364,6 @@
 	local err
 
 	socket:settimeout( 0 )
-	out_put("setting linger on "..tostring(socket))
-	socket:setoption("linger", { on = true, timeout = 10 });
 	--// private closures of the object //--
 
 	local writequeue = { }    -- buffer for messages to send
@@ -472,9 +470,6 @@
 			if handler.need_tls then
 				out_put("server.lua: connection is ready for tls handshake");
 				handler.starttls(true);
-				if handler.need_tls then
-					out_put("server.lua: uh-oh... we still want tls, something must be wrong");
-				end
 			end
 			return true
 		elseif byte and ( err == "timeout" or err == "wantwrite" ) then    -- want write
@@ -506,13 +501,24 @@
 	handler.starttls = function (now)
 		if not now then out_put("server.lua: we need to do tls, but delaying until later"); handler.need_tls = true; return; end
 		out_put( "server.lua: attempting to start tls on "..tostring(socket) )
+		local oldsocket = socket;
 		socket, err = ssl_wrap( socket, sslctx )    -- wrap socket
 		out_put("sslwrapped socket is "..tostring(socket));
 		if err then
 			out_put( "server.lua: ssl error: ", err )
 			return nil, nil, err    -- fatal error
 		end
-		socket:settimeout( 1 )
+		socket:settimeout(0);
+		
+		-- Add the new socket to our system
+		socketlist[ socket ] = handler
+		readlen = readlen + 1
+		readlist[ readlen ] = socket
+		
+		-- Remove traces of the old socket
+		readlen = removesocket( readlist, oldsocket, readlen )
+		socketlist [ oldsocket ] = nil;
+		
 		send = socket.send
 		receive = socket.receive
 		close = socket.close
@@ -527,6 +533,7 @@
 		end
 		
 		handler.starttls = nil;
+		handler.need_tls = nil
 		
 			handler.handshake = coroutine_wrap( function( client )
 					local err
@@ -536,11 +543,7 @@
 							out_put( "server.lua: ssl handshake done" )
 							writelen = ( wrote and removesocket( writelist, socket, writelen ) ) or writelen
 							handler.receivedata = handler._receivedata    -- when handshake is done, replace the handshake function with regular functions
-							handler.dispatchdata = handler._dispatchdata
-							handler.need_tls = nil
-							socketlist[ client ] = handler
-							readlen = readlen + 1
-							readlist[ readlen ] = client												
+							handler.dispatchdata = handler._dispatchdata;
 							return true;
 						else
 							out_put( "server.lua: error during ssl handshake: ", err )
@@ -564,7 +567,7 @@
 			)
 			handler.receivedata = handler.handshake
 			handler.dispatchdata = handler.handshake
-
+			
 			handler.handshake( socket )    -- do handshake
 		end
 	socketlist[ socket ] = handler
@@ -660,7 +663,7 @@
 			local count = #data * STAT_UNIT
 			rstat = rstat + count
 			receivestat = receivestat + count
-			out_put( "server.lua: read data '", data, "', error: ", err )
+			--out_put( "server.lua: read data '", data, "', error: ", err )
 			return dispatch( handler, data, err )
 		else    -- connections was closed or fatal error
 			out_put( "server.lua: client ", ip, ":", clientport, " error: ", err )

mercurial