Software /
code /
prosody
Comparison
net/server_event.lua @ 2561:e7bec4072c61
net.server_event: Update for compatibility with new server API
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 31 Jan 2010 19:58:52 +0000 |
parent | 2535:75bb31b6c53f |
child | 2599:cc6164d85024 |
comparison
equal
deleted
inserted
replaced
2560:56063f825199 | 2561:e7bec4072c61 |
---|---|
216 else | 216 else |
217 onsomething = self.onsslconnection | 217 onsomething = self.onsslconnection |
218 end | 218 end |
219 self:_start_session( onsomething ) | 219 self:_start_session( onsomething ) |
220 debug( "ssl handshake done" ) | 220 debug( "ssl handshake done" ) |
221 self:onstatus("ssl-handshake-complete"); | |
221 self.eventhandshake = nil | 222 self.eventhandshake = nil |
222 return -1 | 223 return -1 |
223 end | 224 end |
224 debug( "error during ssl handshake:", err ) | 225 debug( "error during ssl handshake:", err ) |
225 if err == "wantwrite" then | 226 if err == "wantwrite" then |
387 | 388 |
388 function interface_mt:set_send(new_send) | 389 function interface_mt:set_send(new_send) |
389 -- No-op, we always use the underlying connection's send | 390 -- No-op, we always use the underlying connection's send |
390 end | 391 end |
391 | 392 |
392 function interface_mt:starttls() | 393 function interface_mt:starttls(sslctx) |
393 debug( "try to start ssl at client id:", self.id ) | 394 debug( "try to start ssl at client id:", self.id ) |
394 local err | 395 local err |
395 if not self._sslctx then -- no ssl available | 396 self._sslctx = sslctx; |
396 err = "no ssl context available" | 397 if self._usingssl then -- startssl was already called |
397 elseif self._usingssl then -- startssl was already called | |
398 err = "ssl already active" | 398 err = "ssl already active" |
399 end | 399 end |
400 if err then | 400 if err then |
401 debug( "error:", err ) | 401 debug( "error:", err ) |
402 return nil, err | 402 return nil, err |
425 end | 425 end |
426 return false, "setoption not implemented"; | 426 return false, "setoption not implemented"; |
427 end | 427 end |
428 | 428 |
429 function interface_mt:setlistener(listener) | 429 function interface_mt:setlistener(listener) |
430 self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout | 430 self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout, self.onstatus |
431 = listener.onconnect, listener.ondisconnect, listener.onincoming, listener.ontimeout; | 431 = listener.onconnect, listener.ondisconnect, listener.onincoming, listener.ontimeout, listener.onstatus; |
432 end | 432 end |
433 | 433 |
434 -- Stub handlers | 434 -- Stub handlers |
435 function interface_mt:onconnect() | 435 function interface_mt:onconnect() |
436 end | 436 end |
437 function interface_mt:onincoming() | 437 function interface_mt:onincoming() |
438 end | 438 end |
439 function interface_mt:ondisconnect() | 439 function interface_mt:ondisconnect() |
440 end | 440 end |
441 function interface_mt:ontimeout() | 441 function interface_mt:ontimeout() |
442 end | |
443 function interface_mt:onstatus() | |
444 debug("server.lua: Dummy onstatus()") | |
442 end | 445 end |
443 end | 446 end |
444 | 447 |
445 -- End of client interface methods | 448 -- End of client interface methods |
446 | 449 |
464 receive = client.receive; | 467 receive = client.receive; |
465 onconnect = listener.onconnect; -- will be called when client disconnects | 468 onconnect = listener.onconnect; -- will be called when client disconnects |
466 ondisconnect = listener.ondisconnect; -- will be called when client disconnects | 469 ondisconnect = listener.ondisconnect; -- will be called when client disconnects |
467 onincoming = listener.onincoming; -- will be called when client sends data | 470 onincoming = listener.onincoming; -- will be called when client sends data |
468 ontimeout = listener.ontimeout; -- called when fatal socket timeout occurs | 471 ontimeout = listener.ontimeout; -- called when fatal socket timeout occurs |
472 onstatus = listener.onstatus; -- called for status changes (e.g. of SSL/TLS) | |
469 eventread = false, eventwrite = false, eventclose = false, | 473 eventread = false, eventwrite = false, eventclose = false, |
470 eventhandshake = false, eventstarthandshake = false; -- event handler | 474 eventhandshake = false, eventstarthandshake = false; -- event handler |
471 eventconnect = false, eventsession = false; -- more event handler... | 475 eventconnect = false, eventsession = false; -- more event handler... |
472 eventwritetimeout = false; -- even more event handler... | 476 eventwritetimeout = false; -- even more event handler... |
473 eventreadtimeout = false; | 477 eventreadtimeout = false; |
483 _ip = ip, _port = port, _server = server, _pattern = pattern, | 487 _ip = ip, _port = port, _server = server, _pattern = pattern, |
484 _serverport = (server and server:port() or nil), | 488 _serverport = (server and server:port() or nil), |
485 _sslctx = sslctx; -- parameters | 489 _sslctx = sslctx; -- parameters |
486 _usingssl = false; -- client is using ssl; | 490 _usingssl = false; -- client is using ssl; |
487 } | 491 } |
488 if not sslctx then | |
489 interface.starttls = false -- don't allow TLS | |
490 end | |
491 interface.id = tostring(interface):match("%x+$"); | 492 interface.id = tostring(interface):match("%x+$"); |
492 interface.writecallback = function( event ) -- called on write events | 493 interface.writecallback = function( event ) -- called on write events |
493 --vdebug( "new client write event, id/ip/port:", interface, ip, port ) | 494 --vdebug( "new client write event, id/ip/port:", interface, ip, port ) |
494 if interface.nowriting or ( interface.fatalerror and ( "client to close" ~= interface.fatalerror ) ) then -- leave this event | 495 if interface.nowriting or ( interface.fatalerror and ( "client to close" ~= interface.fatalerror ) ) then -- leave this event |
495 --vdebug( "leaving this event because:", interface.nowriting or interface.fatalerror ) | 496 --vdebug( "leaving this event because:", interface.nowriting or interface.fatalerror ) |
622 end | 623 end |
623 end | 624 end |
624 | 625 |
625 local handleserver | 626 local handleserver |
626 do | 627 do |
627 function handleserver( server, addr, port, pattern, listener, sslctx, startssl ) -- creates an server interface | 628 function handleserver( server, addr, port, pattern, listener, sslctx ) -- creates an server interface |
628 debug "creating server interface..." | 629 debug "creating server interface..." |
629 local interface = { | 630 local interface = { |
630 _connections = 0; | 631 _connections = 0; |
631 | 632 |
632 conn = server; | 633 conn = server; |
667 end | 668 end |
668 local ip, port = client:getpeername( ) | 669 local ip, port = client:getpeername( ) |
669 interface._connections = interface._connections + 1 -- increase connection count | 670 interface._connections = interface._connections + 1 -- increase connection count |
670 local clientinterface = handleclient( client, ip, port, interface, pattern, listener, nil, sslctx ) | 671 local clientinterface = handleclient( client, ip, port, interface, pattern, listener, nil, sslctx ) |
671 --vdebug( "client id:", clientinterface, "startssl:", startssl ) | 672 --vdebug( "client id:", clientinterface, "startssl:", startssl ) |
672 if startssl then | 673 if sslctx then |
673 clientinterface:starttls() | 674 clientinterface:starttls(sslctx) |
674 else | 675 else |
675 clientinterface:_start_session( clientinterface.onconnect ) | 676 clientinterface:_start_session( clientinterface.onconnect ) |
676 end | 677 end |
677 debug( "accepted incoming client connection from:", ip, port ) | 678 debug( "accepted incoming client connection from:", ip, port ) |
678 client, err = server:accept() -- try to accept again | 679 client, err = server:accept() -- try to accept again |