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));
 |