class Blondy::DHCPD::Server

Main class for handling connections

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/blondy/dhcpd/server.rb, line 11
def initialize
  @buffer = String.new
  super
end

Public Instance Methods

receive_data(data) click to toggle source

Fires up Dispatcher and send reply back by callback

# File lib/blondy/dhcpd/server.rb, line 16
def receive_data(data)
  @buffer.clear if (@buffer.size + data.size) > 1000
  @buffer += data

  if @buffer.unpack('C4Nn2N4C16C192NC*').include?($DHCP_MAGIC)
    process_message(@buffer.dup)
    @buffer.clear
  end
end

Private Instance Methods

process_message(buffer) click to toggle source
# File lib/blondy/dhcpd/server.rb, line 28
def process_message(buffer)
  ip, port = Socket.unpack_sockaddr_in(get_peername)
  action = proc do
    begin
      Dispatcher.dispatch(buffer, ip, port)
    rescue NoMessageHandler
      Logger.warn 'No handler for message found. Ignore.'
      false
    rescue IncorrectMessage
      Logger.warn 'Incorrect message received. Ignore.'
      false
    end
  end
  callback = proc { |reply| send_datagram(reply.data.pack, reply.ip, reply.port) if reply && reply.data }
  EM.defer(action,callback)
end