begin packer and test
This commit is contained in:
parent
037247c91b
commit
af89bfa000
|
@ -1,9 +1,36 @@
|
||||||
(function (exports) {
|
(function (exports) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
exports.DNS_PACKER = {
|
var dnspack = exports.DNS_PACKER = {
|
||||||
pack: function () {
|
pack: function (packet) {
|
||||||
throw new Error("DNS Packer Not Implemented");
|
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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ pdns.unpackOpt = function (ab, packet, rec) {
|
||||||
// TODO index into the correct place in the ArrayBuffer
|
// TODO index into the correct place in the ArrayBuffer
|
||||||
dv = new DataView(new ArrayBuffer(4));
|
dv = new DataView(new ArrayBuffer(4));
|
||||||
// rec.ttl is actually 1 (extended_rcode), 1 (edns_version), 2:1 (DO), 2:7 (Z)
|
// rec.ttl is actually 1 (extended_rcode), 1 (edns_version), 2:1 (DO), 2:7 (Z)
|
||||||
dv.setUint32(0, packet.ttl);
|
dv.setUint32(0, packet.ttl, false);
|
||||||
// is xrcode this edns_options?
|
// is xrcode this edns_options?
|
||||||
packet.xrcode = '0x' + dv.getUint8(0, false).toString(16);
|
packet.xrcode = '0x' + dv.getUint8(0, false).toString(16);
|
||||||
if ('0x0' === packet.xrcode) {
|
if ('0x0' === packet.xrcode) {
|
||||||
|
|
|
@ -1,6 +1,48 @@
|
||||||
;(function () {
|
;(function () {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
throw new Error("packer tests not written");
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
var dnsjs = require('../').DNSPacket;
|
||||||
|
|
||||||
|
var dirname = path.join(__dirname, 'fixtures');
|
||||||
|
var expected; // shim
|
||||||
|
var onefile = process.argv[2];
|
||||||
|
|
||||||
|
var json = JSON.parse(fs.readFileSync(onefile, 'utf8'));
|
||||||
|
|
||||||
|
var ab = dnsjs.write(json);
|
||||||
|
//console.log(ab);
|
||||||
|
var ui8 = new Uint8Array(ab);
|
||||||
|
//console.log(ui8);
|
||||||
|
var bytecount = 0;
|
||||||
|
var str = [].slice.call(ui8).map(function (i) {
|
||||||
|
var h = i.toString(16);
|
||||||
|
if (h.length < 2) {
|
||||||
|
h = '0' + h;
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}).join('').match(/.{1,2}/g).join(' ').match(/.{1,47}/g).map(function (str) {
|
||||||
|
var lead = bytecount.toString(16);
|
||||||
|
bytecount += 10;
|
||||||
|
|
||||||
|
while (lead.length < 8) {
|
||||||
|
lead = '0' + lead;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lead + ' ' + str;
|
||||||
|
}).join('\n');
|
||||||
|
var trail = ab.byteLength.toString(16);
|
||||||
|
while (trail.length < 8) {
|
||||||
|
trail = '0' + trail;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
console.log('DEBUG with hexdump: ');
|
||||||
|
console.log('hexdump ' + onefile.replace(/\.[^\.]*$/, '.bin'));
|
||||||
|
console.log('');
|
||||||
|
console.log(str + '\n' + trail);
|
||||||
|
console.log('');
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue