diff --git a/dns.pack.js b/dns.pack.js deleted file mode 100644 index a3df535..0000000 --- a/dns.pack.js +++ /dev/null @@ -1,25 +0,0 @@ -(function (exports) { -'use strict'; - -var pdns = exports.DNS_PACK = function () { - -}; - -pdns.packHeader = function(h) { - var val = 0; - - val += (h.qr << 15) & 0x8000; - val += (h.opcode << 11) & 0x7800; - val += (h.aa << 10) & 0x400; - val += (h.tc << 9) & 0x200; - val += (h.rd << 8) & 0x100; - val += (h.ra << 7) & 0x80; - val += (h.res1 << 6) & 0x40; - val += (h.res2 << 5) & 0x20; - val += (h.res3 << 4) & 0x10; - val += h.rcode & 0xF; - - return val; -}; - -}('undefined' !== typeof window ? window : exports)); diff --git a/dns.packer.js b/dns.packer.js index dc2e5b9..069b6c8 100644 --- a/dns.packer.js +++ b/dns.packer.js @@ -5,14 +5,18 @@ var dnspack = exports.DNS_PACKER = { pack: function (packet) { var total = 0; var id = packet.header.id; // 2 bytes - total += 2; var header = dnspack.packHeader(packet.header); // 2 bytes - total += 2; + total = 12; // 2+2+2+2 bytes ({qd,an,ns,ar}count) var ab = new ArrayBuffer(total); var dv = new DataView(ab); dv.setUint16(0, id, false); dv.setUint16(2, header, false); + dv.setUint16(4, packet.question.length, false); + dv.setUint16(6, packet.answer.length, false); + dv.setUint16(8, packet.authority.length, false); + // EDNS is added as an additional with TYPE 41 (OPT, 0x29) + dv.setUint16(10, packet.additional.length + (packet.payload ? 1 : 0), false); return ab; } diff --git a/test/packer.js b/test/packer.js index d012419..8011801 100644 --- a/test/packer.js +++ b/test/packer.js @@ -26,14 +26,14 @@ var lead = bytecount.toString(16); bytecount += 10; - while (lead.length < 8) { + while (lead.length < 7) { lead = '0' + lead; } return lead + ' ' + str; }).join('\n'); var trail = ab.byteLength.toString(16); - while (trail.length < 8) { + while (trail.length < 7) { trail = '0' + trail; }