class Async::DNS::GenericHandler

Attributes

server[R]
socket[R]

Public Class Methods

new(server, socket) click to toggle source
# File lib/async/dns/handler.rb, line 27
def initialize(server, socket)
        @server = server
        @socket = socket
        
        @logger = @server.logger || Console.logger
end

Public Instance Methods

error_response(query = nil, code = Resolv::DNS::RCode::ServFail) click to toggle source
# File lib/async/dns/handler.rb, line 37
def error_response(query = nil, code = Resolv::DNS::RCode::ServFail)
        # Encoding may fail, so we need to handle this particular case:
        server_failure = Resolv::DNS::Message::new(query ? query.id : 0)
        
        server_failure.qr = 1
        server_failure.opcode = query ? query.opcode : 0
        server_failure.aa = 1
        server_failure.rd = 0
        server_failure.ra = 0

        server_failure.rcode = code

        # We can't do anything at this point...
        return server_failure
end
process_query(data, options) click to toggle source
# File lib/async/dns/handler.rb, line 53
def process_query(data, options)
        @logger.debug "<> Receiving incoming query (#{data.bytesize} bytes) to #{self.class.name}..."
        query = nil

        begin
                query = Async::DNS::decode_message(data)
                
                return @server.process_query(query, options)
        rescue StandardError => error
                @logger.error(self, error)
                
                return error_response(query)
        end
end