---[[\r
-\r
- server.lua by blastbeat\r
-\r
- - this script contains the server loop of the program\r
- - other scripts can reg a server here\r
-\r
-]]--\r
+-- \r
+-- server.lua by blastbeat of the luadch project\r
+-- Re-used here under the MIT/X Consortium License\r
+-- \r
+-- Modifications (C) 2008-2009 Matthew Wild, Waqas Hussain\r
+--\r
\r
-- // wrapping luadch stuff // --\r
\r
local ssl = false\r
\r
if sslctx then\r
+ ssl = true\r
if not ssl_newcontext then\r
- return nil, "luasec not found"\r
+ out_error "luasec not found"\r
+ ssl = false\r
end\r
if type( sslctx ) ~= "table" then\r
out_error "server.lua: wrong server sslctx"\r
- return nil, "wrong server sslctx"\r
+ ssl = false\r
end\r
sslctx, err = ssl_newcontext( sslctx )\r
if not sslctx then\r
err = err or "wrong sslctx parameters"\r
out_error( "server.lua: ", err )\r
- return nil, err\r
+ ssl = false\r
end\r
- ssl = true\r
- else\r
- out_put("server.lua: ", "ssl not enabled on ", serverport);\r
+ end\r
+ if not ssl then\r
+ sslctx = false;\r
+ if startssl then\r
+ out_error( "server.lua: Cannot start ssl on port: ", serverport )\r
+ return nil, "Cannot start ssl, see log for details"\r
+ else\r
+ out_put("server.lua: ", "ssl not enabled on ", serverport);\r
+ end\r
end\r
\r
local accept = socket.accept\r
end\r
end\r
disconnect( handler, "ssl handshake failed" )\r
- handler.close( true ) -- forced disconnect\r
+ _ = handler and handler.close( true ) -- forced disconnect\r
return false -- handshake failed\r
end\r
)\r
socket:settimeout( 0 )\r
handler.readbuffer = handshake\r
handler.sendbuffer = handshake\r
- handshake( socket ) -- do handshake\r
+ handshake( socket ) -- do handshake\r
+ if not socket then\r
+ return nil, nil, "ssl handshake failed";\r
+ end\r
else\r
+ -- We're not automatically doing SSL, so we're not secure (yet)\r
+ ssl = false\r
handler.starttls = function( now )\r
if not now then\r
--out_put "server.lua: we need to do tls, but delaying until later"\r
\r
handler.starttls = nil\r
needtls = nil\r
+ \r
+ -- Secure now\r
+ ssl = true\r
\r
handler.readbuffer = handshake\r
handler.sendbuffer = handshake\r
err = "luasec not found"\r
end\r
if err then\r
- out_error( "server.lua: ", err )\r
+ out_error( "server.lua, port ", port, ": ", err )\r
return nil, err\r
end\r
addr = addr or "*"\r
local server, err = socket_bind( addr, port )\r
if err then\r
- out_error( "server.lua: ", err )\r
+ out_error( "server.lua, port ", port, ": ", err )\r
return nil, err\r
end\r
local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, maxconnections, startssl ) -- wrap new server socket\r
return nil, "no server found on port '" .. tostring( port ) "'"\r
end\r
handler.close( )\r
+ _server[ port ] = nil\r
return true\r
end\r
\r