diff --git a/index.js b/index.js index e2140c4..2103d36 100644 --- a/index.js +++ b/index.js @@ -34,6 +34,20 @@ var toSubtitles = function (url, i) { } } +var getName = function (records) { + if (records['TXT']) { + var text = txt.decode(records['TXT'].data) + if (text.fn) return text.fn + } + return null +} + +var getHost = function (records) { + if (records['A']) return records['A'].data + if (records['SRV']) return records['SRV'].data.target + return null +} + module.exports = function () { var dns = mdns() var that = new events.EventEmitter() @@ -239,34 +253,19 @@ module.exports = function () { } dns.on('response', function (response) { - response.answers.forEach(function (a) { - if (a.type === 'PTR' && a.name === '_googlecast._tcp.local') { - var name = a.data - var shortname = a.data.replace('._googlecast._tcp.local', '') - if (!casts[name]) casts[name] = {name: shortname, host: null} - } - }) + var records = response.additionals.concat(response.answers).reduce(function (memo, record) { + memo[record.type] = record + return memo + }, {}) - var onanswer = function (a) { - debug('got answer %j', a) + var device = { host: getHost(records), name: getName(records) } - var name = a.name - if (a.type === 'SRV' && casts[name] && !casts[name].host) { - casts[name].host = a.data.target - emit(casts[name]) - } + if (!device.name || !device.host) return - if (a.type === 'TXT' && casts[name]) { - var text = txt.decode(a.data) - if (text.fn) { - casts[name].name = text.fn - emit(casts[name]) - } - } + if (!casts[device.name]) { + casts[device.name] = device + emit(device) } - - response.additionals.forEach(onanswer) - response.answers.forEach(onanswer) }) if (ssdp) {