var ares = require('./ares/build/default/ares'); function rec_toString() { var out = ""; console.log(this); out += ";; Question Section:\n"; for (var i = 0, len = this.question.length; i < len; i++) { var q = this.question[i]; out += q.name + "\t" + (q.class || q.nclass) + "\t" + (q.type || q.ntype) + "\n"; } out += ";; Answer Section:\n"; for (var i = 0, len = this.answer.length; i < len; i++) { var r = this.answer[i]; out += r.name + "\t" + r.ttl + "\t" + (r.class || r.nclass) + "\t" + (r.type || r.ntype) + "\t" + (r.text || '') + "\n"; } out += ";; Authority Section:\n"; for (var i = 0, len = this.authority.length; i < len; i++) { var r = this.authority[i]; out += r.name + "\t" + r.ttl + "\t" + (r.class || r.nclass) + "\t" + (r.type || r.ntype) + "\t" + (r.text || '') + "\n"; } out += ";; Additional Section:\n"; for (var i = 0, len = this.additional.length; i < len; i++) { var r = this.additional[i]; out += r.name + "\t" + r.ttl + "\t" + (r.class || r.nclass) + "\t" + (r.type || r.ntype) + "\t" + (r.text || '') + "\n"; } return out; } function newChannel(servers) { var channel; var watchers = {}; var activeWatchers = {}; var timer = new process.Timer(); timer.callback = function () { channel.processFD(ares.SOCKET_BAD, ares.SOCKET_BAD); updateTimer(); } function updateTimer() { timer.stop(); // Were just checking to see if activeWatchers is empty or not for (var socket in activeWatchers) { if (activeWatchers.hasOwnProperty(socket)) { var timeout = channel.timeout(-1); timer.start(timeout, 0); // Short circuit the loop on first find. return; } } } channel = new ares.Channel({SOCK_STATE_CB: function (socket, read, write) { var watcher; if (socket in watchers) { watcher = watchers[socket].watcher; } else { watcher = new process.IOWatcher(); watchers[socket] = { read: read, write: write, watcher: watcher }; watcher.callback = function(read, write) { channel.processFD(read ? socket : ares.SOCKET_BAD, write ? socket : ares.SOCKET_BAD); updateTimer(); } } watcher.stop(); if (!(read || write)) { delete activeWatchers[socket]; return; } else { watcher.set(socket, read == 1, write == 1); watcher.start(); activeWatchers[socket] = watcher; } updateTimer(); }}); if (servers) { channel.setServers(servers); } /* wrapper mapping type strings to numerical values */ channel._query = channel.query; channel.query = function(domain, type, callback) { channel._query(domain, ares[type], function(err, result) { if (result) result.toString = rec_toString; // console.log(result); callback(err, result); }); }; return channel; }; var channel = newChannel(); exports.query = channel.query; exports.newChannel = newChannel; // ERROR CODES exports.NODATA = ares.NODATA; exports.FORMERR = ares.FORMERR; exports.BADRESP = ares.BADRESP; exports.NOTFOUND = ares.NOTFOUND; exports.BADNAME = ares.BADNAME; exports.TIMEOUT = ares.TIMEOUT; exports.CONNREFUSED = ares.CONNREFUSED; exports.NOMEM = ares.NOMEM; exports.DESTRUCTION = ares.DESTRUCTION; exports.NOTIMP = ares.NOTIMP; exports.EREFUSED = ares.EREFUSED; exports.SERVFAIL = ares.SERVFAIL;