42 lines
1.0 KiB
JavaScript
42 lines
1.0 KiB
JavaScript
(function (exports) {
|
|
'use strict';
|
|
|
|
// 'AAAA'
|
|
// Value: IP Address
|
|
// Meaning:Use: 16 octets (8 sexdectets, 128 bits) represting the IP address
|
|
|
|
exports.DNS_PACKER_TYPE_AAAA = function (ab, dv, total, record) {
|
|
if (!record.address) {
|
|
throw new Error("no address on A record");
|
|
}
|
|
|
|
// i.e. ::1 => 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001
|
|
// i.e. FFFF:DDDD::1 => 0xFFFF, 0xDDDD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001
|
|
//record.rdlength = 16;
|
|
var address = '0' + record.address; // prevent case of two leading blanks, such as '::1'
|
|
var parts = address.split(':');
|
|
parts.forEach(function (sedectet, i) {
|
|
if (!sedectet) {
|
|
parts[i] = '0';
|
|
while (parts.length < 8) {
|
|
parts.splice(i + 1, 0, '0');
|
|
}
|
|
}
|
|
});
|
|
|
|
// RDLENGTH
|
|
var IP_LEN = 16;
|
|
dv.setUint16(total, IP_LEN, false);
|
|
total += 2;
|
|
|
|
// RDATA
|
|
parts.forEach(function (sedectet) {
|
|
dv.setUint16(total, parseInt(sedectet, 16), false);
|
|
total += 2;
|
|
});
|
|
|
|
return total;
|
|
};
|
|
|
|
}('undefined' !== typeof window ? window : exports));
|