169 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright 2011 Timothy J Fontaine <tjfontaine@gmail.com>
 | |
| //
 | |
| // Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
| // of this software and associated documentation files (the "Software"), to deal
 | |
| // in the Software without restriction, including without limitation the rights
 | |
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
| // copies of the Software, and to permit persons to whom the Software is
 | |
| // furnished to do so, subject to the following conditions:
 | |
| //
 | |
| // The above copyright notice and this permission notice shall be included in
 | |
| // all copies or substantial portions of the Software.
 | |
| //
 | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | |
| // THE SOFTWARE
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| function reverse_map(src) {
 | |
|   var dst = {},
 | |
|       k;
 | |
| 
 | |
|   for (k in src) {
 | |
|     if (src.hasOwnProperty(k)) {
 | |
|       dst[src[k]] = k;
 | |
|     }
 | |
|   }
 | |
|   return dst;
 | |
| }
 | |
| 
 | |
| /* http://www.iana.org/assignments/dns-parameters */
 | |
| var NAME_TO_QTYPE = exports.NAME_TO_QTYPE = {
 | |
|   A: 1,
 | |
|   NS: 2,
 | |
|   MD: 3,
 | |
|   MF: 4,
 | |
|   CNAME: 5,
 | |
|   SOA: 6,
 | |
|   MB: 7,
 | |
|   MG: 8,
 | |
|   MR: 9,
 | |
|   'NULL': 10,
 | |
|   WKS: 11,
 | |
|   PTR: 12,
 | |
|   HINFO: 13,
 | |
|   MINFO: 14,
 | |
|   MX: 15,
 | |
|   TXT: 16,
 | |
|   RP: 17,
 | |
|   AFSDB: 18,
 | |
|   X25: 19,
 | |
|   ISDN: 20,
 | |
|   RT: 21,
 | |
|   NSAP: 22,
 | |
|   'NSAP-PTR': 23,
 | |
|   SIG: 24,
 | |
|   KEY: 25,
 | |
|   PX: 26,
 | |
|   GPOS: 27,
 | |
|   AAAA: 28,
 | |
|   LOC: 29,
 | |
|   NXT: 30,
 | |
|   EID: 31,
 | |
|   NIMLOC: 32,
 | |
|   SRV: 33,
 | |
|   ATMA: 34,
 | |
|   NAPTR: 35,
 | |
|   KX: 36,
 | |
|   CERT: 37,
 | |
|   A6: 38,
 | |
|   DNAME: 39,
 | |
|   SINK: 40,
 | |
|   OPT: 41,
 | |
|   APL: 42,
 | |
|   DS: 43,
 | |
|   SSHFP: 44,
 | |
|   IPSECKEY: 45,
 | |
|   RRSIG: 46,
 | |
|   NSEC: 47,
 | |
|   DNSKEY: 48,
 | |
|   DHCID: 49,
 | |
|   NSEC3: 50,
 | |
|   NSEC3PARAM: 51,
 | |
|   TLSA: 52,
 | |
|   HIP: 55,
 | |
|   NINFO: 56,
 | |
|   RKEY: 57,
 | |
|   TALINK: 58,
 | |
|   CDS: 59,
 | |
|   SPF: 99,
 | |
|   UINFO: 100,
 | |
|   UID: 101,
 | |
|   GID: 102,
 | |
|   UNSPEC: 103,
 | |
|   TKEY: 249,
 | |
|   TSIG: 250,
 | |
|   IXFR: 251,
 | |
|   AXFR: 252,
 | |
|   MAILB: 253,
 | |
|   MAILA: 254,
 | |
|   ANY: 255,
 | |
|   URI: 256,
 | |
|   CAA: 257,
 | |
|   TA: 32768,
 | |
|   DLV: 32769
 | |
| };
 | |
| exports.QTYPE_TO_NAME = reverse_map(NAME_TO_QTYPE);
 | |
| 
 | |
| exports.nameToQtype = function(n) {
 | |
|   return NAME_TO_QTYPE[n.toUpperCase()];
 | |
| };
 | |
| 
 | |
| exports.qtypeToName = function(t) {
 | |
|   return exports.QTYPE_TO_NAME[t];
 | |
| };
 | |
| 
 | |
| var NAME_TO_QCLASS = exports.NAME_TO_QCLASS = {
 | |
|   IN: 1
 | |
| };
 | |
| exports.QCLASS_TO_NAME = reverse_map(NAME_TO_QCLASS);
 | |
| 
 | |
| exports.FAMILY_TO_QTYPE = {
 | |
|   4: NAME_TO_QTYPE.A,
 | |
|   6: NAME_TO_QTYPE.AAAA
 | |
| };
 | |
| exports.QTYPE_TO_FAMILY = {};
 | |
| exports.QTYPE_TO_FAMILY[exports.NAME_TO_QTYPE.A] = 4;
 | |
| exports.QTYPE_TO_FAMILY[exports.NAME_TO_QTYPE.AAAA] = 6;
 | |
| 
 | |
| exports.NAME_TO_RCODE = {
 | |
|   NOERROR: 0,
 | |
|   FORMERR: 1,
 | |
|   SERVFAIL: 2,
 | |
|   NOTFOUND: 3,
 | |
|   NOTIMP: 4,
 | |
|   REFUSED: 5,
 | |
|   YXDOMAIN: 6, //Name Exists when it should not
 | |
|   YXRRSET: 7, //RR Set Exists when it should not
 | |
|   NXRRSET: 8, //RR Set that should exist does not
 | |
|   NOTAUTH: 9,
 | |
|   NOTZONE: 10,
 | |
|   BADVERS: 16,
 | |
|   BADSIG: 16, // really?
 | |
|   BADKEY: 17,
 | |
|   BADTIME: 18,
 | |
|   BADMODE: 19,
 | |
|   BADNAME: 20,
 | |
|   BADALG: 21,
 | |
|   BADTRUNC: 22
 | |
| };
 | |
| exports.RCODE_TO_NAME = reverse_map(exports.NAME_TO_RCODE);
 | |
| 
 | |
| exports.BADNAME = 'EBADNAME';
 | |
| exports.BADRESP = 'EBADRESP';
 | |
| exports.CONNREFUSED = 'ECONNREFUSED';
 | |
| exports.DESTRUCTION = 'EDESTRUCTION';
 | |
| exports.REFUSED = 'EREFUSED';
 | |
| exports.FORMERR = 'EFORMERR';
 | |
| exports.NODATA = 'ENODATA';
 | |
| exports.NOMEM = 'ENOMEM';
 | |
| exports.NOTFOUND = 'ENOTFOUND';
 | |
| exports.NOTIMP = 'ENOTIMP';
 | |
| exports.SERVFAIL = 'ESERVFAIL';
 | |
| exports.TIMEOUT = 'ETIMEOUT';
 |