Class: Async::DNS::GenericHandler
- Inherits:
-
Object
- Object
- Async::DNS::GenericHandler
- Defined in:
- lib/async/dns/handler.rb
Overview
A generic handler for DNS queries.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#server ⇒ Object
readonly
Returns the value of attribute server.
-
#socket ⇒ Object
readonly
Returns the value of attribute socket.
- #The server that will process incoming queries.(serverthatwillprocessincomingqueries.) ⇒ Object readonly
Instance Method Summary collapse
-
#error_response(query = nil, code = Resolv::DNS::RCode::ServFail) ⇒ Object
Create a new error response.
-
#initialize(server, socket) ⇒ GenericHandler
constructor
Create a new handler.
-
#process_query(data, **options) ⇒ Object
Process an incoming query.
- #The socket to read/write data from/to.=(sockettoread/writedatafrom/to. = (value)) ⇒ Object
Constructor Details
#initialize(server, socket) ⇒ GenericHandler
Create a new handler.
25 26 27 28 |
# File 'lib/async/dns/handler.rb', line 25 def initialize(server, socket) @server = server @socket = socket end |
Instance Attribute Details
#server ⇒ Object (readonly)
Returns the value of attribute server.
31 32 33 |
# File 'lib/async/dns/handler.rb', line 31 def server @server end |
#socket ⇒ Object (readonly)
Returns the value of attribute socket.
34 35 36 |
# File 'lib/async/dns/handler.rb', line 34 def socket @socket end |
#The server that will process incoming queries.(serverthatwillprocessincomingqueries.) ⇒ Object (readonly)
31 |
# File 'lib/async/dns/handler.rb', line 31 attr :server |
Instance Method Details
#error_response(query = nil, code = Resolv::DNS::RCode::ServFail) ⇒ Object
Create a new error response.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/async/dns/handler.rb', line 41 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) ⇒ Object
Process an incoming query.
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/async/dns/handler.rb', line 61 def process_query(data, **) Console.debug "Receiving incoming query (#{data.bytesize} bytes) to #{self.class.name}..." begin query = Resolv::DNS::Message.decode(data) return @server.process_query(query, **) rescue => error Console.error(self, "Failed to process query!", error: error) return error_response(query) end end |
#The socket to read/write data from/to.=(sockettoread/writedatafrom/to. = (value)) ⇒ Object
34 |
# File 'lib/async/dns/handler.rb', line 34 attr :socket |