optioncodes.js
1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'use strict'
exports.toString = function (type) {
switch (type) {
// list at
// https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11
case 1: return 'LLQ'
case 2: return 'UL'
case 3: return 'NSID'
case 5: return 'DAU'
case 6: return 'DHU'
case 7: return 'N3U'
case 8: return 'CLIENT_SUBNET'
case 9: return 'EXPIRE'
case 10: return 'COOKIE'
case 11: return 'TCP_KEEPALIVE'
case 12: return 'PADDING'
case 13: return 'CHAIN'
case 14: return 'KEY_TAG'
case 26946: return 'DEVICEID'
}
if (type < 0) {
return null
}
return `OPTION_${type}`
}
exports.toCode = function (name) {
if (typeof name === 'number') {
return name
}
if (!name) {
return -1
}
switch (name.toUpperCase()) {
case 'OPTION_0': return 0
case 'LLQ': return 1
case 'UL': return 2
case 'NSID': return 3
case 'OPTION_4': return 4
case 'DAU': return 5
case 'DHU': return 6
case 'N3U': return 7
case 'CLIENT_SUBNET': return 8
case 'EXPIRE': return 9
case 'COOKIE': return 10
case 'TCP_KEEPALIVE': return 11
case 'PADDING': return 12
case 'CHAIN': return 13
case 'KEY_TAG': return 14
case 'DEVICEID': return 26946
case 'OPTION_65535': return 65535
}
const m = name.match(/_(\d+)$/)
if (m) {
return parseInt(m[1], 10)
}
return -1
}