/**
* @name node.dns
* @namespace
* Use <code>require('dns')</code> to access this module.
*
* Here is an example which resolves <code>'www.google.com'</code> then reverse
* resolves the IP addresses which are returned.
* <pre>
* var dns = require('dns');
*
* dns.resolve4('www.google.com', function (err, addresses) {
* if (err) throw err;
*
* console.log('addresses: ' + JSON.stringify(addresses));
*
* addresses.forEach(function (a) {
* dns.reverse(a, function (err, domains) {
* if (err) {
* console.log('reverse for ' + a + ' failed: ' +
* err.message);
* } else {
* console.log('reverse for ' + a + ': ' +
* JSON.stringify(domains));
* }
* });
* });
* });
* </pre>
*/
goog.provide("node.dns");
/**
* @type {string|null}
*/
node.dns.NODATA = null;
/**
* @type {string|null}
*/
node.dns.FORMERR = null;
/**
* @type {string|null}
*/
node.dns.BADRESP = null;
/**
* @type {string|null}
*/
node.dns.NOTFOUND = null;
/**
* @type {string|null}
*/
node.dns.BADNAME = null;
/**
* @type {string|null}
*/
node.dns.TIMEOUT = null;
/**
* @type {string|null}
*/
node.dns.CONNREFUSED = null;
/**
* @type {string|null}
*/
node.dns.NOMEM = null;
/**
* @type {string|null}
*/
node.dns.DESTRUCTION = null;
/**
* @type {string|null}
*/
node.dns.NOTIMP = null;
/**
* @type {string|null}
*/
node.dns.EREFUSED = null;
/**
* @type {string|null}
*/
node.dns.SERVFAIL = null;
/**
* Resolves a domain (e.g. <code>'google.com'</code>) into an array of the record types
* specified by rrtype. Valid rrtypes are <code>A</code> (IPV4 addresses), <code>AAAA</code> (IPV6
* addresses), <code>MX</code> (mail exchange records), <code>TXT</code> (text records), <code>SRV</code> (SRV
* records), and <code>PTR</code> (used for reverse IP lookups).
*
* The callback has arguments <code>(err, addresses)</code>. The type of each item
* in <code>addresses</code> is determined by the record type, and described in the
* documentation for the corresponding lookup methods below.
*
* On error, <code>err</code> would be an instanceof <code>Error</code> object, where <code>err.errno</code> is
* one of the error codes listed below and <code>err.message</code> is a string describing
* the error in English.
* @param {string} domain
* @param {string} type_
* @param {string} callback_
*/
node.dns.resolve = function(domain, type_, callback_) {
return node.dns.core_.resolve(domain, type_, callback_);
};
/**
* @param {string} domain
* @param {string} family
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.getHostByName = function(domain, family, callback) {
return node.dns.core_.getHostByName(domain, family, callback);
};
/**
* @param {string} address
* @param {string} family
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.getHostByAddr = function(address, family, callback) {
return node.dns.core_.getHostByAddr(address, family, callback);
};
/**
* Resolves a domain (e.g. <code>'google.com'</code>) into the first found A (IPv4) or
* AAAA (IPv6) record.
*
* The callback has arguments <code>(err, address, family)</code>. The <code>address</code> argument
* is a string representation of a IP v4 or v6 address. The <code>family</code> argument
* is either the integer 4 or 6 and denotes the family of <code>address</code> (not
* neccessarily the value initially passed to <code>lookup</code>).
* @param {string} domain
* @param {string} family
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.lookup = function(domain, family, callback) {
return node.dns.core_.lookup(domain, family, callback);
};
/**
* The same as <code>dns.resolve()</code>, but only for IPv4 queries (<code>A</code> records).
* <code>addresses</code> is an array of IPv4 addresses (e.g.
* <code>['74.125.79.104', '74.125.79.105', '74.125.79.106']</code>).
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.resolve4 = function(domain, callback) {
return node.dns.core_.resolve4(domain, callback);
};
/**
* The same as <code>dns.resolve4()</code> except for IPv6 queries (an <code>AAAA</code> query).
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.resolve6 = function(domain, callback) {
return node.dns.core_.resolve6(domain, callback);
};
/**
* The same as <code>dns.resolve()</code>, but only for mail exchange queries (<code>MX</code> records).
*
* <code>addresses</code> is an array of MX records, each with a priority and an exchange
* attribute (e.g. <code>[{'priority': 10, 'exchange': 'mx.example.com'},...]</code>).
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.resolveMx = function(domain, callback) {
return node.dns.core_.resolveMx(domain, callback);
};
/**
* The same as <code>dns.resolve()</code>, but only for text queries (<code>TXT</code> records).
* <code>addresses</code> is an array of the text records available for <code>domain</code> (e.g.,
* <code>['v=spf1 ip4:0.0.0.0 ~all']</code>).
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.resolveTxt = function(domain, callback) {
return node.dns.core_.resolveTxt(domain, callback);
};
/**
* The same as <code>dns.resolve()</code>, but only for service records (<code>SRV</code> records).
* <code>addresses</code> is an array of the SRV records available for <code>domain</code>. Properties
* of SRV records are priority, weight, port, and name (e.g.,
* <code>[{'priority': 10, {'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]</code>).
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.resolveSrv = function(domain, callback) {
return node.dns.core_.resolveSrv(domain, callback);
};
/**
* Reverse resolves an ip address to an array of domain names.
*
* The callback has arguments <code>(err, domains)</code>.
*
* If there an an error, <code>err</code> will be non-null and an instanceof the Error
* object.
*
* Each DNS query can return an error code.
*
* - <code>dns.TEMPFAIL</code>: timeout, SERVFAIL or similar.
* - <code>dns.PROTOCOL</code>: got garbled reply.
* - <code>dns.NXDOMAIN</code>: domain does not exists.
* - <code>dns.NODATA</code>: domain exists but no data of reqd type.
* - <code>dns.NOMEM</code>: out of memory while processing.
* - <code>dns.BADQUERY</code>: the query is malformed.
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.reverse = function(domain, callback) {
return node.dns.core_.reverse(domain, callback);
};
/**
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.resolveNs = function(domain, callback) {
return node.dns.core_.resolveNs(domain, callback);
};
/**
* @param {string} domain
* @param {function(Error?,...[*]):undefined} callback
*/
node.dns.resolveCname = function(domain, callback) {
return node.dns.core_.resolveCname(domain, callback);
};
/**
* @private
* @type {*}
*/
node.dns.core_ = require("dns");