(function (exports) { 'use strict'; 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; var ab = new ArrayBuffer(total); var dv = new DataView(ab); dv.setUint16(0, id, false); dv.setUint16(2, header, false); return ab; } , 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));