Module: DevDNSd::ApplicationMethods::Server
- Included in:
- DevDNSd::Application
- Defined in:
- lib/devdnsd/application.rb
Overview
Methods to process requests.
Instance Method Summary collapse
-
#perform_server ⇒ Object
Starts the DNS server.
-
#process_rule(rule, type, match_data, transaction) ⇒ Object
Processes a DNS rule.
-
#process_rule_in_classes(rule, match_data, transaction) ⇒ Object
Processes a rule against a set of DNS resource classes.
Instance Method Details
#perform_server ⇒ Object
Starts the DNS server.
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
# File 'lib/devdnsd/application.rb', line 275 def perform_server application = self RubyDNS::run_server(listen: [[:udp, @config.address, @config.port.to_integer]]) do self.logger = application.logger match(/.+/, DevDNSd::Application::ANY_CLASSES) do |transaction, match_data| transaction.append_question! application.config.rules.each { |rule| application.process_rule_in_classes(rule, match_data, transaction) } # During debugging, wrap the inside of the block with a begin rescue and PRINT the exception because RubyDNS hides it. end # Default DNS handler and event handlers otherwise { |transaction| transaction.failure!(:NXDomain) } on(:start) { application.on_start } on(:stop) { application.on_stop } end end |
#process_rule(rule, type, match_data, transaction) ⇒ Object
Processes a DNS rule.
298 299 300 301 302 303 304 305 306 307 308 309 |
# File 'lib/devdnsd/application.rb', line 298 def process_rule(rule, type, match_data, transaction) reply, type = perform_process_rule(rule, type, match_data, transaction) logger.debug(reply ? i18n.reply(reply, type) : i18n.no_reply) if reply then transaction.respond!(*finalize_reply(reply, rule, type)) elsif reply.is_a?(FalseClass) then false else nil end end |
#process_rule_in_classes(rule, match_data, transaction) ⇒ Object
Processes a rule against a set of DNS resource classes.
316 317 318 319 320 321 322 323 324 325 326 327 |
# File 'lib/devdnsd/application.rb', line 316 def process_rule_in_classes(rule, match_data, transaction) # Get the subset of handled class that is valid for the rule resource_classes = DevDNSd::Application::ANY_CLASSES & rule.resource_class.ensure_array resource_classes = resource_classes & [transaction.resource_class] if transaction.resource_class != DevDNSd::Application::ANY_REQUEST if resource_classes.present? then resource_classes.each do |resource_class| # Now for every class matches = rule.match_host(match_data[0]) process_rule(rule, resource_class, rule.is_regexp? ? matches : nil, transaction) if matches end end end |