Module: DevDNSd::ApplicationMethods::Server
- Included in:
- DevDNSd::Application
- Defined in:
- lib/devdnsd/application.rb
Overview
Methods to process requests.
Instance Method Summary (collapse)
-
- (Object) perform_server
Starts the DNS server.
-
- (Object) process_rule(rule, type, match_data, transaction)
Processes a DNS rule.
-
- (Object) process_rule_in_classes(rule, match_data, transaction)
Processes a rule against a set of DNS resource classes.
Instance Method Details
- (Object) perform_server
Starts the DNS server.
492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 |
# File 'lib/devdnsd/application.rb', line 492 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| 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 |
- (Object) process_rule(rule, type, match_data, transaction)
Processes a DNS rule.
514 515 516 517 518 519 520 521 522 523 524 525 |
# File 'lib/devdnsd/application.rb', line 514 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 |
- (Object) process_rule_in_classes(rule, match_data, transaction)
Processes a rule against a set of DNS resource classes.
532 533 534 535 536 537 538 539 540 541 542 543 |
# File 'lib/devdnsd/application.rb', line 532 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 |