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