net/server.lua
changeset 658 1952fdcf1017
parent 657 7f1946174d4b
child 659 c424bec771d9
equal deleted inserted replaced
657:7f1946174d4b 658:1952fdcf1017
    92 
    92 
    93 stats = function( )
    93 stats = function( )
    94 	return receivestat, sendstat
    94 	return receivestat, sendstat
    95 end
    95 end
    96 
    96 
    97 wrapserver = function( listener, socket, ip, serverport, mode, sslctx )    -- this function wraps a server
    97 wrapserver = function( listener, socket, ip, serverport, mode, sslctx, wrapper_function )    -- this function wraps a server
    98 
    98 
    99 	local dispatch, disconnect = listener.listener, listener.disconnect    -- dangerous
    99 	local dispatch, disconnect = listener.listener, listener.disconnect    -- dangerous
   100 
   100 
   101 	local wrapclient, err
   101 	local wrapclient, err
   102 
   102 
   103 	out_put("Starting a new server on "..tostring(serverport).." with ssl: "..tostring(sslctx));
   103 	out_put("Starting a new server on "..tostring(serverport).." with ssl: "..tostring(sslctx));
   104 	
   104 	out_put(traceback())
   105 	if sslctx then
   105 	if sslctx then
   106 		if not ssl_newcontext then
   106 		if not ssl_newcontext then
   107 			return nil, "luasec not found"
   107 			return nil, "luasec not found"
   108 		end
   108 		end
   109 		if type( sslctx ) ~= "table" then
   109 		if type( sslctx ) ~= "table" then
   114 		if not sslctx then
   114 		if not sslctx then
   115 			err = err or "wrong sslctx parameters"
   115 			err = err or "wrong sslctx parameters"
   116 			out_error( "server.lua: ", err )
   116 			out_error( "server.lua: ", err )
   117 			return nil, err
   117 			return nil, err
   118 		end
   118 		end
       
   119 	end
       
   120 	
       
   121 	if wrapper_function then
       
   122 		wrapclient = wrapper_function
       
   123 	elseif sslctx then
   119 		wrapclient = wrapsslclient
   124 		wrapclient = wrapsslclient
   120 		wrapclient = wraptlsclient
       
   121 	else
   125 	else
   122 		wrapclient = wraptcpclient
   126 		wrapclient = wraptcpclient
   123 	end
   127 	end
   124 
   128 	
   125 	local accept = socket.accept
   129 	local accept = socket.accept
   126 	local close = socket.close
   130 	local close = socket.close
   127 
   131 
   128 	--// public methods of the object //--    
   132 	--// public methods of the object //--    
   129 
   133 
   766 	for i, listener in ipairs( timelistener ) do
   770 	for i, listener in ipairs( timelistener ) do
   767 		listener( )
   771 		listener( )
   768 	end
   772 	end
   769 end
   773 end
   770 
   774 
   771 addserver = function( listeners, port, addr, mode, sslctx )    -- this function provides a way for other scripts to reg a server
   775 addserver = function( listeners, port, addr, mode, sslctx, wrapper_function )    -- this function provides a way for other scripts to reg a server
   772 	local err
   776 	local err
   773 	if type( listeners ) ~= "table" then
   777 	if type( listeners ) ~= "table" then
   774 		err = "invalid listener table"
   778 		err = "invalid listener table"
   775 	else
   779 	else
   776 		for name, func in pairs( listeners ) do
   780 		for name, func in pairs( listeners ) do
   795 	local server, err = socket_bind( addr, port )
   799 	local server, err = socket_bind( addr, port )
   796 	if err then
   800 	if err then
   797 		out_error( "server.lua: ", err )
   801 		out_error( "server.lua: ", err )
   798 		return nil, err
   802 		return nil, err
   799 	end
   803 	end
   800 	local handler, err = wrapserver( listeners, server, addr, port, mode, sslctx )    -- wrap new server socket
   804 	local handler, err = wrapserver( listeners, server, addr, port, mode, sslctx, wrapper_function )    -- wrap new server socket
   801 	if not handler then
   805 	if not handler then
   802 		server:close( )
   806 		server:close( )
   803 		return nil, err
   807 		return nil, err
   804 	end
   808 	end
   805 	server:settimeout( 0 )
   809 	server:settimeout( 0 )
   875 	loop = loop,
   879 	loop = loop,
   876 	stats = stats,
   880 	stats = stats,
   877 	closeall = closeall,
   881 	closeall = closeall,
   878 	addtimer = addtimer,
   882 	addtimer = addtimer,
   879 	wraptcpclient = wraptcpclient,
   883 	wraptcpclient = wraptcpclient,
       
   884 	wrapsslclient = wrapsslclient,
   880 	wraptlsclient = wraptlsclient,
   885 	wraptlsclient = wraptlsclient,
   881 }
   886 }