finished SRV record data packer. Still need to test exhaustively. Left in debugging code.

This commit is contained in:
Daplie 2017-03-09 15:12:26 -07:00
parent 05beaa480b
commit 792bea258d
1 changed files with 73 additions and 0 deletions

73
packer/type.srv.js Normal file
View File

@ -0,0 +1,73 @@
(function (exports) {
'use strict';
// SRV RDATA contains:
// Priority: The relative priority of this service. 16-bit (range 0-65535)
// Weight: Used when more than one serivice has the same priority. 16-bit
// (range 0-65535)
// Port: Port number assigned to the symbolic service. 16-bit (range 0-65535)
// Target: The name of the host that will provide service.
exports.DNS_PACKER_TYPE_SRV = function (ab, dv, total, record) {
// maybe these should be changed to 'hasOwnProperty' for all of these
// TODO: Check that number is in range 1-64k
if (!record.priority){
throw new Error("no priority for SRV record");
}
if (!record.hasOwnProperty('weight')){
throw new Error("no weight for SRV record");
}
if (!record.port){
throw new Error("no port for SRV record");
}
if (!record.target) {
throw new Error("no target for SRV record");
}
// console.log("record length, priority, weight, port, then target");
// console.log("record priority is: " + record.priority);
// console.log("record weight is: " + record.weight);
// console.log("record port is: " + record.port);
// console.log("record target is: " + record.target);
// console.log("total length currently is: " + total);
var srvLen = 6; // 16-bit priority, weight and port = 6 Bytes
var rdLenIndex = total;
total+=2;
dv.setUint16(total, parseInt(record.priority, 10), false);
total+=2;
dv.setUint16(total,parseInt(record.weight, 10), false);
total+=2;
dv.setUint16(total, parseInt(record.port, 10), false);
total+=2;
record.target.split('.').forEach(function (label){
srvLen += 1 + label.length;
dv.setUint8(total, label.length, false);
total += 1;
label.split('').forEach(function (ch) {
dv.setUint8(total, ch.charCodeAt(0), false);
total +=1;
});
});
// RDLENGTH
dv.setUint16(rdLenIndex, srvLen, false);
return total;
};
}('undefined' !== typeof window ? window : exports));