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