net/server_event.lua
changeset 2240 373e3fd8b862
parent 2239 c050074d453a
child 2303 ecbd68fc46db
equal deleted inserted replaced
2239:c050074d453a 2240:373e3fd8b862
   691 		debug( "new server created with id:", tostring(interface))
   691 		debug( "new server created with id:", tostring(interface))
   692 		return interface
   692 		return interface
   693 	end
   693 	end
   694 end )( )
   694 end )( )
   695 
   695 
   696 local wrapclient = ( function( )
   696 local addclient, wrapclient
   697 	return function( client, addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )
   697 do
   698 		debug( "try to connect to:", addr, serverport, "with parameters:", pattern, localaddr, localport, sslcfg, startssl )
   698 	function wrapclient( client, ip, port, listeners, pattern, sslctx, startssl )
   699 		local sslctx
   699 		local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx )
   700 		if sslcfg then  -- handle ssl/new context
   700 		interface:_start_session()
   701 			if not ssl then
   701 		return interface
   702 				debug "need luasec, but not available" 
   702 		--function handleclient( client, ip, port, server, pattern, listener, _, sslctx )  -- creates an client interface
   703 				return nil, "luasec not found"
   703 	end
   704 			end
   704 	
   705 			sslctx, err = ssl.newcontext( sslcfg )
   705 	function addclient( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )
   706 			if err then
       
   707 				debug( "cannot create new ssl context:", err )
       
   708 				return nil, err
       
   709 			end
       
   710 		end
       
   711 	end
       
   712 end )( )
       
   713 
       
   714 local addclient = ( function( )
       
   715 	return function( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )
       
   716 		local client, err = socket.tcp()  -- creating new socket
   706 		local client, err = socket.tcp()  -- creating new socket
   717 		if not client then
   707 		if not client then
   718 			debug( "cannot create socket:", err ) 
   708 			debug( "cannot create socket:", err ) 
   719 			return nil, err
   709 			return nil, err
   720 		end
   710 		end
   724 			if not res then
   714 			if not res then
   725 				debug( "cannot bind client:", err )
   715 				debug( "cannot bind client:", err )
   726 				return nil, err
   716 				return nil, err
   727 			end
   717 			end
   728 		end
   718 		end
       
   719 		local sslctx
       
   720 		if sslcfg then  -- handle ssl/new context
       
   721 			if not ssl then
       
   722 				debug "need luasec, but not available" 
       
   723 				return nil, "luasec not found"
       
   724 			end
       
   725 			sslctx, err = ssl.newcontext( sslcfg )
       
   726 			if err then
       
   727 				debug( "cannot create new ssl context:", err )
       
   728 				return nil, err
       
   729 			end
       
   730 		end
   729 		local res, err = client:connect( addr, serverport )  -- connect
   731 		local res, err = client:connect( addr, serverport )  -- connect
   730 		if res or ( err == "timeout" ) then
   732 		if res or ( err == "timeout" ) then
   731 			local ip, port = client:getsockname( )
   733 			local ip, port = client:getsockname( )
   732 			local server = function( )
   734 			local server = function( )
   733 				return nil, "this is a dummy server interface"
   735 				return nil, "this is a dummy server interface"
   734 			end
   736 			end
   735 			local interface = handleclient( client, ip, port, server, pattern, listener, sslctx )
   737 			local interface = wrapclient( client, ip, serverport, listeners, pattern, sslctx, startssl )
   736 			interface:_start_connection( startssl )
   738 			interface:_start_connection( startssl )
   737 			debug( "new connection id:", interface )
   739 			debug( "new connection id:", interface.id )
   738 			return interface, err
   740 			return interface, err
   739 		else
   741 		else
   740 			debug( "new connection failed:", err )
   742 			debug( "new connection failed:", err )
   741 			return nil, err
   743 			return nil, err
   742 		end
   744 		end
   743 		return wrapclient( client, addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )    
   745 	end
   744 	end
   746 end
   745 end )( )
   747 
   746 
   748 
   747 local loop = function( )  -- starts the event loop
   749 local loop = function( )  -- starts the event loop
   748 	return base:loop( )
   750 	return base:loop( )
   749 end
   751 end
   750 
   752