242 local handler, client, err = wrapconnection( handler, listeners, client, ip, serverport, clientport, pattern, sslctx, startssl ) -- wrap new client socket |
242 local handler, client, err = wrapconnection( handler, listeners, client, ip, serverport, clientport, pattern, sslctx, startssl ) -- wrap new client socket |
243 if err then -- error while wrapping ssl socket |
243 if err then -- error while wrapping ssl socket |
244 return false |
244 return false |
245 end |
245 end |
246 connections = connections + 1 |
246 connections = connections + 1 |
247 out_put( "server.lua: accepted new client connection from ", ip, ":", clientport, " to ", serverport) |
247 out_put( "server.lua: accepted new client connection from ", tostring(ip), ":", tostring(clientport), " to ", tostring(serverport)) |
248 return dispatch( handler ) |
248 return dispatch( handler ) |
249 elseif err then -- maybe timeout or something else |
249 elseif err then -- maybe timeout or something else |
250 out_put( "server.lua: error with new client connection: ", err ) |
250 out_put( "server.lua: error with new client connection: ", tostring(err) ) |
251 return false |
251 return false |
252 end |
252 end |
253 end |
253 end |
254 return handler |
254 return handler |
255 end |
255 end |
441 _readtraffic = _readtraffic + count |
441 _readtraffic = _readtraffic + count |
442 _readtimes[ handler ] = _currenttime |
442 _readtimes[ handler ] = _currenttime |
443 --out_put( "server.lua: read data '", buffer, "', error: ", err ) |
443 --out_put( "server.lua: read data '", buffer, "', error: ", err ) |
444 return dispatch( handler, buffer, err ) |
444 return dispatch( handler, buffer, err ) |
445 else -- connections was closed or fatal error |
445 else -- connections was closed or fatal error |
446 out_put( "server.lua: client ", ip, ":", tostring(clientport), " error: ", tostring(err) ) |
446 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " error: ", tostring(err) ) |
447 fatalerror = true |
447 fatalerror = true |
448 disconnect( handler, err ) |
448 disconnect( handler, err ) |
449 _ = handler and handler.close( ) |
449 _ = handler and handler.close( ) |
450 return false |
450 return false |
451 end |
451 end |
472 bufferqueuelen = 1 |
472 bufferqueuelen = 1 |
473 bufferlen = bufferlen - byte |
473 bufferlen = bufferlen - byte |
474 _writetimes[ handler ] = _currenttime |
474 _writetimes[ handler ] = _currenttime |
475 return true |
475 return true |
476 else -- connection was closed during sending or fatal error |
476 else -- connection was closed during sending or fatal error |
477 out_put( "server.lua: client ", ip, ":", clientport, " error: ", err ) |
477 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " error: ", tostring(err) ) |
478 fatalerror = true |
478 fatalerror = true |
479 disconnect( handler, err ) |
479 disconnect( handler, err ) |
480 _ = handler and handler.close( ) |
480 _ = handler and handler.close( ) |
481 return false |
481 return false |
482 end |
482 end |
498 handler.readbuffer = _readbuffer -- when handshake is done, replace the handshake function with regular functions |
498 handler.readbuffer = _readbuffer -- when handshake is done, replace the handshake function with regular functions |
499 handler.sendbuffer = _sendbuffer |
499 handler.sendbuffer = _sendbuffer |
500 -- return dispatch( handler ) |
500 -- return dispatch( handler ) |
501 return true |
501 return true |
502 else |
502 else |
503 out_put( "server.lua: error during ssl handshake: ", err ) |
503 out_put( "server.lua: error during ssl handshake: ", tostring(err) ) |
504 if err == "wantwrite" and not wrote then |
504 if err == "wantwrite" and not wrote then |
505 _sendlistlen = _sendlistlen + 1 |
505 _sendlistlen = _sendlistlen + 1 |
506 _sendlist[ _sendlistlen ] = client |
506 _sendlist[ _sendlistlen ] = client |
507 wrote = true |
507 wrote = true |
508 elseif err == "wantread" and not read then |
508 elseif err == "wantread" and not read then |
524 if startssl then -- ssl now? |
524 if startssl then -- ssl now? |
525 --out_put("server.lua: ", "starting ssl handshake") |
525 --out_put("server.lua: ", "starting ssl handshake") |
526 local err |
526 local err |
527 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket |
527 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket |
528 if err then |
528 if err then |
529 out_put( "server.lua: ssl error: ", err ) |
529 out_put( "server.lua: ssl error: ", tostring(err) ) |
530 mem_free( ) |
530 mem_free( ) |
531 return nil, nil, err -- fatal error |
531 return nil, nil, err -- fatal error |
532 end |
532 end |
533 socket:settimeout( 0 ) |
533 socket:settimeout( 0 ) |
534 handler.readbuffer = handshake |
534 handler.readbuffer = handshake |
544 --out_put( "server.lua: attempting to start tls on " .. tostring( socket ) ) |
544 --out_put( "server.lua: attempting to start tls on " .. tostring( socket ) ) |
545 local oldsocket, err = socket |
545 local oldsocket, err = socket |
546 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket |
546 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket |
547 --out_put( "server.lua: sslwrapped socket is " .. tostring( socket ) ) |
547 --out_put( "server.lua: sslwrapped socket is " .. tostring( socket ) ) |
548 if err then |
548 if err then |
549 out_put( "server.lua: error while starting tls on client: ", err ) |
549 out_put( "server.lua: error while starting tls on client: ", tostring(err) ) |
550 return nil, err -- fatal error |
550 return nil, err -- fatal error |
551 end |
551 end |
552 |
552 |
553 socket:settimeout( 0 ) |
553 socket:settimeout( 0 ) |
554 |
554 |