X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fserver.lua;h=54eadbc617b9f0c06861b2d69dca4681ddbdc696;hb=f7f712f889b15132b3466806f337df7a9a427010;hp=ce2c74bb454506f6679ad6aab3a4677f5f885a18;hpb=3eb8493b735892759098e5c3710c0d8549580457;p=prosody.git diff --git a/net/server.lua b/net/server.lua index ce2c74bb..54eadbc6 100644 --- a/net/server.lua +++ b/net/server.lua @@ -157,6 +157,7 @@ _cleanqueue = false -- clean bufferqueue after using _maxclientsperserver = 1000 +_maxsslhandshake = 30 -- max handshake round-trips ----------------------------------// PRIVATE //-- wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxconnections, startssl ) -- this function wraps a server @@ -300,6 +301,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport local ssl local dispatch = listeners.incoming or listeners.listener + local status = listeners.status local disconnect = listeners.disconnect local bufferqueue = { } -- buffer array @@ -339,6 +341,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport handler.ssl = function( ) return ssl end + handler.sslctx = function ( ) + return sslctx + end handler.send = function( _, data, i, j ) return send( socket, data, i, j ) end @@ -476,10 +481,10 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport readtraffic = readtraffic + count _readtraffic = _readtraffic + count _readtimes[ handler ] = _currenttime - --out_put( "server.lua: read data '", buffer, "', error: ", err ) + --out_put( "server.lua: read data '", buffer:gsub("[^%w%p ]", "."), "', error: ", err ) return dispatch( handler, buffer, err ) else -- connections was closed or fatal error - out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " error: ", tostring(err) ) + out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) ) fatalerror = true disconnect( handler, err ) _ = handler and handler.close( ) @@ -516,7 +521,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport _writetimes[ handler ] = _currenttime return true else -- connection was closed during sending or fatal error - out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " error: ", tostring(err) ) + out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) ) fatalerror = true disconnect( handler, err ) _ = handler and handler.close( ) @@ -530,7 +535,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport local read local handshake = coroutine_wrap( function( client ) -- create handshake coroutine local err - for i = 1, 10 do -- 10 handshake attemps + for i = 1, _maxsslhandshake do _sendlistlen = ( wrote and removesocket( _sendlist, socket, _sendlistlen ) ) or _sendlistlen _readlistlen = ( read and removesocket( _readlist, socket, _readlistlen ) ) or _readlistlen read, wrote = nil, nil @@ -539,7 +544,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport out_put( "server.lua: ssl handshake done" ) handler.readbuffer = _readbuffer -- when handshake is done, replace the handshake function with regular functions handler.sendbuffer = _sendbuffer - -- return dispatch( handler ) + _ = status and status( handler, "ssl-handshake-complete" ) return true else out_put( "server.lua: error during ssl handshake: ", tostring(err) ) @@ -747,7 +752,7 @@ closeall = function( ) end getsettings = function( ) - return _selecttimeout, _sleeptime, _maxsendlen, _maxreadlen, _checkinterval, _sendtimeout, _readtimeout, _cleanqueue, _maxclientsperserver + return _selecttimeout, _sleeptime, _maxsendlen, _maxreadlen, _checkinterval, _sendtimeout, _readtimeout, _cleanqueue, _maxclientsperserver, _maxsslhandshake end changesettings = function( new ) @@ -763,6 +768,7 @@ changesettings = function( new ) _readtimeout = tonumber( new.readtimeout ) or _readtimeout _cleanqueue = new.cleanqueue _maxclientsperserver = new._maxclientsperserver or _maxclientsperserver + _maxsslhandshake = new._maxsslhandshake or _maxsslhandshake return true end @@ -815,7 +821,7 @@ loop = function( ) -- this is the main loop of the program _currenttime = os_time( ) if os_difftime( _currenttime - _timer ) >= 1 then for i = 1, _timerlistlen do - _timerlist[ i ]( ) -- fire timers + _timerlist[ i ]( _currenttime ) -- fire timers end _timer = _currenttime end