Skip to content
This repository was archived by the owner on Jul 3, 2020. It is now read-only.

Commit fecb02e

Browse files
author
Face Kapow
committed
js/service/*, js/utils
1 parent 2178210 commit fecb02e

6 files changed

Lines changed: 133 additions & 202 deletions

File tree

js/service/dhcp-client/dhcp-options.js

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,19 @@ exports.OPTION_ADDRESS_TIME = 51;
2020
exports.OPTION_MESSAGE_TYPE = 53;
2121
exports.OPTION_SERVER_ID = 54;
2222

23-
exports.find = function(options, id, minLength) {
24-
minLength = minLength || 0;
25-
26-
for (var i = 0; i < options.length; ++i) {
27-
if (options[i].id === id && options[i].bytes.length >= minLength) {
28-
return options[i].bytes;
29-
}
23+
exports.find = (options, id, minLength = 0) => {
24+
for (const opt of options) {
25+
if (opt.id === id && opt.bytes.length >= minLength) return opt.bytes;
3026
}
31-
3227
return null;
3328
};
3429

35-
exports.findAll = function(options, id, minLength) {
36-
minLength = minLength || 0;
37-
var result = [];
38-
39-
for (var i = 0; i < options.length; ++i) {
40-
if (options[i].id === id && options[i].bytes.length >= minLength) {
41-
result.push(options[i].bytes);
30+
exports.findAll = (options, id, minLength = 0) => {
31+
const result = [];
32+
for (const opt of options) {
33+
if (opt.id === id && opt.bytes.length >= minLength) {
34+
result.push(opt.bytes);
4235
}
4336
}
44-
4537
return result;
4638
};

js/service/dhcp-client/dhcp-packet.js

Lines changed: 30 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
// limitations under the License.
1414

1515
'use strict';
16-
var u8view = require('u8-view');
17-
var runtime = require('../../core');
18-
var IP4Address = runtime.net.IP4Address;
16+
const u8view = require('u8-view');
17+
const { IP4Address } = require('../../core').net;
1918

20-
var OPERATION_REQUEST = 1;
21-
var OPERATION_RESPONSE = 2;
19+
const OPERATION_REQUEST = 1;
20+
const OPERATION_RESPONSE = 2;
2221

23-
var OPTIONS_OFFSET = 28 + 16 + 192;
24-
var magicCookie = 0x63825363;
22+
const OPTIONS_OFFSET = 28 + 16 + 192;
23+
const magicCookie = 0x63825363;
2524

2625
exports.packetType = {
2726
DISCOVER: 1,
@@ -31,19 +30,14 @@ exports.packetType = {
3130
ACK: 5,
3231
NAK: 6,
3332
RELEASE: 7,
34-
INFORM: 8
33+
INFORM: 8,
3534
};
3635

37-
exports.create = function(type, srcMAC, options) {
38-
var i, j;
39-
options = options || [];
36+
exports.create = (type, srcMAC, options = []) => {
37+
let optionsLength = 8; // cookie (4b), type (3b) and 0xff (1b)
38+
for (const opt of options) optionsLength += opt.bytes.length + 2; // id (1b) and len (1b)
4039

41-
var optionsLength = 8; // cookie (4b), type (3b) and 0xff (1b)
42-
for (i = 0; i < options.length; ++i) {
43-
optionsLength += options[i].bytes.length + 2; // id (1b) and len (1b)
44-
}
45-
46-
var u8 = new Uint8Array(OPTIONS_OFFSET + optionsLength);
40+
const u8 = new Uint8Array(OPTIONS_OFFSET + optionsLength);
4741
u8[0] = OPERATION_REQUEST; // request
4842
u8[1] = 1; // over ethernet
4943
u8[2] = 6; // hw address 6 bytes
@@ -63,70 +57,47 @@ exports.create = function(type, srcMAC, options) {
6357
u8[33] = srcMAC.f;
6458
u8view.setUint32BE(u8, OPTIONS_OFFSET, magicCookie);
6559

66-
var optionsOffset = OPTIONS_OFFSET + 4;
60+
let optionsOffset = OPTIONS_OFFSET + 4;
6761

6862
// Option: DHCP Message
6963
u8[optionsOffset++] = 53; // id
7064
u8[optionsOffset++] = 1; // len
7165
u8[optionsOffset++] = type;
7266

7367
// Other options
74-
for (i = 0; i < options.length; ++i) {
75-
var option = options[i];
68+
for (const option of options) {
7669
u8[optionsOffset++] = option.id; // id
7770
u8[optionsOffset++] = option.bytes.length & 0xff; // len
78-
for (j = 0; j < option.bytes.length; ++j) {
79-
u8[optionsOffset++] = option.bytes[j] >>> 0;
80-
}
71+
for (const byte of option.bytes) u8[optionsOffset++] = byte >>> 0;
8172
}
8273

8374
u8[optionsOffset] = 255; // end of option list
8475
return u8;
8576
};
8677

87-
exports.getOperation = function(u8) {
88-
return u8[0];
89-
};
90-
91-
exports.getRequestId = function(u8) {
92-
return u8view.getUint32BE(u8, 4);
93-
};
94-
95-
exports.getYourIP = function(u8) {
96-
return new IP4Address(u8[16], u8[17], u8[18], u8[19]);
97-
};
98-
99-
exports.getServerIP = function(u8) {
100-
return new IP4Address(u8[20], u8[21], u8[22], u8[23]);
101-
};
78+
exports.getOperation = u8 => u8[0];
79+
exports.getRequestId = u8 => u8view.getUint32BE(u8, 4);
80+
exports.getYourIP = u8 => new IP4Address(u8[16], u8[17], u8[18], u8[19]);
81+
exports.getServerIP = u8 => new IP4Address(u8[20], u8[21], u8[22], u8[23]);
82+
exports.isValidMagicCookie = u8 => magicCookie === u8view.getUint32BE(u8, OPTIONS_OFFSET);
10283

103-
exports.isValidMagicCookie = function(u8) {
104-
return magicCookie === u8view.getUint32BE(u8, OPTIONS_OFFSET);
105-
};
106-
107-
exports.getOptions = function(u8) {
108-
var i, j;
109-
var options = [];
84+
exports.getOptions = (u8) => {
85+
let i;
86+
let j;
87+
const options = [];
11088
for (i = OPTIONS_OFFSET + 4; i < u8.length; ++i) {
111-
var optId = u8[i++];
112-
var optLen = u8[i++];
113-
114-
if (0xff === optId) {
115-
break;
116-
}
89+
const optId = u8[i++];
90+
const optLen = u8[i++];
11791

118-
if (0x00 === optId) {
119-
continue;
120-
}
92+
if (optId === 0xff) break;
93+
if (optId === 0x00) continue;
12194

122-
var bytes = [];
123-
for (j = 0; j < optLen; ++j) {
124-
bytes.push(u8[i++]);
125-
}
95+
const bytes = [];
96+
for (j = 0; j < optLen; ++j) bytes.push(u8[i++]);
12697

12798
options.push({
12899
id: optId,
129-
bytes: bytes
100+
bytes,
130101
});
131102

132103
--i;

js/service/dhcp-client/index.js

Lines changed: 68 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -13,118 +13,103 @@
1313
// limitations under the License.
1414

1515
'use strict';
16-
var dhcpPacket = require('./dhcp-packet');
17-
var dhcpOptions = require('./dhcp-options');
18-
var runtime = require('../../core');
19-
var IP4Address = runtime.net.IP4Address;
20-
21-
var STATE_IDLE = 0;
22-
var STATE_DISCOVER_SENT = 1;
23-
var STATE_REQUEST_SENT = 2;
24-
var STATE_ACK_RECEIVED = 2;
25-
var STATE_ERROR = 3;
26-
27-
function sendPacket(socket, srcMAC, type, serverIP, yourIP) {
16+
const dhcpPacket = require('./dhcp-packet');
17+
const dhcpOptions = require('./dhcp-options');
18+
const runtime = require('../../core');
19+
const { IP4Address } = runtime.net;
20+
21+
const STATE_IDLE = 0;
22+
const STATE_DISCOVER_SENT = 1;
23+
const STATE_REQUEST_SENT = 2;
24+
const STATE_ACK_RECEIVED = 2;
25+
// const STATE_ERROR = 3;
26+
27+
const sendPacket = (socket, srcMAC, type, serverIP, yourIP) => {
2828
// Request info option
29-
var opt55 = {id: 55, bytes: [
30-
1, // subnet
31-
3, // router
32-
6 // dns
33-
]};
29+
const opt55 = {
30+
id: 55,
31+
bytes: [
32+
1, // subnet
33+
3, // router
34+
6, // dns
35+
],
36+
};
3437

35-
var options;
38+
let options;
3639
if (serverIP && yourIP) {
37-
var opt54 = {id: 54, bytes: [serverIP.a, serverIP.b, serverIP.c, serverIP.d]};
38-
var opt50 = {id: 50, bytes: [yourIP.a, yourIP.b, yourIP.c, yourIP.d]};
40+
const opt54 = { id: 54, bytes: [serverIP.a, serverIP.b, serverIP.c, serverIP.d] };
41+
const opt50 = { id: 50, bytes: [yourIP.a, yourIP.b, yourIP.c, yourIP.d] };
3942
options = [opt55, opt54, opt50];
4043
} else {
4144
options = [opt55];
4245
}
4346

44-
var u8 = dhcpPacket.create(type, srcMAC, options);
47+
const u8 = dhcpPacket.create(type, srcMAC, options);
4548
socket.send(IP4Address.BROADCAST, 67, u8);
46-
}
49+
};
4750

48-
function checkPacket(u8) {
49-
var op = dhcpPacket.getOperation(u8);
50-
if (op !== dhcpPacket.OPERATION_RESPONSE) {
51-
return false;
52-
}
51+
const checkPacket = (u8) => {
52+
const op = dhcpPacket.getOperation(u8);
5353

54-
if (!dhcpPacket.isValidMagicCookie(u8)) {
55-
return false;
56-
}
54+
if (op !== dhcpPacket.OPERATION_RESPONSE) return false;
55+
if (!dhcpPacket.isValidMagicCookie(u8)) return false;
5756

5857
return true;
59-
}
58+
};
6059

61-
function optionToIP(options, id) {
62-
var option = dhcpOptions.find(options, id, 4);
63-
if (!option) {
64-
return IP4Address.ANY;
65-
}
60+
const optionToIP = (options, id) => {
61+
const option = dhcpOptions.find(options, id, 4);
62+
if (!option) return IP4Address.ANY;
6663

6764
return new IP4Address(option[0], option[1], option[2], option[3]);
68-
}
65+
};
6966

70-
function optionToIPsArray(options, id) {
71-
var selected = dhcpOptions.findAll(options, id, 4);
72-
var result = [];
73-
for (var i = 0, l = selected.length; i < l; ++i) {
74-
result.push(new IP4Address(selected[i][0], selected[i][1], selected[i][2], selected[i][3]));
75-
}
67+
const optionToIPsArray = (options, id) => {
68+
const selected = dhcpOptions.findAll(options, id, 4);
69+
const result = [];
70+
for (const sel of selected) result.push(new IP4Address(sel[0], sel[1], sel[2], sel[3]));
7671

7772
return result;
78-
}
73+
};
7974

80-
function dhcpConfigure(intf, cb) {
81-
var macAddress = intf.getMACAddress();
82-
var socket = new runtime.net.UDPSocket();
83-
var clientState = STATE_IDLE;
75+
const dhcpConfigure = (intf, cb) => {
76+
const macAddress = intf.getMACAddress();
77+
const socket = new runtime.net.UDPSocket();
78+
let clientState = STATE_IDLE;
8479

85-
function handleOffer(serverIP, yourIP, options) {
86-
var serverId = optionToIP(options, dhcpOptions.OPTION_SERVER_ID);
87-
if (serverId.isAny()) {
88-
serverId = serverIP;
89-
}
80+
const handleOffer = (serverIP, yourIP, options) => {
81+
let serverId = optionToIP(options, dhcpOptions.OPTION_SERVER_ID);
82+
if (serverId.isAny()) serverId = serverIP;
9083

9184
sendPacket(socket, macAddress, dhcpPacket.packetType.REQUEST, serverId, yourIP);
9285
clientState = STATE_REQUEST_SENT;
93-
}
86+
};
9487

95-
function handleAck(serverIP, yourIP, options) {
88+
const handleAck = (serverIP, yourIP, options) => {
9689
clientState = STATE_ACK_RECEIVED;
97-
var subnetMask = optionToIP(options, dhcpOptions.OPTION_SUBNET_MASK);
98-
var routerIPs = optionToIPsArray(options, dhcpOptions.OPTION_ROUTER);
99-
var dnsIPs = optionToIPsArray(options, dhcpOptions.OPTION_DOMAIN);
10090

10191
return cb({
10292
ip: yourIP,
103-
mask: subnetMask,
104-
routers: routerIPs,
105-
dns: dnsIPs
93+
mask: optionToIP(options, dhcpOptions.OPTION_SUBNET_MASK),
94+
routers: optionToIPsArray(options, dhcpOptions.OPTION_ROUTER),
95+
dns: optionToIPsArray(options, dhcpOptions.OPTION_DOMAIN),
10696
});
107-
}
97+
};
10898

109-
function parseMessage(serverIP, u8) {
110-
if (!checkPacket(u8)) {
111-
return;
112-
}
99+
const parseMessage = (serverIP, u8) => {
100+
if (!checkPacket(u8)) return;
113101

114-
var options = dhcpPacket.getOptions(u8);
115-
var messageTypeOption = dhcpOptions.find(options, dhcpOptions.OPTION_MESSAGE_TYPE, 1);
102+
const options = dhcpPacket.getOptions(u8);
103+
const messageTypeOption = dhcpOptions.find(options, dhcpOptions.OPTION_MESSAGE_TYPE, 1);
116104

117-
if (!messageTypeOption) {
118-
return;
119-
}
105+
if (!messageTypeOption) return;
120106

121-
var messageType = messageTypeOption[0];
122-
var yourIP = dhcpPacket.getYourIP(u8);
107+
const messageType = messageTypeOption[0];
108+
const yourIP = dhcpPacket.getYourIP(u8);
123109

124110
// debug('GOT response', messageType, JSON.stringify(options));
125111

126-
if (clientState === STATE_DISCOVER_SENT &&
127-
messageType === dhcpPacket.packetType.OFFER) {
112+
if (clientState === STATE_DISCOVER_SENT && messageType === dhcpPacket.packetType.OFFER) {
128113
handleOffer(serverIP, yourIP, options);
129114
return;
130115
}
@@ -133,31 +118,31 @@ function dhcpConfigure(intf, cb) {
133118
handleAck(serverIP, yourIP, options);
134119
return;
135120
}
136-
}
121+
};
137122

138-
function err(e) {
123+
/* const err = (e) => {
139124
clientState = STATE_ERROR;
140125
debug(e.stack);
141-
}
126+
}; */
142127

143-
socket.onmessage = function(ip, port, u8) {
128+
socket.onmessage = (ip, port, u8) => {
144129
debug('CLIENT OK', ip, port, u8);
145130
parseMessage(ip, u8);
146131
};
147132

148133
socket.bindToInterface(intf, 68);
149134
sendPacket(socket, macAddress, dhcpPacket.packetType.DISCOVER, null, null);
150135
clientState = STATE_DISCOVER_SENT;
151-
}
136+
};
152137

153-
runtime.net.onInterfaceAdded.add(function(intf) {
138+
runtime.net.onInterfaceAdded.add((intf) => {
154139
debug('intf add');
155140

156-
dhcpConfigure(intf, function(config) {
141+
dhcpConfigure(intf, (config) => {
157142
debug('configure dhcp ok', JSON.stringify(config));
158143
intf.configure(config.ip, config.mask);
159144

160-
var subnet = config.ip.and(config.mask);
145+
const subnet = config.ip.and(config.mask);
161146
runtime.net.route.addSubnet(subnet, config.mask, null, intf);
162147
runtime.net.route.addDefault(config.routers[0], intf);
163148
intf.setNetworkEnabled(true);

js/service/dns-resolver/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@
1313
// limitations under the License.
1414

1515
'use strict';
16-
var DNSClient = require('../../component/dns-client');
16+
const DNSClient = require('../../component/dns-client');
1717
module.exports = new DNSClient();

0 commit comments

Comments
 (0)