X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fserver.lua;h=6fe72712ae26e5f7700ff1275ade476132886f4d;hb=4e16323f2a78a2f20bcd75957f2ada27a5d8b90f;hp=fd6459e849ec251001cb625b96a1cf0d2d5cbb05;hpb=89c747c4feab538246c4b5416c764f778345962c;p=prosody.git diff --git a/net/server.lua b/net/server.lua index fd6459e8..6fe72712 100644 --- a/net/server.lua +++ b/net/server.lua @@ -1,11 +1,9 @@ ---[[ - - server.lua by blastbeat - - - this script contains the server loop of the program - - other scripts can reg a server here - -]]-- +-- +-- server.lua by blastbeat of the luadch project +-- Re-used here under the MIT/X Consortium License +-- +-- Modifications (C) 2008-2009 Matthew Wild, Waqas Hussain +-- -- // wrapping luadch stuff // -- @@ -77,6 +75,7 @@ local idfalse local addtimer local closeall local addserver +local getserver local wrapserver local getsettings local closesocket @@ -173,22 +172,30 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco local ssl = false if sslctx then + ssl = true if not ssl_newcontext then - return nil, "luasec not found" + out_error "luasec not found" + ssl = false end if type( sslctx ) ~= "table" then out_error "server.lua: wrong server sslctx" - return nil, "wrong server sslctx" + ssl = false end sslctx, err = ssl_newcontext( sslctx ) if not sslctx then err = err or "wrong sslctx parameters" out_error( "server.lua: ", err ) - return nil, err + ssl = false end - ssl = true - else - out_put("server.lua: ", "ssl not enabled on ", serverport); + end + if not ssl then + sslctx = false; + if startssl then + out_error( "server.lua: Cannot start ssl on port: ", serverport ) + return nil, "Cannot start ssl, see log for details" + else + out_put("server.lua: ", "ssl not enabled on ", serverport); + end end local accept = socket.accept @@ -521,7 +528,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport end end disconnect( handler, "ssl handshake failed" ) - handler.close( true ) -- forced disconnect + _ = handler and handler.close( true ) -- forced disconnect return false -- handshake failed end ) @@ -537,8 +544,13 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport socket:settimeout( 0 ) handler.readbuffer = handshake handler.sendbuffer = handshake - handshake( socket ) -- do handshake + handshake( socket ) -- do handshake + if not socket then + return nil, nil, "ssl handshake failed"; + end else + -- We're not automatically doing SSL, so we're not secure (yet) + ssl = false handler.starttls = function( now ) if not now then --out_put "server.lua: we need to do tls, but delaying until later" @@ -575,6 +587,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport handler.starttls = nil needtls = nil + + -- Secure now + ssl = true handler.readbuffer = handshake handler.sendbuffer = handshake @@ -647,13 +662,13 @@ addserver = function( listeners, port, addr, pattern, sslctx, maxconnections, st err = "luasec not found" end if err then - out_error( "server.lua: ", err ) + out_error( "server.lua, port ", port, ": ", err ) return nil, err end addr = addr or "*" local server, err = socket_bind( addr, port ) if err then - out_error( "server.lua: ", err ) + out_error( "server.lua, port ", port, ": ", err ) return nil, err end local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, maxconnections, startssl ) -- wrap new server socket @@ -670,12 +685,17 @@ addserver = function( listeners, port, addr, pattern, sslctx, maxconnections, st return handler end +getserver = function ( port ) + return _server[ port ]; +end + removeserver = function( port ) local handler = _server[ port ] if not handler then return nil, "no server found on port '" .. tostring( port ) "'" end handler.close( ) + _server[ port ] = nil return true end @@ -728,7 +748,7 @@ stats = function( ) return _readtraffic, _sendtraffic, _readlistlen, _sendlistlen, _timerlistlen end -local dontstop = true; +local dontstop = true; -- thinking about tomorrow, ... setquitting = function (quit) dontstop = not quit; @@ -844,6 +864,7 @@ return { closeall = closeall, addtimer = addtimer, addserver = addserver, + getserver = getserver, getsettings = getsettings, setquitting = setquitting, removeserver = removeserver,