Sha256: 2d049e12f17028711f4f48dd8585dbdb250b63f87b3f8b545aeedb1965d38554

Contents?: true

Size: 1.35 KB

Versions: 6

Compression:

Stored size: 1.35 KB

Contents

require 'rubydns'

module Landrush
  class Server < RExec::Daemon::Base
    Name = Resolv::DNS::Name
    IN   = Resolv::DNS::Resource::IN

    def self.port
      @port ||= 10053
    end

    def self.port=(port)
      @port = port
    end

    def self.upstream_servers
      [[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]]
    end

    def self.interfaces
      [
        [:udp, "0.0.0.0", port],
        [:tcp, "0.0.0.0", port]
      ]
    end

    def self.upstream
      @upstream ||= RubyDNS::Resolver.new(upstream_servers)
    end

    def self.pid
      RExec::Daemon::ProcessFile.recall(self)
    end

    # For RExec
    def self.working_directory
      Landrush.working_dir
    end

    def self.running?
      RExec::Daemon::ProcessFile.status(self) == :running
    end

    def self.prefork
      super
    end

    def self.run
      server = self
      RubyDNS::run_server(:listen => interfaces) do
        self.logger.level = Logger::INFO

        match(/.*/, IN::A) do |transaction|
          host = Store.hosts.find(transaction.name)
          if host
            transaction.respond!(Store.hosts.get(host))
          else
            transaction.passthrough!(server.upstream)
          end
        end

        # Default DNS handler
        otherwise do |transaction|
          transaction.passthrough!(server.upstream)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
landrush-0.9.0 lib/landrush/server.rb
landrush-0.8.0 lib/landrush/server.rb
landrush-0.7.1 lib/landrush/server.rb
landrush-0.7.0 lib/landrush/server.rb
landrush-0.6.0 lib/landrush/server.rb
landrush-0.5.0 lib/landrush/server.rb