Skip to content

Instantly share code, notes, and snippets.

@kumavis
Created June 4, 2013 07:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kumavis/5704306 to your computer and use it in GitHub Desktop.
Save kumavis/5704306 to your computer and use it in GitHub Desktop.
This is just a copy-pasta piece of junk, I have not tested it.
// ===========================================================
// ===========================================================
// THIS IS COPY-PASTE-HACK. THIS IS NOT KNOWN TO ACTUALLY WORK
// ===========================================================
// ===========================================================
module.exports = {
lookup: function (domain, family, callback) {
// parse arguments
if (arguments.length === 2) {
callback = family;
family = 0;
} else if (!family) {
family = 0;
} else {
family = +family;
if (family !== 4 && family !== 6) {
throw new Error('invalid argument: `family` must be 4 or 6');
}
}
callback = makeAsync(callback);
if (!domain) {
callback(null, null, family === 6 ? 6 : 4);
return {};
}
// Hack required for Windows because Win7 removed the
// localhost entry from c:\\WINDOWS\\system32\\drivers\\etc\\hosts
// See http://daniel.haxx.se/blog/2011/02/21/localhost-hack-on-windows/
// TODO Remove this once c-ares handles this problem.
if (process.platform == 'win32' && domain == 'localhost') {
callback(null, '127.0.0.1', 4);
return {};
}
var matchedFamily = net.isIP(domain);
if (matchedFamily) {
callback(null, domain, matchedFamily);
return {};
}
function onanswer(addresses) {
if (addresses) {
if (family) {
callback(null, addresses[0], family);
} else {
callback(null, addresses[0], addresses[0].indexOf(':') >= 0 ? 6 : 4);
}
} else {
callback(errnoException(errno, 'getaddrinfo'));
}
}
var wrap = cares.getaddrinfo(domain, family);
if (!wrap) {
throw errnoException(errno, 'getaddrinfo');
}
wrap.oncomplete = onanswer;
callback.immediately = true;
return wrap;
},
resolve4: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
resolve6: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
resolveCname: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
resolveMx: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
resolveNs: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
resolveTxt: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
resolveSrv: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
reverse: function query(name, callback) {
function onanswer(status, result) {
if (!status) {
callback(null, result);
} else {
callback(errnoException(errno, bindingName));
}
}
callback = makeAsync(callback);
var wrap = binding(name, onanswer);
if (!wrap) {
throw errnoException(errno, bindingName);
}
callback.immediately = true;
return wrap;
},
resolve: function (domain, type_, callback_) {
var resolver, callback;
if (typeof type_ == 'string') {
resolver = resolveMap[type_];
callback = callback_;
} else {
resolver = exports.resolve4;
callback = type_;
}
if (typeof resolver === 'function') {
return resolver(domain, callback);
} else {
throw new Error('Unknown type "' + type + '"');
}
},
NODATA: 'ENODATA',
FORMERR: 'EFORMERR',
SERVFAIL: 'ESERVFAIL',
NOTFOUND: 'ENOTFOUND',
NOTIMP: 'ENOTIMP',
REFUSED: 'EREFUSED',
BADQUERY: 'EBADQUERY',
ADNAME: 'EADNAME',
BADFAMILY: 'EBADFAMILY',
BADRESP: 'EBADRESP',
CONNREFUSED: 'ECONNREFUSED',
TIMEOUT: 'ETIMEOUT',
EOF: 'EOF',
FILE: 'EFILE',
NOMEM: 'ENOMEM',
DESTRUCTION: 'EDESTRUCTION',
BADSTR: 'EBADSTR',
BADFLAGS: 'EBADFLAGS',
NONAME: 'ENONAME',
BADHINTS: 'EBADHINTS',
NOTINITIALIZED: 'ENOTINITIALIZED',
LOADIPHLPAPI: 'ELOADIPHLPAPI',
ADDRGETNETWORKPARAMS: 'EADDRGETNETWORKPARAMS',
CANCELLED: 'ECANCELLED'
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment