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 }

mercurial