|
|
@ -29,6 +29,12 @@ function errnoException(errorno, syscall) { |
|
|
|
// Once all of Node is using this function the ErrnoException from
|
|
|
|
// src/node.cc should be removed.
|
|
|
|
var e = new Error(syscall + ' ' + errorno); |
|
|
|
|
|
|
|
// For backwards compatibility. libuv returns ENOENT on NXDOMAIN.
|
|
|
|
if (errorno == 'ENOENT') { |
|
|
|
errorno = 'EBADNAME' |
|
|
|
} |
|
|
|
|
|
|
|
e.errno = e.code = errorno; |
|
|
|
e.syscall = syscall; |
|
|
|
return e; |
|
|
@ -123,46 +129,26 @@ exports.lookup = function(domain, family, callback) { |
|
|
|
return {}; |
|
|
|
} |
|
|
|
|
|
|
|
/* TODO |
|
|
|
if (/\w\.local\.?$/.test(domain)) { |
|
|
|
// ANNOYING: In the case of mDNS domains use NSS in the thread pool.
|
|
|
|
// I wish c-ares had better support.
|
|
|
|
process.binding('net').getaddrinfo(domain, 4, function(err, domains4) { |
|
|
|
callback(err, domains4[0], 4); |
|
|
|
}); |
|
|
|
callback.immediately = true; |
|
|
|
return {}; |
|
|
|
} */ |
|
|
|
|
|
|
|
function onanswer(status, addresses, familySym) { |
|
|
|
if (!status) { |
|
|
|
callback(null, addresses[0], symToFamily(familySym)); |
|
|
|
} else { |
|
|
|
callback(errnoException(errno, 'getHostByName')); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var wrap; |
|
|
|
|
|
|
|
function onanswer(addresses) { |
|
|
|
if (addresses) { |
|
|
|
if (family) { |
|
|
|
// resolve names for explicit address family
|
|
|
|
var af = familyToSym(family); |
|
|
|
wrap = cares.getHostByName(domain, af, onanswer); |
|
|
|
callback(null, addresses[0], family); |
|
|
|
} else { |
|
|
|
// first resolve names for v4 and if that fails, try v6
|
|
|
|
wrap = cares.getHostByName(domain, cares.AF_INET, function(err, domains4) { |
|
|
|
if (domains4 && domains4.length) { |
|
|
|
callback(null, domains4[0], 4); |
|
|
|
callback(null, addresses[0], addresses[0].indexOf(':') >= 0 ? 6 : 4); |
|
|
|
} |
|
|
|
} else { |
|
|
|
cares.getHostByName(domain, cares.AF_INET6, onanswer); |
|
|
|
callback(errnoException(errno, 'getaddrinfo')); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
var wrap = cares.getaddrinfo(domain, family); |
|
|
|
|
|
|
|
if (!wrap) { |
|
|
|
throw errnoException(errno, 'getHostByName'); |
|
|
|
throw errnoException(errno, 'getaddrinfo'); |
|
|
|
} |
|
|
|
|
|
|
|
wrap.oncomplete = onanswer; |
|
|
|
|
|
|
|
callback.immediately = true; |
|
|
|
return wrap; |
|
|
|
}; |
|
|
|