Finish adding SOA and NS record encoding/decoding. (#14)

* add ns record and soa record

* npm test with standard

* Complete SOA, NS decoding. Also add encoding and tests.

* updated travis CI tests to stable versions of node.
This commit is contained in:
Tom Pusateri 2018-01-05 12:42:16 -05:00 committed by Mathias Buus
parent f6869562f4
commit 5aaf0790d9
3 changed files with 114 additions and 1 deletions

View File

@ -1,6 +1,7 @@
language: node_js language: node_js
node_js: node_js:
- "5" - "8"
- "6"
- "4" - "4"
- "0.12" - "0.12"
- "0.10" - "0.10"

View File

@ -169,6 +169,98 @@ runknown.encodingLength = function (data) {
return data.length + 2 return data.length + 2
} }
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 = {} var rtxt = exports.txt = exports.null = {}
var rnull = rtxt var rnull = rtxt
@ -453,6 +545,8 @@ var renc = exports.record = function (type) {
case 'SRV': return rsrv case 'SRV': return rsrv
case 'HINFO': return rhinfo case 'HINFO': return rhinfo
case 'CAA': return rcaa case 'CAA': return rcaa
case 'NS': return rns
case 'SOA': return rsoa
} }
return runknown return runknown
} }

18
test.js
View File

@ -52,6 +52,24 @@ tape('caa', function (t) {
t.end() t.end()
}) })
tape('ns', function (t) {
testEncoder(t, packet.ns, 'ns.world.com')
t.end()
})
tape('soa', function (t) {
testEncoder(t, packet.soa, {
mname: 'hello.world.com',
rname: 'root.hello.world.com',
serial: 2018010400,
refresh: 14400,
retry: 3600,
expire: 604800,
minimum: 3600
})
t.end()
})
tape('a', function (t) { tape('a', function (t) {
testEncoder(t, packet.a, '127.0.0.1') testEncoder(t, packet.a, '127.0.0.1')
t.end() t.end()