250 local ssl |
250 local ssl |
251 |
251 |
252 local dispatch = listeners.onincoming |
252 local dispatch = listeners.onincoming |
253 local status = listeners.onstatus |
253 local status = listeners.onstatus |
254 local disconnect = listeners.ondisconnect |
254 local disconnect = listeners.ondisconnect |
|
255 local drain = listeners.ondrain |
255 |
256 |
256 local bufferqueue = { } -- buffer array |
257 local bufferqueue = { } -- buffer array |
257 local bufferqueuelen = 0 -- end of buffer array |
258 local bufferqueuelen = 0 -- end of buffer array |
258 |
259 |
259 local toclose |
260 local toclose |
282 end |
283 end |
283 handler.setlistener = function( self, listeners ) |
284 handler.setlistener = function( self, listeners ) |
284 dispatch = listeners.onincoming |
285 dispatch = listeners.onincoming |
285 disconnect = listeners.ondisconnect |
286 disconnect = listeners.ondisconnect |
286 status = listeners.onstatus |
287 status = listeners.onstatus |
|
288 drain = listeners.ondrain |
287 end |
289 end |
288 handler.getstats = function( ) |
290 handler.getstats = function( ) |
289 return readtraffic, sendtraffic |
291 return readtraffic, sendtraffic |
290 end |
292 end |
291 handler.ssl = function( ) |
293 handler.ssl = function( ) |
377 return bufferqueue |
379 return bufferqueue |
378 end |
380 end |
379 handler.socket = function( self ) |
381 handler.socket = function( self ) |
380 return socket |
382 return socket |
381 end |
383 end |
382 handler.pattern = function( self, new ) |
384 handler.set_mode = function( self, new ) |
383 pattern = new or pattern |
385 pattern = new or pattern |
384 return pattern |
386 return pattern |
385 end |
387 end |
386 handler.set_send = function ( self, newsend ) |
388 handler.set_send = function ( self, newsend ) |
387 send = newsend or send |
389 send = newsend or send |
390 handler.bufferlen = function( self, readlen, sendlen ) |
392 handler.bufferlen = function( self, readlen, sendlen ) |
391 maxsendlen = sendlen or maxsendlen |
393 maxsendlen = sendlen or maxsendlen |
392 maxreadlen = readlen or maxreadlen |
394 maxreadlen = readlen or maxreadlen |
393 return bufferlen, maxreadlen, maxsendlen |
395 return bufferlen, maxreadlen, maxsendlen |
394 end |
396 end |
|
397 --TODO: Deprecate |
395 handler.lock_read = function (self, switch) |
398 handler.lock_read = function (self, switch) |
396 if switch == true then |
399 if switch == true then |
397 local tmp = _readlistlen |
400 local tmp = _readlistlen |
398 _readlistlen = removesocket( _readlist, socket, _readlistlen ) |
401 _readlistlen = removesocket( _readlist, socket, _readlistlen ) |
399 _readtimes[ handler ] = nil |
402 _readtimes[ handler ] = nil |
406 _readlistlen = addsocket(_readlist, socket, _readlistlen) |
409 _readlistlen = addsocket(_readlist, socket, _readlistlen) |
407 _readtimes[ handler ] = _currenttime |
410 _readtimes[ handler ] = _currenttime |
408 end |
411 end |
409 end |
412 end |
410 return noread |
413 return noread |
|
414 end |
|
415 handler.pause = function (self) |
|
416 return self:lock_read(true); |
|
417 end |
|
418 handler.resume = function (self) |
|
419 return self:lock_read(false); |
411 end |
420 end |
412 handler.lock = function( self, switch ) |
421 handler.lock = function( self, switch ) |
413 handler.lock_read (switch) |
422 handler.lock_read (switch) |
414 if switch == true then |
423 if switch == true then |
415 handler.write = idfalse |
424 handler.write = idfalse |
428 end |
437 end |
429 return noread, nosend |
438 return noread, nosend |
430 end |
439 end |
431 local _readbuffer = function( ) -- this function reads data |
440 local _readbuffer = function( ) -- this function reads data |
432 local buffer, err, part = receive( socket, pattern ) -- receive buffer with "pattern" |
441 local buffer, err, part = receive( socket, pattern ) -- receive buffer with "pattern" |
433 if not err or (err == "wantread" or err == "timeout") or (part and string_len(part) > 0) then -- received something |
442 if not err or (err == "wantread" or err == "timeout") then -- received something |
434 local buffer = buffer or part or "" |
443 local buffer = buffer or part or "" |
435 local len = string_len( buffer ) |
444 local len = string_len( buffer ) |
436 if len > maxreadlen then |
445 if len > maxreadlen then |
437 disconnect( handler, "receive buffer exceeded" ) |
446 disconnect( handler, "receive buffer exceeded" ) |
438 handler:close( true ) |
447 handler:close( true ) |
470 bufferqueuelen = 0 |
479 bufferqueuelen = 0 |
471 bufferlen = 0 |
480 bufferlen = 0 |
472 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist |
481 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist |
473 _ = needtls and handler:starttls(nil, true) |
482 _ = needtls and handler:starttls(nil, true) |
474 _writetimes[ handler ] = nil |
483 _writetimes[ handler ] = nil |
|
484 if drain then |
|
485 drain(handler) |
|
486 end |
475 _ = toclose and handler:close( ) |
487 _ = toclose and handler:close( ) |
476 return true |
488 return true |
477 elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write |
489 elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write |
478 buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer |
490 buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer |
479 bufferqueue[ 1 ] = buffer -- insert new buffer in queue |
491 bufferqueue[ 1 ] = buffer -- insert new buffer in queue |
664 _socketlist[ socket ] = nil |
676 _socketlist[ socket ] = nil |
665 socket:close( ) |
677 socket:close( ) |
666 --mem_free( ) |
678 --mem_free( ) |
667 end |
679 end |
668 |
680 |
|
681 local function link(sender, receiver, buffersize) |
|
682 sender:set_mode(buffersize); |
|
683 local sender_locked; |
|
684 local _sendbuffer = receiver.sendbuffer; |
|
685 function receiver.sendbuffer() |
|
686 _sendbuffer(); |
|
687 if sender_locked and receiver.bufferlen() < buffersize then |
|
688 sender:lock_read(false); -- Unlock now |
|
689 sender_locked = nil; |
|
690 end |
|
691 end |
|
692 |
|
693 local _readbuffer = sender.readbuffer; |
|
694 function sender.readbuffer() |
|
695 _readbuffer(); |
|
696 if not sender_locked and receiver.bufferlen() >= buffersize then |
|
697 sender_locked = true; |
|
698 sender:lock_read(true); |
|
699 end |
|
700 end |
|
701 end |
|
702 |
669 ----------------------------------// PUBLIC //-- |
703 ----------------------------------// PUBLIC //-- |
670 |
704 |
671 addserver = function( addr, port, listeners, pattern, sslctx ) -- this function provides a way for other scripts to reg a server |
705 addserver = function( addr, port, listeners, pattern, sslctx ) -- this function provides a way for other scripts to reg a server |
672 local err |
706 local err |
673 if type( listeners ) ~= "table" then |
707 if type( listeners ) ~= "table" then |
887 |
921 |
888 addclient = addclient, |
922 addclient = addclient, |
889 wrapclient = wrapclient, |
923 wrapclient = wrapclient, |
890 |
924 |
891 loop = loop, |
925 loop = loop, |
|
926 link = link, |
892 stats = stats, |
927 stats = stats, |
893 closeall = closeall, |
928 closeall = closeall, |
894 addtimer = addtimer, |
929 addtimer = addtimer, |
895 addserver = addserver, |
930 addserver = addserver, |
896 getserver = getserver, |
931 getserver = getserver, |