Comparison

net/server_event.lua @ 5776:bd0ff8ae98a8

Remove all trailing whitespace
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 09 Aug 2013 17:48:21 +0200
parent 5756:61521ce49aae
child 5958:451b4649fad2
child 6054:7a5ddbaf758d
comparison
equal deleted inserted replaced
5775:a6c2b8933507 5776:bd0ff8ae98a8
113 113
114 -- Client interface methods 114 -- Client interface methods
115 local interface_mt 115 local interface_mt
116 do 116 do
117 interface_mt = {}; interface_mt.__index = interface_mt; 117 interface_mt = {}; interface_mt.__index = interface_mt;
118 118
119 local addevent = base.addevent 119 local addevent = base.addevent
120 local coroutine_wrap, coroutine_yield = coroutine.wrap,coroutine.yield 120 local coroutine_wrap, coroutine_yield = coroutine.wrap,coroutine.yield
121 121
122 -- Private methods 122 -- Private methods
123 function interface_mt:_position(new_position) 123 function interface_mt:_position(new_position)
124 self.position = new_position or self.position 124 self.position = new_position or self.position
125 return self.position; 125 return self.position;
126 end 126 end
127 function interface_mt:_close() 127 function interface_mt:_close()
128 return self:_destroy(); 128 return self:_destroy();
129 end 129 end
130 130
131 function interface_mt:_start_connection(plainssl) -- should be called from addclient 131 function interface_mt:_start_connection(plainssl) -- should be called from addclient
132 local callback = function( event ) 132 local callback = function( event )
133 if EV_TIMEOUT == event then -- timeout during connection 133 if EV_TIMEOUT == event then -- timeout during connection
134 self.fatalerror = "connection timeout" 134 self.fatalerror = "connection timeout"
135 self:ontimeout() -- call timeout listener 135 self:ontimeout() -- call timeout listener
266 self.interface, self.readcallback = nil, nil 266 self.interface, self.readcallback = nil, nil
267 end 267 end
268 interfacelist( "delete", self ) 268 interfacelist( "delete", self )
269 return true 269 return true
270 end 270 end
271 271
272 function interface_mt:_lock(nointerface, noreading, nowriting) -- lock or unlock this interface or events 272 function interface_mt:_lock(nointerface, noreading, nowriting) -- lock or unlock this interface or events
273 self.nointerface, self.noreading, self.nowriting = nointerface, noreading, nowriting 273 self.nointerface, self.noreading, self.nowriting = nointerface, noreading, nowriting
274 return nointerface, noreading, nowriting 274 return nointerface, noreading, nowriting
275 end 275 end
276 276
277 --TODO: Deprecate 277 --TODO: Deprecate
278 function interface_mt:lock_read(switch) 278 function interface_mt:lock_read(switch)
279 if switch then 279 if switch then
280 return self:pause(); 280 return self:pause();
281 else 281 else
298 if c then 298 if c then
299 self._connections = self._connections + c 299 self._connections = self._connections + c
300 end 300 end
301 return self._connections 301 return self._connections
302 end 302 end
303 303
304 -- Public methods 304 -- Public methods
305 function interface_mt:write(data) 305 function interface_mt:write(data)
306 if self.nowriting then return nil, "locked" end 306 if self.nowriting then return nil, "locked" end
307 --vdebug( "try to send data to client, id/data:", self.id, data ) 307 --vdebug( "try to send data to client, id/data:", self.id, data )
308 data = tostring( data ) 308 data = tostring( data )
341 self:_lock( true ) 341 self:_lock( true )
342 self:_close( 0 ) 342 self:_close( 0 )
343 return true 343 return true
344 end 344 end
345 end 345 end
346 346
347 function interface_mt:socket() 347 function interface_mt:socket()
348 return self.conn 348 return self.conn
349 end 349 end
350 350
351 function interface_mt:server() 351 function interface_mt:server()
352 return self._server or self; 352 return self._server or self;
353 end 353 end
354 354
355 function interface_mt:port() 355 function interface_mt:port()
356 return self._port 356 return self._port
357 end 357 end
358 358
359 function interface_mt:serverport() 359 function interface_mt:serverport()
360 return self._serverport 360 return self._serverport
361 end 361 end
362 362
363 function interface_mt:ip() 363 function interface_mt:ip()
364 return self._ip 364 return self._ip
365 end 365 end
366 366
367 function interface_mt:ssl() 367 function interface_mt:ssl()
368 return self._usingssl 368 return self._usingssl
369 end 369 end
370 370
371 function interface_mt:type() 371 function interface_mt:type()
372 return self._type or "client" 372 return self._type or "client"
373 end 373 end
374 374
375 function interface_mt:connections() 375 function interface_mt:connections()
376 return self._connections 376 return self._connections
377 end 377 end
378 378
379 function interface_mt:address() 379 function interface_mt:address()
380 return self.addr 380 return self.addr
381 end 381 end
382 382
383 function interface_mt:set_sslctx(sslctx) 383 function interface_mt:set_sslctx(sslctx)
384 self._sslctx = sslctx; 384 self._sslctx = sslctx;
385 if sslctx then 385 if sslctx then
386 self.starttls = nil; -- use starttls() of interface_mt 386 self.starttls = nil; -- use starttls() of interface_mt
387 else 387 else
393 if pattern then 393 if pattern then
394 self._pattern = pattern; 394 self._pattern = pattern;
395 end 395 end
396 return self._pattern; 396 return self._pattern;
397 end 397 end
398 398
399 function interface_mt:set_send(new_send) 399 function interface_mt:set_send(new_send)
400 -- No-op, we always use the underlying connection's send 400 -- No-op, we always use the underlying connection's send
401 end 401 end
402 402
403 function interface_mt:starttls(sslctx, call_onconnect) 403 function interface_mt:starttls(sslctx, call_onconnect)
404 debug( "try to start ssl at client id:", self.id ) 404 debug( "try to start ssl at client id:", self.id )
405 local err 405 local err
406 self._sslctx = sslctx; 406 self._sslctx = sslctx;
407 if self._usingssl then -- startssl was already called 407 if self._usingssl then -- startssl was already called
426 debug "ssl session delayed until writebuffer is empty..." 426 debug "ssl session delayed until writebuffer is empty..."
427 end 427 end
428 self.starttls = false; 428 self.starttls = false;
429 return true 429 return true
430 end 430 end
431 431
432 function interface_mt:setoption(option, value) 432 function interface_mt:setoption(option, value)
433 if self.conn.setoption then 433 if self.conn.setoption then
434 return self.conn:setoption(option, value); 434 return self.conn:setoption(option, value);
435 end 435 end
436 return false, "setoption not implemented"; 436 return false, "setoption not implemented";
437 end 437 end
438 438
439 function interface_mt:setlistener(listener) 439 function interface_mt:setlistener(listener)
440 self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout, self.onreadtimeout, self.onstatus 440 self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout, self.onreadtimeout, self.onstatus
441 = listener.onconnect, listener.ondisconnect, listener.onincoming, 441 = listener.onconnect, listener.ondisconnect, listener.onincoming,
442 listener.ontimeout, listener.onreadtimeout, listener.onstatus; 442 listener.ontimeout, listener.onreadtimeout, listener.onstatus;
443 end 443 end
497 readcallback = false; -- will be called on read events 497 readcallback = false; -- will be called on read events
498 nointerface = true; -- lock/unlock parameter of this interface 498 nointerface = true; -- lock/unlock parameter of this interface
499 noreading = false, nowriting = false; -- locks of the read/writecallback 499 noreading = false, nowriting = false; -- locks of the read/writecallback
500 startsslcallback = false; -- starting handshake callback 500 startsslcallback = false; -- starting handshake callback
501 position = false; -- position of client in interfacelist 501 position = false; -- position of client in interfacelist
502 502
503 -- Properties 503 -- Properties
504 _ip = ip, _port = port, _server = server, _pattern = pattern, 504 _ip = ip, _port = port, _server = server, _pattern = pattern,
505 _serverport = (server and server:port() or nil), 505 _serverport = (server and server:port() or nil),
506 _sslctx = sslctx; -- parameters 506 _sslctx = sslctx; -- parameters
507 _usingssl = false; -- client is using ssl; 507 _usingssl = false; -- client is using ssl;
573 interface.eventwrite = nil 573 interface.eventwrite = nil
574 return -1 574 return -1
575 end 575 end
576 end 576 end
577 end 577 end
578 578
579 interface.readcallback = function( event ) -- called on read events 579 interface.readcallback = function( event ) -- called on read events
580 --vdebug( "new client read event, id/ip/port:", tostring(interface.id), tostring(ip), tostring(port) ) 580 --vdebug( "new client read event, id/ip/port:", tostring(interface.id), tostring(ip), tostring(port) )
581 if interface.noreading or interface.fatalerror then -- leave this event 581 if interface.noreading or interface.fatalerror then -- leave this event
582 --vdebug( "leaving this event because:", tostring(interface.noreading or interface.fatalerror) ) 582 --vdebug( "leaving this event because:", tostring(interface.noreading or interface.fatalerror) )
583 interface.eventread = nil 583 interface.eventread = nil
646 do 646 do
647 function handleserver( server, addr, port, pattern, listener, sslctx ) -- creates an server interface 647 function handleserver( server, addr, port, pattern, listener, sslctx ) -- creates an server interface
648 debug "creating server interface..." 648 debug "creating server interface..."
649 local interface = { 649 local interface = {
650 _connections = 0; 650 _connections = 0;
651 651
652 conn = server; 652 conn = server;
653 onconnect = listener.onconnect; -- will be called when new client connected 653 onconnect = listener.onconnect; -- will be called when new client connected
654 eventread = false; -- read event handler 654 eventread = false; -- read event handler
655 eventclose = false; -- close event handler 655 eventclose = false; -- close event handler
656 readcallback = false; -- read event callback 656 readcallback = false; -- read event callback
657 fatalerror = false; -- error message 657 fatalerror = false; -- error message
658 nointerface = true; -- lock/unlock parameter 658 nointerface = true; -- lock/unlock parameter
659 659
660 _ip = addr, _port = port, _pattern = pattern, 660 _ip = addr, _port = port, _pattern = pattern,
661 _sslctx = sslctx; 661 _sslctx = sslctx;
662 } 662 }
663 interface.id = tostring(interface):match("%x+$"); 663 interface.id = tostring(interface):match("%x+$");
664 interface.readcallback = function( event ) -- server handler, called on incoming connections 664 interface.readcallback = function( event ) -- server handler, called on incoming connections
693 clientinterface:starttls(sslctx, true) 693 clientinterface:starttls(sslctx, true)
694 else 694 else
695 clientinterface:_start_session( true ) 695 clientinterface:_start_session( true )
696 end 696 end
697 debug( "accepted incoming client connection from:", client_ip or "<unknown IP>", client_port or "<unknown port>", "to", port or "<unknown port>"); 697 debug( "accepted incoming client connection from:", client_ip or "<unknown IP>", client_port or "<unknown port>", "to", port or "<unknown port>");
698 698
699 client, err = server:accept() -- try to accept again 699 client, err = server:accept() -- try to accept again
700 end 700 end
701 return EV_READ 701 return EV_READ
702 end 702 end
703 703
704 server:settimeout( 0 ) 704 server:settimeout( 0 )
705 setmetatable(interface, interface_mt) 705 setmetatable(interface, interface_mt)
706 interfacelist( "add", interface ) 706 interfacelist( "add", interface )
707 interface:_start_session() 707 interface:_start_session()
708 return interface 708 return interface
741 local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx ) 741 local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx )
742 interface:_start_connection(sslctx) 742 interface:_start_connection(sslctx)
743 return interface, client 743 return interface, client
744 --function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface 744 --function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface
745 end 745 end
746 746
747 function addclient( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl ) 747 function addclient( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )
748 local client, err = socket.tcp() -- creating new socket 748 local client, err = socket.tcp() -- creating new socket
749 if not client then 749 if not client then
750 debug( "cannot create socket:", err ) 750 debug( "cannot create socket:", err )
751 return nil, err 751 return nil, err
832 return signal_events[signal_num]; 832 return signal_events[signal_num];
833 end 833 end
834 834
835 local function link(sender, receiver, buffersize) 835 local function link(sender, receiver, buffersize)
836 local sender_locked; 836 local sender_locked;
837 837
838 function receiver:ondrain() 838 function receiver:ondrain()
839 if sender_locked then 839 if sender_locked then
840 sender:resume(); 840 sender:resume();
841 sender_locked = nil; 841 sender_locked = nil;
842 end 842 end
843 end 843 end
844 844
845 function sender:onincoming(data) 845 function sender:onincoming(data)
846 receiver:write(data); 846 receiver:write(data);
847 if receiver.writebufferlen >= buffersize then 847 if receiver.writebufferlen >= buffersize then
848 sender_locked = true; 848 sender_locked = true;
849 sender:pause(); 849 sender:pause();