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

Methods included from Logging

log

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_readableObject



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_writableObject



119
120
121
# File 'lib/packetthief/handlers/ssl_server.rb', line 119

def notify_writable
  logdebug "(#{@ssl_class}): Server socket notify writable"
end

#stop_serverObject

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

#unbindObject



131
132
133
# File 'lib/packetthief/handlers/ssl_server.rb', line 131

def unbind
  logdebug "(#{@ssl_class}): Stopping server socket"
end