dns-suite.js/dns.packer.js

38 lines
941 B
JavaScript

(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));