59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
;(function (exports) {
|
|
'use strict';
|
|
|
|
var Parser = (exports.DNS_PARSER || require('./dns.parser.js').DNS_PARSER);
|
|
var Packer = (exports.DNS_PACKER || require('./dns.packer.js').DNS_PACKER);
|
|
//var classes = exports.DNS_CLASSES || require('./dns.classes.js').DNS_CLASSES;
|
|
//var types = exports.DNS_TYPES || require('./dns.types.js').DNS_TYPES;
|
|
var logged = {};
|
|
|
|
exports.DNSPacket = {
|
|
parse: function (nb) {
|
|
// backwards compat with node buffer
|
|
var ab = nb;
|
|
if (nb.buffer) {
|
|
// TODO pass byteOffsets to unpacker
|
|
ab = nb.buffer.slice(nb.byteOffset, nb.byteOffset + nb.byteLength);
|
|
}
|
|
var packet = Parser.unpack(ab);
|
|
|
|
function tryParseRdata(record) {
|
|
|
|
try {
|
|
|
|
record = Parser.unpackRdata(ab, packet, record);
|
|
} catch (e) {
|
|
record.error = e;
|
|
if (!/^support for dns/i.test(e.message)) {
|
|
console.error('[Error] unpackRdata: ' + e.message);
|
|
}
|
|
else if (!logged[e.message]) {
|
|
console.error('[Error] unpackRdata: ' + e.message);
|
|
logged[e.message] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
packet.answer.forEach(tryParseRdata);
|
|
packet.authority.forEach(tryParseRdata);
|
|
packet.additional.forEach(tryParseRdata);
|
|
|
|
return packet;
|
|
}
|
|
// Backwards compat
|
|
, write: function (json) {
|
|
return Buffer.from(Packer.pack(json));
|
|
}
|
|
, pack: function (json) {
|
|
return Packer.pack(json);
|
|
}
|
|
};
|
|
|
|
if ('undefined' !== typeof module) {
|
|
// backwards compat node dns.js
|
|
exports.Parser = exports.DNS_PARSER;
|
|
exports.Packer = exports.DNS_PACKER;
|
|
}
|
|
|
|
}('undefined' !== typeof window ? window : exports));
|