dns-packet
Advanced tools
Comparing version 1.2.2 to 1.3.0
130
index.js
var types = require('./types') | ||
var rcodes = require('./rcodes') | ||
var opcodes = require('./opcodes') | ||
var ip = require('ip') | ||
@@ -12,15 +14,19 @@ var Buffer = require('safe-buffer').Buffer | ||
var name = {} | ||
var name = exports.txt = exports.name = {} | ||
name.encode = function (n, buf, offset) { | ||
name.encode = function (str, buf, offset) { | ||
if (!buf) buf = Buffer.allocUnsafe(name.encodingLength(n)) | ||
if (!offset) offset = 0 | ||
var list = n.split('.') | ||
var oldOffset = offset | ||
for (var i = 0; i < list.length; i++) { | ||
var len = buf.write(list[i], offset + 1) | ||
buf[offset] = len | ||
offset += len + 1 | ||
// strip leading and trailing . | ||
const n = str.replace(/^\.|\.$/gm, '') | ||
if (n.length) { | ||
const list = n.split('.') | ||
for (var i = 0; i < list.length; i++) { | ||
var len = buf.write(list[i], offset + 1) | ||
buf[offset] = len | ||
offset += len + 1 | ||
} | ||
} | ||
@@ -43,2 +49,6 @@ | ||
if (len === 0) { | ||
name.decode.bytes = 1 | ||
return '.' | ||
} | ||
if (len >= 0xc0) { | ||
@@ -131,2 +141,12 @@ var res = name.decode(buf, buf.readUInt16BE(offset - 1) - 0xc000) | ||
flags: flags & 32767, | ||
flag_qr: ((flags >> 15) & 0x1) === 1, | ||
opcode: opcodes.toString((flags >> 11) & 0xf), | ||
flag_auth: ((flags >> 10) & 0x1) === 1, | ||
flag_trunc: ((flags >> 9) & 0x1) === 1, | ||
flag_rd: ((flags >> 8) & 0x1) === 1, | ||
flag_ra: ((flags >> 7) & 0x1) === 1, | ||
flag_z: ((flags >> 6) & 0x1) === 1, | ||
flag_ad: ((flags >> 5) & 0x1) === 1, | ||
flag_cd: ((flags >> 4) & 0x1) === 1, | ||
rcode: rcodes.toString(flags & 0xf), | ||
questions: new Array(buf.readUInt16BE(offset + 4)), | ||
@@ -175,2 +195,94 @@ answers: new Array(buf.readUInt16BE(offset + 6)), | ||
var rns = exports.ns = {} | ||
rns.encode = function (data, buf, offset) { | ||
if (!buf) buf = Buffer.allocUnsafe(rns.encodingLength(data)) | ||
if (!offset) offset = 0 | ||
name.encode(data, buf, offset + 2) | ||
buf.writeUInt16BE(name.encode.bytes, offset) | ||
rns.encode.bytes = name.encode.bytes + 2 | ||
return buf | ||
} | ||
rns.encode.bytes = 0 | ||
rns.decode = function (buf, offset) { | ||
if (!offset) offset = 0 | ||
var len = buf.readUInt16BE(offset) | ||
var dd = name.decode(buf, offset + 2) | ||
rns.decode.bytes = len + 2 | ||
return dd | ||
} | ||
rns.decode.bytes = 0 | ||
rns.encodingLength = function (data) { | ||
return name.encodingLength(data) + 2 | ||
} | ||
var rsoa = exports.soa = {} | ||
rsoa.encode = function (data, buf, offset) { | ||
if (!buf) buf = Buffer.allocUnsafe(rsoa.encodingLength(data)) | ||
if (!offset) offset = 0 | ||
var oldOffset = offset | ||
offset += 2 | ||
name.encode(data.mname, buf, offset) | ||
offset += name.encode.bytes | ||
name.encode(data.rname, buf, offset) | ||
offset += name.encode.bytes | ||
buf.writeUInt32BE(data.serial || 0, offset) | ||
offset += 4 | ||
buf.writeUInt32BE(data.refresh || 0, offset) | ||
offset += 4 | ||
buf.writeUInt32BE(data.retry || 0, offset) | ||
offset += 4 | ||
buf.writeUInt32BE(data.expire || 0, offset) | ||
offset += 4 | ||
buf.writeUInt32BE(data.minimum || 0, offset) | ||
offset += 4 | ||
buf.writeUInt16BE(offset - oldOffset - 2, oldOffset) | ||
rsoa.encode.bytes = offset - oldOffset | ||
return buf | ||
} | ||
rsoa.encode.bytes = 0 | ||
rsoa.decode = function (buf, offset) { | ||
if (!offset) offset = 0 | ||
var oldOffset = offset | ||
var data = {} | ||
offset += 2 | ||
data.mname = name.decode(buf, offset) | ||
offset += name.decode.bytes | ||
data.rname = name.decode(buf, offset) | ||
offset += name.decode.bytes | ||
data.serial = buf.readUInt32BE(offset) | ||
offset += 4 | ||
data.refresh = buf.readUInt32BE(offset) | ||
offset += 4 | ||
data.retry = buf.readUInt32BE(offset) | ||
offset += 4 | ||
data.expire = buf.readUInt32BE(offset) | ||
offset += 4 | ||
data.minimum = buf.readUInt32BE(offset) | ||
offset += 4 | ||
rsoa.decode.bytes = offset - oldOffset | ||
return data | ||
} | ||
rsoa.decode.bytes = 0 | ||
rsoa.encodingLength = function (data) { | ||
return 22 + name.encodingLength(data.mname) + name.encodingLength(data.rname) | ||
} | ||
var rtxt = exports.txt = exports.null = {} | ||
@@ -460,2 +572,4 @@ var rnull = rtxt | ||
case 'CAA': return rcaa | ||
case 'NS': return rns | ||
case 'SOA': return rsoa | ||
} | ||
@@ -462,0 +576,0 @@ return runknown |
{ | ||
"name": "dns-packet", | ||
"version": "1.2.2", | ||
"version": "1.3.0", | ||
"description": "An abstract-encoding compliant module for encoding / decoding DNS packets", | ||
@@ -35,3 +35,5 @@ "repository": { | ||
"index.js", | ||
"types.js" | ||
"types.js", | ||
"rcodes.js", | ||
"opcodes.js" | ||
], | ||
@@ -38,0 +40,0 @@ "author": "Mathias Buus", |
27873
7
762