• Jump To … +
    command.coffee configuration.coffee daemon.coffee dns_server.coffee index.coffee installer.coffee logger.coffee utils.coffee
  • dns_server.coffee

  • ¶

    Pow’s DnsServer is designed to respond to DNS A queries with 127.0.0.1 for all subdomains of the specified top-level domain. When used in conjunction with Mac OS X’s /etc/resolver system, there’s no configuration needed to add and remove host names for local web development.

    dnsserver = require "dnsserver"
    
    NS_T_A  = 1
    NS_C_IN = 1
    NS_RCODE_NXDOMAIN = 3
    
    module.exports = class DnsServer extends dnsserver.Server
  • ¶

    Create a DnsServer with the given Configuration instance. The server installs a single event handler for responding to DNS queries.

        constructor: (@configuration) ->
            super()
            @on "request", @handleRequest
  • ¶

    The listen method is just a wrapper around bind that makes DnsServer quack like a HttpServer (for initialization, at least).

        listen: (port, callback) ->
            @bind port
            callback?()
  • ¶

    Each incoming DNS request ends up here. If it’s an A query and the domain name matches the top-level domain specified in our configuration, we respond with 127.0.0.1. Otherwise, we respond with NXDOMAIN.

        handleRequest: (req, res) ->
            pattern = @configuration.dnsDomainPattern
    
            q = req.question ? {}
    
            if q.type is NS_T_A and q.class is NS_C_IN and pattern.test q.name
                res.addRR q.name, NS_T_A, NS_C_IN, 600, "127.0.0.1"
            else
                res.header.rcode = NS_RCODE_NXDOMAIN
    
            res.send()