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 ) |