net: allow net.BlockList to use net.SocketAddress objects · nodejs/node@0709cbb
@@ -8,14 +8,17 @@ const {
8899const {
1010BlockList: BlockListHandle,
11-AF_INET,
12-AF_INET6,
1311} = internalBinding('block_list');
14121513const {
1614customInspectSymbol: kInspect,
1715} = require('internal/util');
181617+const {
18+ SocketAddress,
19+kHandle: kSocketAddressHandle,
20+} = require('internal/socketaddress');
21+1922const {
2023 JSTransferable,
2124 kClone,
@@ -55,56 +58,76 @@ class BlockList extends JSTransferable {
5558}
56595760addAddress(address, family = 'ipv4') {
58-validateString(address, 'address');
59-validateString(family, 'family');
60-family = family.toLowerCase();
61-if (family !== 'ipv4' && family !== 'ipv6')
62-throw new ERR_INVALID_ARG_VALUE('family', family);
63-const type = family === 'ipv4' ? AF_INET : AF_INET6;
64-this[kHandle].addAddress(address, type);
61+if (!SocketAddress.isSocketAddress(address)) {
62+validateString(address, 'address');
63+validateString(family, 'family');
64+address = new SocketAddress({
65+ address,
66+ family,
67+});
68+}
69+this[kHandle].addAddress(address[kSocketAddressHandle]);
6570}
66716772addRange(start, end, family = 'ipv4') {
68-validateString(start, 'start');
69-validateString(end, 'end');
70-validateString(family, 'family');
71-family = family.toLowerCase();
72-if (family !== 'ipv4' && family !== 'ipv6')
73-throw new ERR_INVALID_ARG_VALUE('family', family);
74-const type = family === 'ipv4' ? AF_INET : AF_INET6;
75-const ret = this[kHandle].addRange(start, end, type);
73+if (!SocketAddress.isSocketAddress(start)) {
74+validateString(start, 'start');
75+validateString(family, 'family');
76+start = new SocketAddress({
77+address: start,
78+ family,
79+});
80+}
81+if (!SocketAddress.isSocketAddress(end)) {
82+validateString(end, 'end');
83+validateString(family, 'family');
84+end = new SocketAddress({
85+address: end,
86+ family,
87+});
88+}
89+const ret = this[kHandle].addRange(
90+start[kSocketAddressHandle],
91+end[kSocketAddressHandle]);
7692if (ret === false)
7793throw new ERR_INVALID_ARG_VALUE('start', start, 'must come before end');
7894}
79958096addSubnet(network, prefix, family = 'ipv4') {
81-validateString(network, 'network');
82-validateString(family, 'family');
83-family = family.toLowerCase();
84-let type;
85-switch (family) {
97+if (!SocketAddress.isSocketAddress(network)) {
98+validateString(network, 'network');
99+validateString(family, 'family');
100+network = new SocketAddress({
101+address: network,
102+ family,
103+});
104+}
105+switch (network.family) {
86106case 'ipv4':
87-type = AF_INET;
88107validateInt32(prefix, 'prefix', 0, 32);
89108break;
90109case 'ipv6':
91-type = AF_INET6;
92110validateInt32(prefix, 'prefix', 0, 128);
93111break;
94-default:
95-throw new ERR_INVALID_ARG_VALUE('family', family);
96112}
97-this[kHandle].addSubnet(network, type, prefix);
113+this[kHandle].addSubnet(network[kSocketAddressHandle], prefix);
98114}
99115100116check(address, family = 'ipv4') {
101-validateString(address, 'address');
102-validateString(family, 'family');
103-family = family.toLowerCase();
104-if (family !== 'ipv4' && family !== 'ipv6')
105-throw new ERR_INVALID_ARG_VALUE('family', family);
106-const type = family === 'ipv4' ? AF_INET : AF_INET6;
107-return Boolean(this[kHandle].check(address, type));
117+if (!SocketAddress.isSocketAddress(address)) {
118+validateString(address, 'address');
119+validateString(family, 'family');
120+try {
121+address = new SocketAddress({
122+ address,
123+ family,
124+});
125+} catch {
126+// Ignore the error. If it's not a valid address, return false.
127+return false;
128+}
129+}
130+return Boolean(this[kHandle].check(address[kSocketAddressHandle]));
108131}
109132110133get rules() {