Module: PacketThief::Handlers::SSLServer::InitialServer
- Includes:
- Logging
- Defined in:
- lib/packetthief/handlers/ssl_server.rb
Overview
Handles the initial listening socket. We can’t seem to use EM.start_server -> EM.detach -> em.watch without triggering (in EventMachine 1.0.0):
Assertion failed: (sd != INVALID_SOCKET), function _RunSelectOnce, file em.cpp, line 893.
So we handle the server muckery ourselves.
Instance Method Summary collapse
- #initialize(servsocket, ssl_class, args, block) ⇒ Object
- #notify_readable ⇒ Object
- #notify_writable ⇒ Object
-
#stop_server ⇒ Object
This must be called explicitly.
- #unbind ⇒ Object
Methods included from Logging
Instance Method Details
#initialize(servsocket, ssl_class, args, block) ⇒ Object
95 96 97 98 99 100 |
# File 'lib/packetthief/handlers/ssl_server.rb', line 95 def initialize(servsocket, ssl_class, args, block) @servsocket = servsocket @ssl_class = ssl_class @args = args @block = block end |
#notify_readable ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/packetthief/handlers/ssl_server.rb', line 102 def notify_readable logdebug "(#{@ssl_class}): Received a new connection, spawning a #{@ssl_class}" sock = @servsocket.accept_nonblock ::EM.watch sock, @ssl_class, sock, *@args do |h| logdebug "after initialize" h.server_handler = self h.notify_readable = true # Now call the caller's block. @block.call(h) if @block # And finally finish initialization by applying the context to an # SSLSocket, and setting the internal state. h.tls_begin unless h.tcpsocket.closed? end end |
#notify_writable ⇒ Object
119 120 121 |
# File 'lib/packetthief/handlers/ssl_server.rb', line 119 def notify_writable logdebug "(#{@ssl_class}): Server socket notify writable" end |
#stop_server ⇒ Object
This must be called explicitly. EM doesn’t seem to have a callback for when the EM::run call ends.
124 125 126 127 128 129 |
# File 'lib/packetthief/handlers/ssl_server.rb', line 124 def stop_server unless @servsocket.closed? detach @servsocket.close end end |
#unbind ⇒ Object
131 132 133 |
# File 'lib/packetthief/handlers/ssl_server.rb', line 131 def unbind logdebug "(#{@ssl_class}): Stopping server socket" end |