penguins-eggs 9.2.6 → 9.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.oclif.manifest.json +1 -0
- package/README.md +34 -31
- package/conf/distros/kinetic/README.md +41 -0
- package/conf/tools.yaml +1 -1
- package/{lib → dist}/classes/bleach.js +0 -0
- package/{lib → dist}/classes/compressors.js +0 -0
- package/{lib → dist}/classes/daddy.js +0 -0
- package/{lib → dist}/classes/distro.js +14 -30
- package/{lib → dist}/classes/family/archlinux.js +0 -0
- package/{lib → dist}/classes/family/debian.js +0 -0
- package/{lib → dist}/classes/family/fedora.js +0 -0
- package/{lib → dist}/classes/family/suse.js +0 -0
- package/{lib → dist}/classes/incubation/branding.js +0 -0
- package/{lib → dist}/classes/incubation/distros/bionic.js +0 -0
- package/{lib → dist}/classes/incubation/distros/buster.js +0 -0
- package/{lib → dist}/classes/incubation/distros/focal.js +0 -0
- package/{lib → dist}/classes/incubation/distros/jessie.js +0 -0
- package/{lib → dist}/classes/incubation/distros/rolling.js +0 -0
- package/{lib → dist}/classes/incubation/fisherman-helper/displaymanager.js +0 -0
- package/{lib → dist}/classes/incubation/fisherman-helper/packages.js +0 -0
- package/{lib → dist}/classes/incubation/fisherman.js +0 -0
- package/{lib → dist}/classes/incubation/incubator.js +9 -19
- package/{lib → dist}/classes/incubation/installer.js +0 -0
- package/{lib → dist}/classes/initrd.js +0 -0
- package/{lib → dist}/classes/keyboards.js +0 -0
- package/{lib → dist}/classes/locales.js +0 -0
- package/{lib → dist}/classes/n8.js +0 -0
- package/dist/classes/network.js +99 -0
- package/{lib → dist}/classes/ovary.js +0 -0
- package/{lib → dist}/classes/pacman.js +16 -1
- package/{lib → dist}/classes/pve-live.js +0 -0
- package/dist/classes/pxe.js +337 -0
- package/{lib → dist}/classes/settings.js +0 -0
- package/{lib → dist}/classes/sources_list.js +0 -0
- package/{lib → dist}/classes/systemctl.js +0 -0
- package/{lib → dist}/classes/tailor.js +0 -0
- package/{lib → dist}/classes/tools.js +0 -0
- package/{lib → dist}/classes/users.js +0 -0
- package/{lib → dist}/classes/utils.js +82 -17
- package/{lib → dist}/classes/xdg.js +24 -26
- package/{lib → dist}/classes/yolk.js +0 -0
- package/{lib → dist}/commands/adapt.js +0 -0
- package/{lib → dist}/commands/analyze.js +0 -0
- package/{lib → dist}/commands/calamares.js +0 -0
- package/{lib → dist}/commands/config.js +0 -0
- package/dist/commands/cuckoo.js +63 -0
- package/{lib → dist}/commands/dad.js +0 -0
- package/{lib → dist}/commands/export/deb.js +0 -0
- package/{lib → dist}/commands/export/docs.js +0 -0
- package/{lib → dist}/commands/export/iso.js +0 -0
- package/{lib → dist}/commands/install.js +26 -5
- package/{lib → dist}/commands/kill.js +0 -0
- package/{lib → dist}/commands/mom.js +0 -0
- package/{lib → dist}/commands/produce.js +0 -0
- package/{lib → dist}/commands/status.js +0 -0
- package/{lib → dist}/commands/syncfrom.js +0 -0
- package/{lib → dist}/commands/syncto.js +0 -0
- package/{lib → dist}/commands/tools/clean.js +0 -0
- package/{lib → dist}/commands/tools/skel.js +0 -0
- package/{lib → dist}/commands/tools/stat.js +0 -0
- package/{lib → dist}/commands/tools/yolk.js +0 -0
- package/{lib → dist}/commands/update.js +0 -0
- package/{lib → dist}/commands/wardrobe/get.js +0 -0
- package/{lib → dist}/commands/wardrobe/ironing.js +0 -0
- package/{lib → dist}/commands/wardrobe/list.js +0 -0
- package/{lib → dist}/commands/wardrobe/show.js +0 -0
- package/{lib → dist}/commands/wardrobe/wear.js +0 -0
- package/{lib → dist}/components/elements/information.js +0 -0
- package/{lib → dist}/components/elements/steps.js +0 -0
- package/{lib → dist}/components/elements/title.js +0 -0
- package/{lib → dist}/components/finished.js +0 -0
- package/{lib → dist}/components/install.js +0 -0
- package/{lib → dist}/components/keyboard.js +0 -0
- package/{lib → dist}/components/location.js +0 -0
- package/{lib → dist}/components/network.js +0 -0
- package/{lib → dist}/components/partitions.js +0 -0
- package/{lib → dist}/components/summary.js +2 -2
- package/{lib → dist}/components/users.js +0 -0
- package/{lib → dist}/components/welcome.js +0 -0
- package/dist/dhcpd/dhcpd.js +222 -0
- package/dist/dhcpd/index.js +7 -0
- package/dist/dhcpd/packet/converters.js +377 -0
- package/dist/dhcpd/packet/options.js +2 -0
- package/dist/dhcpd/packet/types.js +2 -0
- package/dist/dhcpd/packet.js +251 -0
- package/dist/dhcpd/proxy.js +152 -0
- package/dist/dhcpd/server.js +152 -0
- package/dist/dhcpd/sprintf.js +170 -0
- package/dist/dhcpd/utils.js +190 -0
- package/{lib → dist}/index.js +0 -0
- package/{lib → dist}/interfaces/i-addons.js +0 -0
- package/{lib → dist}/interfaces/i-analyze.js +0 -0
- package/{lib → dist}/interfaces/i-app.js +0 -0
- package/{lib → dist}/interfaces/i-branding.js +0 -0
- package/{lib → dist}/interfaces/i-config-tools.js +0 -0
- package/{lib → dist}/interfaces/i-devices.js +0 -0
- package/{lib → dist}/interfaces/i-distro.js +0 -0
- package/{lib → dist}/interfaces/i-drive-list.js +0 -0
- package/{lib → dist}/interfaces/i-eggs-config.js +0 -0
- package/{lib → dist}/interfaces/i-exec.js +0 -0
- package/{lib → dist}/interfaces/i-initrd.js +0 -0
- package/{lib → dist}/interfaces/i-install.js +0 -0
- package/{lib → dist}/interfaces/i-installer.js +0 -0
- package/{lib → dist}/interfaces/i-krill-config.js +0 -0
- package/{lib → dist}/interfaces/i-krill.js +0 -0
- package/{lib → dist}/interfaces/i-materia.js +0 -0
- package/{lib → dist}/interfaces/i-net.js +0 -0
- package/{lib → dist}/interfaces/i-packages.js +0 -0
- package/{lib → dist}/interfaces/i-partitions.js +0 -0
- package/{lib/interfaces/i-remix.js → dist/interfaces/i-pxe-options.js} +0 -0
- package/{lib/interfaces/i-settings.js → dist/interfaces/i-remix.js} +0 -0
- package/{lib/interfaces/i-user.js → dist/interfaces/i-settings.js} +0 -0
- package/{lib/interfaces/i-workdir.js → dist/interfaces/i-user.js} +0 -0
- package/{lib/interfaces/i-xkb-model.js → dist/interfaces/i-workdir.js} +0 -0
- package/{lib/interfaces/index.js → dist/interfaces/i-xkb-model.js} +0 -0
- package/dist/interfaces/index.js +2 -0
- package/{lib → dist}/krill/krill-prepare.js +20 -4
- package/{lib → dist}/krill/krill-sequence.js +64 -62
- package/{lib → dist}/krill/modules/add-user.js +0 -0
- package/{lib → dist}/krill/modules/bootloader-config-ubuntu.js +0 -0
- package/{lib → dist}/krill/modules/bootloader-config.js +1 -1
- package/{lib → dist}/krill/modules/bootloader.js +0 -5
- package/{lib → dist}/krill/modules/change-password.js +0 -0
- package/{lib → dist}/krill/modules/del-live-user.js +0 -0
- package/{lib → dist}/krill/modules/fstab.js +0 -0
- package/{lib → dist}/krill/modules/grubcfg.js +0 -0
- package/{lib → dist}/krill/modules/hostname.js +2 -2
- package/{lib → dist}/krill/modules/initramfs-cfg.js +0 -0
- package/{lib → dist}/krill/modules/initramfs.js +0 -0
- package/{lib → dist}/krill/modules/locale-cfg.js +0 -0
- package/{lib → dist}/krill/modules/locale.js +1 -1
- package/{lib/krill/modules/set-keyboard.js → dist/krill/modules/m-keyboard.js} +7 -3
- package/{lib/krill/modules/set-timezone.js → dist/krill/modules/m-timezone.js} +2 -2
- package/{lib → dist}/krill/modules/machine-id.js +0 -0
- package/{lib → dist}/krill/modules/mkfs.js +0 -0
- package/{lib → dist}/krill/modules/mount-fs.js +0 -0
- package/{lib → dist}/krill/modules/mount-vfs.js +0 -0
- package/{lib → dist}/krill/modules/network-cfg.js +0 -0
- package/{lib → dist}/krill/modules/packages.js +0 -0
- package/{lib → dist}/krill/modules/partition.js +1 -1
- package/{lib → dist}/krill/modules/remove-installer-link.js +0 -0
- package/{lib → dist}/krill/modules/umount.js +0 -0
- package/{lib → dist}/krill/modules/unpackfs.js +0 -0
- package/{lib → dist}/lib/cli-autologin.js +0 -0
- package/{lib → dist}/lib/dependencies.js +0 -0
- package/{lib → dist}/lib/get_address.js +0 -0
- package/{lib → dist}/lib/get_dns.js +0 -0
- package/{lib → dist}/lib/get_domain.js +0 -0
- package/{lib → dist}/lib/get_gateway.js +0 -0
- package/{lib → dist}/lib/get_hostname.js +0 -0
- package/{lib → dist}/lib/get_netmask.js +0 -0
- package/{lib → dist}/lib/get_password.js +0 -0
- package/{lib → dist}/lib/get_root_password.js +0 -0
- package/{lib → dist}/lib/get_userfullname.js +0 -0
- package/{lib → dist}/lib/get_username.js +0 -0
- package/{lib → dist}/lib/select_address_type.js +0 -0
- package/{lib → dist}/lib/select_filesystem_type.js +0 -0
- package/{lib → dist}/lib/select_installation_device.js +0 -0
- package/{lib → dist}/lib/select_installation_mode.js +0 -0
- package/{lib → dist}/lib/select_interface.js +0 -0
- package/{lib → dist}/lib/select_keyboard_layout.js +0 -0
- package/{lib → dist}/lib/select_keyboard_model.js +0 -0
- package/{lib → dist}/lib/select_keyboard_option.js +0 -0
- package/{lib → dist}/lib/select_keyboard_variant.js +0 -0
- package/{lib → dist}/lib/select_languages.js +0 -0
- package/{lib → dist}/lib/select_regions.js +0 -0
- package/{lib → dist}/lib/select_user_swap_choice.js +0 -0
- package/{lib → dist}/lib/select_zones.js +0 -0
- package/{lib → dist}/lib/utils.js +1 -2
- package/ipxe/ipxe.efi +0 -0
- package/package.json +20 -17
- package/scripts/_eggs +11 -7
- package/scripts/eggs.bash +2 -2
- package/lib/classes/bleach.d.ts +0 -40
- package/lib/classes/compressors.d.ts +0 -24
- package/lib/classes/daddy.d.ts +0 -11
- package/lib/classes/distro.d.ts +0 -31
- package/lib/classes/family/archlinux.d.ts +0 -69
- package/lib/classes/family/debian.d.ts +0 -68
- package/lib/classes/family/fedora.d.ts +0 -63
- package/lib/classes/family/suse.d.ts +0 -63
- package/lib/classes/incubation/branding.d.ts +0 -8
- package/lib/classes/incubation/distros/bionic.d.ts +0 -29
- package/lib/classes/incubation/distros/buster.d.ts +0 -31
- package/lib/classes/incubation/distros/focal.d.ts +0 -29
- package/lib/classes/incubation/distros/jessie.d.ts +0 -32
- package/lib/classes/incubation/distros/rolling.d.ts +0 -31
- package/lib/classes/incubation/fisherman-helper/displaymanager.d.ts +0 -7
- package/lib/classes/incubation/fisherman-helper/packages.d.ts +0 -19
- package/lib/classes/incubation/fisherman.d.ts +0 -77
- package/lib/classes/incubation/incubator.d.ts +0 -35
- package/lib/classes/incubation/installer.d.ts +0 -15
- package/lib/classes/initrd.d.ts +0 -42
- package/lib/classes/keyboards.d.ts +0 -43
- package/lib/classes/locales.d.ts +0 -14
- package/lib/classes/n8.d.ts +0 -16
- package/lib/classes/ovary.d.ts +0 -179
- package/lib/classes/pacman.d.ts +0 -164
- package/lib/classes/pve-live.d.ts +0 -42
- package/lib/classes/pxe.d.ts +0 -64
- package/lib/classes/pxe.js +0 -376
- package/lib/classes/settings.d.ts +0 -55
- package/lib/classes/sources_list.d.ts +0 -27
- package/lib/classes/systemctl.d.ts +0 -46
- package/lib/classes/tailor.d.ts +0 -43
- package/lib/classes/tools.d.ts +0 -29
- package/lib/classes/users.d.ts +0 -21
- package/lib/classes/utils.d.ts +0 -299
- package/lib/classes/xdg.d.ts +0 -44
- package/lib/classes/yolk.d.ts +0 -26
- package/lib/commands/adapt.d.ts +0 -9
- package/lib/commands/analyze.d.ts +0 -25
- package/lib/commands/calamares.d.ts +0 -26
- package/lib/commands/config.d.ts +0 -34
- package/lib/commands/cuckoo.d.ts +0 -24
- package/lib/commands/cuckoo.js +0 -70
- package/lib/commands/dad.d.ts +0 -17
- package/lib/commands/export/deb.d.ts +0 -14
- package/lib/commands/export/docs.d.ts +0 -8
- package/lib/commands/export/iso.d.ts +0 -13
- package/lib/commands/install.d.ts +0 -26
- package/lib/commands/kill.d.ts +0 -20
- package/lib/commands/mom.d.ts +0 -14
- package/lib/commands/produce.d.ts +0 -28
- package/lib/commands/status.d.ts +0 -18
- package/lib/commands/syncfrom.d.ts +0 -42
- package/lib/commands/syncto.d.ts +0 -67
- package/lib/commands/tools/clean.d.ts +0 -15
- package/lib/commands/tools/skel.d.ts +0 -17
- package/lib/commands/tools/stat.d.ts +0 -14
- package/lib/commands/tools/yolk.d.ts +0 -23
- package/lib/commands/update.d.ts +0 -46
- package/lib/commands/wardrobe/get.d.ts +0 -17
- package/lib/commands/wardrobe/ironing.d.ts +0 -18
- package/lib/commands/wardrobe/list.d.ts +0 -17
- package/lib/commands/wardrobe/show.d.ts +0 -19
- package/lib/commands/wardrobe/wear.d.ts +0 -21
- package/lib/components/elements/information.d.ts +0 -4
- package/lib/components/elements/steps.d.ts +0 -6
- package/lib/components/elements/title.d.ts +0 -4
- package/lib/components/finished.d.ts +0 -8
- package/lib/components/install.d.ts +0 -8
- package/lib/components/keyboard.d.ts +0 -12
- package/lib/components/location.d.ts +0 -12
- package/lib/components/network.d.ts +0 -12
- package/lib/components/partitions.d.ts +0 -9
- package/lib/components/summary.d.ts +0 -16
- package/lib/components/users.d.ts +0 -20
- package/lib/components/welcome.d.ts +0 -6
- package/lib/index.d.ts +0 -1
- package/lib/interfaces/i-addons.d.ts +0 -8
- package/lib/interfaces/i-analyze.d.ts +0 -13
- package/lib/interfaces/i-app.d.ts +0 -7
- package/lib/interfaces/i-branding.d.ts +0 -29
- package/lib/interfaces/i-config-tools.d.ts +0 -11
- package/lib/interfaces/i-devices.d.ts +0 -13
- package/lib/interfaces/i-distro.d.ts +0 -19
- package/lib/interfaces/i-drive-list.d.ts +0 -29
- package/lib/interfaces/i-eggs-config.d.ts +0 -24
- package/lib/interfaces/i-exec.d.ts +0 -4
- package/lib/interfaces/i-initrd.d.ts +0 -6
- package/lib/interfaces/i-install.d.ts +0 -9
- package/lib/interfaces/i-installer.d.ts +0 -20
- package/lib/interfaces/i-krill-config.d.ts +0 -26
- package/lib/interfaces/i-krill.d.ts +0 -35
- package/lib/interfaces/i-materia.d.ts +0 -36
- package/lib/interfaces/i-net.d.ts +0 -9
- package/lib/interfaces/i-packages.d.ts +0 -10
- package/lib/interfaces/i-partitions.d.ts +0 -9
- package/lib/interfaces/i-remix.d.ts +0 -14
- package/lib/interfaces/i-settings.d.ts +0 -10
- package/lib/interfaces/i-user.d.ts +0 -7
- package/lib/interfaces/i-workdir.d.ts +0 -8
- package/lib/interfaces/i-xkb-model.d.ts +0 -17
- package/lib/interfaces/index.d.ts +0 -17
- package/lib/krill/krill-prepare.d.ts +0 -60
- package/lib/krill/krill-sequence.d.ts +0 -150
- package/lib/krill/modules/add-user.d.ts +0 -15
- package/lib/krill/modules/bootloader-config-arch.d.ts +0 -9
- package/lib/krill/modules/bootloader-config-arch.js +0 -13
- package/lib/krill/modules/bootloader-config-ubuntu.d.ts +0 -9
- package/lib/krill/modules/bootloader-config.d.ts +0 -9
- package/lib/krill/modules/bootloader.d.ts +0 -10
- package/lib/krill/modules/change-password.d.ts +0 -10
- package/lib/krill/modules/del-live-user.d.ts +0 -9
- package/lib/krill/modules/fstab.d.ts +0 -14
- package/lib/krill/modules/grubcfg.d.ts +0 -17
- package/lib/krill/modules/hostname.d.ts +0 -13
- package/lib/krill/modules/initramfs-cfg.d.ts +0 -14
- package/lib/krill/modules/initramfs.d.ts +0 -13
- package/lib/krill/modules/locale-cfg.d.ts +0 -10
- package/lib/krill/modules/locale.d.ts +0 -13
- package/lib/krill/modules/machine-id.d.ts +0 -15
- package/lib/krill/modules/mkfs.d.ts +0 -13
- package/lib/krill/modules/mount-fs.d.ts +0 -17
- package/lib/krill/modules/mount-vfs.d.ts +0 -17
- package/lib/krill/modules/network-cfg.d.ts +0 -19
- package/lib/krill/modules/packages.d.ts +0 -14
- package/lib/krill/modules/partition.d.ts +0 -20
- package/lib/krill/modules/remove-installer-link.d.ts +0 -13
- package/lib/krill/modules/set-keyboard.d.ts +0 -10
- package/lib/krill/modules/set-timezone.d.ts +0 -14
- package/lib/krill/modules/umount.d.ts +0 -14
- package/lib/krill/modules/unpackfs.d.ts +0 -13
- package/lib/lib/cli-autologin.d.ts +0 -27
- package/lib/lib/dependencies.d.ts +0 -49
- package/lib/lib/get_address.d.ts +0 -1
- package/lib/lib/get_dns.d.ts +0 -1
- package/lib/lib/get_domain.d.ts +0 -1
- package/lib/lib/get_gateway.d.ts +0 -1
- package/lib/lib/get_hostname.d.ts +0 -1
- package/lib/lib/get_netmask.d.ts +0 -1
- package/lib/lib/get_password.d.ts +0 -1
- package/lib/lib/get_root_password.d.ts +0 -1
- package/lib/lib/get_userfullname.d.ts +0 -1
- package/lib/lib/get_username.d.ts +0 -1
- package/lib/lib/select_address_type.d.ts +0 -1
- package/lib/lib/select_filesystem_type.d.ts +0 -1
- package/lib/lib/select_installation_device.d.ts +0 -1
- package/lib/lib/select_installation_mode.d.ts +0 -1
- package/lib/lib/select_interface.d.ts +0 -1
- package/lib/lib/select_keyboard_layout.d.ts +0 -4
- package/lib/lib/select_keyboard_model.d.ts +0 -4
- package/lib/lib/select_keyboard_option.d.ts +0 -4
- package/lib/lib/select_keyboard_variant.d.ts +0 -4
- package/lib/lib/select_languages.d.ts +0 -1
- package/lib/lib/select_regions.d.ts +0 -1
- package/lib/lib/select_user_swap_choice.d.ts +0 -1
- package/lib/lib/select_zones.d.ts +0 -1
- package/lib/lib/utils.d.ts +0 -43
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* converters.js
|
|
4
|
+
*/
|
|
5
|
+
var utils = require('../utils');
|
|
6
|
+
var sprintf = require('../sprintf');
|
|
7
|
+
var converters = {
|
|
8
|
+
// option 1: subnet mask
|
|
9
|
+
1: {
|
|
10
|
+
encode: utils.writeIp,
|
|
11
|
+
decode: utils.readIp
|
|
12
|
+
},
|
|
13
|
+
// option 2: time offset
|
|
14
|
+
2: {
|
|
15
|
+
encode: function encode(buf, num, value, offset) {
|
|
16
|
+
buf[offset++] = num;
|
|
17
|
+
buf[offset++] = 4;
|
|
18
|
+
utils.writeInt32(buf, value, offset);
|
|
19
|
+
return offset + 4;
|
|
20
|
+
},
|
|
21
|
+
decode: function decode(buf) {
|
|
22
|
+
return utils.readInt32(buf, 0);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
// option 3: routers
|
|
26
|
+
3: {
|
|
27
|
+
decode: function decode(buf) {
|
|
28
|
+
var i, numRecords, pos, records;
|
|
29
|
+
numRecords = buf.length / 4;
|
|
30
|
+
pos = 0;
|
|
31
|
+
records = [];
|
|
32
|
+
i = 0;
|
|
33
|
+
while (i < numRecords) {
|
|
34
|
+
records.push(sprintf("%d.%d.%d.%d", buf[pos++], buf[pos++], buf[pos++], buf[pos++]));
|
|
35
|
+
i++;
|
|
36
|
+
}
|
|
37
|
+
return records;
|
|
38
|
+
},
|
|
39
|
+
encode: function encode(buf, num, data, offset) {
|
|
40
|
+
var routers;
|
|
41
|
+
routers = data;
|
|
42
|
+
buf[offset++] = num;
|
|
43
|
+
buf[offset++] = routers.length * 4;
|
|
44
|
+
routers.forEach(function (ip) {
|
|
45
|
+
return ip.split(".").forEach(function (item) {
|
|
46
|
+
buf[offset++] = item;
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
return offset;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
// option 6: dns servers
|
|
53
|
+
6: {
|
|
54
|
+
decode: function (buf) {
|
|
55
|
+
var i, numRecords, pos, records;
|
|
56
|
+
numRecords = buf.length / 4;
|
|
57
|
+
pos = 0;
|
|
58
|
+
records = [];
|
|
59
|
+
i = 0;
|
|
60
|
+
while (i < numRecords) {
|
|
61
|
+
records.push(sprintf("%d.%d.%d.%d", buf[pos++], buf[pos++], buf[pos++], buf[pos++]));
|
|
62
|
+
i++;
|
|
63
|
+
}
|
|
64
|
+
return records;
|
|
65
|
+
},
|
|
66
|
+
encode: function (buf, num, data, offset) {
|
|
67
|
+
var routers;
|
|
68
|
+
routers = data.split(",");
|
|
69
|
+
buf[offset++] = num;
|
|
70
|
+
buf[offset++] = routers.length * 4;
|
|
71
|
+
routers.forEach(function (ip) {
|
|
72
|
+
return ip.split(".").forEach(function (item) {
|
|
73
|
+
buf[offset++] = item;
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
return offset;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
/*
|
|
80
|
+
// option 119: dns search list
|
|
81
|
+
119: {
|
|
82
|
+
encode: null,
|
|
83
|
+
decode: null
|
|
84
|
+
},
|
|
85
|
+
*/
|
|
86
|
+
// option 12: hostname
|
|
87
|
+
12: {
|
|
88
|
+
encode: utils.writeString,
|
|
89
|
+
decode: utils.readString
|
|
90
|
+
},
|
|
91
|
+
// option 15: dns domain name
|
|
92
|
+
15: {
|
|
93
|
+
encode: utils.writeString,
|
|
94
|
+
decode: utils.readString
|
|
95
|
+
},
|
|
96
|
+
// option 28: broadcast address
|
|
97
|
+
28: {
|
|
98
|
+
encode: utils.writeIp,
|
|
99
|
+
decode: utils.readIp
|
|
100
|
+
},
|
|
101
|
+
// option 31: router discovery
|
|
102
|
+
31: {
|
|
103
|
+
encode: function (buf, num, value, offset) {
|
|
104
|
+
buf[offset++] = num;
|
|
105
|
+
buf[offset++] = 1;
|
|
106
|
+
utils.writeInt8(buf, value, offset);
|
|
107
|
+
return offset + 1;
|
|
108
|
+
},
|
|
109
|
+
decode: function (buf) {
|
|
110
|
+
return utils.readInt8(buf, 0);
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
// option 33: static routes
|
|
114
|
+
33: {
|
|
115
|
+
decode: function decode(buf) {
|
|
116
|
+
var i, numRecords, pos, records;
|
|
117
|
+
numRecords = buf.length / 4;
|
|
118
|
+
pos = 0;
|
|
119
|
+
records = [];
|
|
120
|
+
i = 0;
|
|
121
|
+
while (i < numRecords) {
|
|
122
|
+
records.push(sprintf("%d.%d.%d.%d", buf[pos++], buf[pos++], buf[pos++], buf[pos++]));
|
|
123
|
+
i++;
|
|
124
|
+
}
|
|
125
|
+
return records;
|
|
126
|
+
},
|
|
127
|
+
encode: function encode(buf, num, data, offset) {
|
|
128
|
+
var routers;
|
|
129
|
+
routers = data.split(",");
|
|
130
|
+
buf[offset++] = num;
|
|
131
|
+
buf[offset++] = routers.length * 4;
|
|
132
|
+
routers.forEach(function (ip) {
|
|
133
|
+
return ip.split(".").forEach(function (item) {
|
|
134
|
+
buf[offset++] = item;
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
return offset;
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
// option 43: vendor specific information
|
|
141
|
+
43: {
|
|
142
|
+
decode: function (buf) {
|
|
143
|
+
var records = [];
|
|
144
|
+
var i = 0;
|
|
145
|
+
var len = buf.length;
|
|
146
|
+
while (i < len) {
|
|
147
|
+
records.push(sprintf("%02x", buf[i]));
|
|
148
|
+
i++;
|
|
149
|
+
}
|
|
150
|
+
return records.join(':');
|
|
151
|
+
},
|
|
152
|
+
encode: function (buf, num, data, offset) {
|
|
153
|
+
vendorinfo = data.split(":");
|
|
154
|
+
buf[offset++] = num;
|
|
155
|
+
buf[offset++] = vendorinfo.length;
|
|
156
|
+
vendorinfo.forEach(function (hex) {
|
|
157
|
+
buf[offset++] = parseInt(hex, 16);
|
|
158
|
+
});
|
|
159
|
+
return offset;
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
// option 44: netbios name servers
|
|
163
|
+
44: {
|
|
164
|
+
decode: function (buf) {
|
|
165
|
+
var i, numRecords, pos, records;
|
|
166
|
+
numRecords = buf.length / 4;
|
|
167
|
+
pos = 0;
|
|
168
|
+
records = [];
|
|
169
|
+
i = 0;
|
|
170
|
+
while (i < numRecords) {
|
|
171
|
+
records.push(sprintf("%d.%d.%d.%d", buf[pos++], buf[pos++], buf[pos++], buf[pos++]));
|
|
172
|
+
i++;
|
|
173
|
+
}
|
|
174
|
+
return records;
|
|
175
|
+
},
|
|
176
|
+
encode: function (buf, num, data, offset) {
|
|
177
|
+
var routers;
|
|
178
|
+
routers = data.split(",");
|
|
179
|
+
buf[offset++] = num;
|
|
180
|
+
buf[offset++] = routers.length * 4;
|
|
181
|
+
routers.forEach(function (ip) {
|
|
182
|
+
return ip.split(".").forEach(function (item) {
|
|
183
|
+
buf[offset++] = item;
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
return offset;
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
// option 46: netbios node type
|
|
190
|
+
46: {
|
|
191
|
+
decode: function (buf) {
|
|
192
|
+
return parseInt(buf[0], 16);
|
|
193
|
+
},
|
|
194
|
+
encode: function (buf, num, value, offset) {
|
|
195
|
+
buf[offset++] = num;
|
|
196
|
+
buf[offset++] = 1;
|
|
197
|
+
buf[offset++] = parseInt(buf[0], 10).toString(16);
|
|
198
|
+
return offset;
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
// option 47: netbios node type
|
|
202
|
+
47: {
|
|
203
|
+
encode: utils.writeString,
|
|
204
|
+
decode: utils.readString
|
|
205
|
+
},
|
|
206
|
+
// option 50: requested ip address
|
|
207
|
+
50: {
|
|
208
|
+
encode: utils.writeIp,
|
|
209
|
+
decode: utils.readIp
|
|
210
|
+
},
|
|
211
|
+
// option 51: lease time
|
|
212
|
+
51: {
|
|
213
|
+
decode: function (buf) {
|
|
214
|
+
return utils.readInt32(buf, 0);
|
|
215
|
+
},
|
|
216
|
+
encode: function (buf, num, value, offset) {
|
|
217
|
+
buf[offset++] = num;
|
|
218
|
+
buf[offset++] = 4;
|
|
219
|
+
utils.writeInt32(buf, value, offset);
|
|
220
|
+
return offset + 4;
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
// option 53: message type
|
|
224
|
+
53: {
|
|
225
|
+
decode: function (buf) {
|
|
226
|
+
return parseInt(buf[0], 10);
|
|
227
|
+
},
|
|
228
|
+
encode: function (buf, num, value, offset) {
|
|
229
|
+
buf[offset++] = 53;
|
|
230
|
+
buf[offset++] = 1;
|
|
231
|
+
buf[offset++] = value;
|
|
232
|
+
return offset;
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
// option 54: server identifier
|
|
236
|
+
54: {
|
|
237
|
+
encode: utils.writeIp,
|
|
238
|
+
decode: function decode(buf) {
|
|
239
|
+
return utils.readIp(buf, 0);
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
// option 55: parameter request list
|
|
243
|
+
55: {
|
|
244
|
+
decode: function decode(buf) {
|
|
245
|
+
var records = [];
|
|
246
|
+
var i = 0;
|
|
247
|
+
var len = buf.length;
|
|
248
|
+
while (i < len) {
|
|
249
|
+
records[i] = buf[i];
|
|
250
|
+
i++;
|
|
251
|
+
}
|
|
252
|
+
return records;
|
|
253
|
+
},
|
|
254
|
+
encode: function encode(buf, num, data, offset) {
|
|
255
|
+
buf[offset++] = num;
|
|
256
|
+
buf[offset++] = data.length;
|
|
257
|
+
utils.writeBytes(buf, data, offset);
|
|
258
|
+
// var i = 0;
|
|
259
|
+
// while(i < data.length) {
|
|
260
|
+
// utils.writeBytes(buf, data[i], offset);
|
|
261
|
+
// i++;
|
|
262
|
+
// offset++;
|
|
263
|
+
// }
|
|
264
|
+
return offset;
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
// option 57: max message size
|
|
268
|
+
57: {
|
|
269
|
+
encode: function (buf, num, value, offset) {
|
|
270
|
+
buf[offset++] = 57;
|
|
271
|
+
buf[offset++] = 2;
|
|
272
|
+
utils.writeInt16(buf, value, offset);
|
|
273
|
+
return offset + 2;
|
|
274
|
+
},
|
|
275
|
+
decode: function (buf) {
|
|
276
|
+
return utils.readInt16(buf, 0);
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
// option 60: vendor class identifier
|
|
280
|
+
60: {
|
|
281
|
+
encode: utils.writeString,
|
|
282
|
+
decode: utils.readString
|
|
283
|
+
},
|
|
284
|
+
// option 61: client identifier
|
|
285
|
+
61: {
|
|
286
|
+
encode: function (buf, num, value, offset) {
|
|
287
|
+
return offset;
|
|
288
|
+
},
|
|
289
|
+
decode: function (buf) {
|
|
290
|
+
var j, s, type;
|
|
291
|
+
s = [];
|
|
292
|
+
type = buf[0];
|
|
293
|
+
j = 1;
|
|
294
|
+
while (j < buf.length) {
|
|
295
|
+
s.push(sprintf("%02x", buf[j]));
|
|
296
|
+
j++;
|
|
297
|
+
}
|
|
298
|
+
return [type, s.join(":")];
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
// option 67: bootfile name
|
|
302
|
+
67: {
|
|
303
|
+
encode: utils.writeString,
|
|
304
|
+
decode: utils.readString
|
|
305
|
+
},
|
|
306
|
+
// option 77: user class information
|
|
307
|
+
77: {
|
|
308
|
+
encode: utils.writeString,
|
|
309
|
+
decode: function (buf) {
|
|
310
|
+
var records = [];
|
|
311
|
+
var offset = 0;
|
|
312
|
+
while (buf[offset]) {
|
|
313
|
+
var uc_len = buf[offset];
|
|
314
|
+
var uc_data = buf.slice(offset++, uc_len);
|
|
315
|
+
offset += uc_len;
|
|
316
|
+
records.push(uc_data.toString('ascii'));
|
|
317
|
+
}
|
|
318
|
+
return records.join(':');
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
// option 83: client fqdn
|
|
322
|
+
83: {
|
|
323
|
+
encode: function (buf, num, value, offset) {
|
|
324
|
+
return offset;
|
|
325
|
+
},
|
|
326
|
+
decode: function (buf) {
|
|
327
|
+
var ret;
|
|
328
|
+
ret = "";
|
|
329
|
+
ret += sprintf("%d", buf[0]) + "-";
|
|
330
|
+
ret += sprintf("%d", buf[1]) + "-";
|
|
331
|
+
ret += sprintf("%d", buf[2]) + " ";
|
|
332
|
+
ret += utils.toString(buf.slice(3));
|
|
333
|
+
return ret;
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
// option 175: etherboot
|
|
337
|
+
175: {
|
|
338
|
+
encode: function (buf, num, value, offset) {
|
|
339
|
+
return offset;
|
|
340
|
+
},
|
|
341
|
+
decode: function (buf) {
|
|
342
|
+
var j, s;
|
|
343
|
+
s = [];
|
|
344
|
+
j = 1;
|
|
345
|
+
while (j < buf.length) {
|
|
346
|
+
s.push(sprintf("%02x", buf[j]));
|
|
347
|
+
j++;
|
|
348
|
+
}
|
|
349
|
+
return s.join(":");
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
// option 255: end
|
|
353
|
+
255: {
|
|
354
|
+
encode: function (buf, num, value, offset) {
|
|
355
|
+
utils.writeInt8(buf, 255, offset);
|
|
356
|
+
return offset + 1;
|
|
357
|
+
},
|
|
358
|
+
decode: function (buf) {
|
|
359
|
+
return undefined;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
var stub = {
|
|
364
|
+
encode: function (buf, num, value, offset) {
|
|
365
|
+
// console.error("[dhcproxy] encoder for option " + num + " not found");
|
|
366
|
+
return offset;
|
|
367
|
+
},
|
|
368
|
+
decode: function (buf, num) {
|
|
369
|
+
// console.error("[dhcproxy] decoder for option " + num + " not found");
|
|
370
|
+
// console.log(" buffer:", buf);
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
module.exports = function (i) {
|
|
375
|
+
//console.log("GET CONVERTER FOR " + i);
|
|
376
|
+
return (i in converters) ? converters[i] : stub;
|
|
377
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = ["pad", "Subnet mask", "Time offset", "Routers", "Time server", "Name server", "DNS server", "Log server", "Cookie server", "LPR server", "Impress server", "Resource location server", "Host name", "Boot file size", "Merit dump file", "Domainname", "Swap server", "Root path", "Extensions path", "IP forwarding", "Non-local source routing", "Policy filter", "Maximum datagram reassembly size", "Default IP TTL", "Path MTU aging timeout", "Path MTU plateau table", "Interface MTU", "All subnets local", "Broadcast address", "Perform mask discovery", "Mask supplier", "Perform router discovery", "Router solicitation", "Static route", "Trailer encapsulation", "ARP cache timeout", "Ethernet encapsulation", "TCP default TTL", "TCP keepalive interval", "TCP keepalive garbage", "NIS domain", "NIS servers", "NTP servers", "Vendor specific info", "NetBIOS name server", "NetBIOS datagram distribution server", "NetBIOS node type", "NetBIOS scope", "X Window System font server", "X Window System display server", "Request IP address", "IP address leasetime", "Option overload", "DHCP message type", "Server identifier", "Parameter Request List", "Message", "Maximum DHCP message size", "T1", "T2", "Vendor class identifier", "Client-identifier", "Netware/IP domain name", "Netware/IP domain information", "NIS+ domain", "NIS+ servers", "TFTP server name", "Bootfile name", "Mobile IP home agent", "SMTP server", "POP3 server", "NNTP server", "WWW server", "Finger server", "IRC server", "StreetTalk server", "StreetTalk directory assistance server", "User-class Identification", "SLP-directory-agent", "SLP-service-scope", "Naming Authority", "Client FQDN", "Relay Agent Information", "Agent Remote ID", "Agent Subnet Mask", "NDS server", "NDS tree name", "NDS context", "IEEE 1003.1 POSIX", "FQDN", "Authentication", "Vines TCP/IP", "Server Selection", "Client System", "Client NDI", "LDAP", "IPv6 Transitions", "UUID/GUID", "UPA servers", "???", "Printer Name", "MDHCP", "???", "???", "???", "???", "???", "???", "Swap Path", "???", "IPX Compatability", "???", "Netinfo Address", "Netinfo Tag", "URL", "DHCP Failover", "DHCP Autoconfiguration", "Name Service Search", "Subnet selection", "Domain Search", "SIP Servers DHCP Option", "Classless Static Route", "???", "???", "???", "???", "Extension", "Extension", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "HP - TFTP file", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "Authenticate", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "MSFT - Classless route", "???", "???", "MSFT - WinSock Proxy Auto Detect", "???", "???", "End"];
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var utils = require('./utils');
|
|
3
|
+
var get_convert = require('./packet/converters');
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
*/
|
|
7
|
+
class Packet {
|
|
8
|
+
constructor(array) {
|
|
9
|
+
var key;
|
|
10
|
+
for (key in array) {
|
|
11
|
+
if (array.hasOwnProperty(key)) {
|
|
12
|
+
this[key] = array[key];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
getRequestedIPAddress() {
|
|
21
|
+
return this.options[50];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
* @param {*} op
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
op(op) {
|
|
29
|
+
this.op = op;
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @param {*} htype
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
htype(htype) {
|
|
38
|
+
this.htype = htype;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
*
|
|
43
|
+
* @param {*} hlen
|
|
44
|
+
* @returns
|
|
45
|
+
*/
|
|
46
|
+
hlen(hlen) {
|
|
47
|
+
this.hlen = hlen;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
hops(hops) {
|
|
51
|
+
this.hops = hops;
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @param {*} xid
|
|
57
|
+
* @returns
|
|
58
|
+
*/
|
|
59
|
+
xid(xid) {
|
|
60
|
+
this.xid = xid;
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
*
|
|
65
|
+
* @param {*} secs
|
|
66
|
+
* @returns
|
|
67
|
+
*/
|
|
68
|
+
secs(secs) {
|
|
69
|
+
this.secs = secs;
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
flags(flags) {
|
|
73
|
+
this.flags = flags;
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @param {*} ciaddr
|
|
79
|
+
* @returns
|
|
80
|
+
*/
|
|
81
|
+
ciaddr(ciaddr) {
|
|
82
|
+
this.ciaddr = ciaddr !== null ? ciaddr : '0.0.0.0';
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
*
|
|
87
|
+
* @param {*} yiaddr
|
|
88
|
+
* @returns
|
|
89
|
+
*/
|
|
90
|
+
yiaddr(yiaddr) {
|
|
91
|
+
this.yiaddr = yiaddr !== null ? yiaddr : '0.0.0.0';
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
*
|
|
96
|
+
* @param {*} siaddr
|
|
97
|
+
* @returns
|
|
98
|
+
*/
|
|
99
|
+
siaddr(siaddr) {
|
|
100
|
+
this.siaddr = siaddr !== null ? siaddr : '0.0.0.0';
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
*
|
|
105
|
+
* @param {*} giaddr
|
|
106
|
+
* @returns
|
|
107
|
+
*/
|
|
108
|
+
giaddr(giaddr) {
|
|
109
|
+
this.giaddr = giaddr !== null ? giaddr : '0.0.0.0';
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
*
|
|
114
|
+
* @param {*} chaddr
|
|
115
|
+
* @returns
|
|
116
|
+
*/
|
|
117
|
+
chaddr(chaddr) {
|
|
118
|
+
this.chaddr = chaddr;
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
*
|
|
123
|
+
* @param {*} sname
|
|
124
|
+
* @returns
|
|
125
|
+
*/
|
|
126
|
+
sname(sname) {
|
|
127
|
+
this.sname = sname;
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
*
|
|
132
|
+
* @param {*} fname
|
|
133
|
+
* @returns
|
|
134
|
+
*/
|
|
135
|
+
fname(fname) {
|
|
136
|
+
this.fname = fname;
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
*
|
|
141
|
+
* @param {*} options
|
|
142
|
+
* @returns
|
|
143
|
+
*/
|
|
144
|
+
options(options) {
|
|
145
|
+
this.options = options;
|
|
146
|
+
return this;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
*
|
|
151
|
+
* @param {*} str
|
|
152
|
+
* @returns
|
|
153
|
+
*/
|
|
154
|
+
function stripBinNull(str) {
|
|
155
|
+
var pos;
|
|
156
|
+
pos = str.indexOf('\u0000');
|
|
157
|
+
if (pos === -1) {
|
|
158
|
+
return str;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return str.substr(0, pos);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
var fromBuffer = function (b) {
|
|
165
|
+
var i, optLen, optNum, optVal, options, ret, _ref;
|
|
166
|
+
ret = {
|
|
167
|
+
op: b[0],
|
|
168
|
+
htype: b[1],
|
|
169
|
+
hlen: b.readUInt8(2),
|
|
170
|
+
hops: b.readUInt8(3),
|
|
171
|
+
xid: b.readUInt32BE(4),
|
|
172
|
+
secs: b.readUInt16BE(8),
|
|
173
|
+
flags: b.readUInt16BE(10),
|
|
174
|
+
ciaddr: utils.readIp(b, 12),
|
|
175
|
+
yiaddr: utils.readIp(b, 16),
|
|
176
|
+
siaddr: utils.readIp(b, 20),
|
|
177
|
+
giaddr: utils.readIp(b, 24),
|
|
178
|
+
chaddr: utils.readMacAddress(b.slice(28, 28 + b.readUInt8(2))),
|
|
179
|
+
sname: stripBinNull(b.toString('ascii', 44, 108)),
|
|
180
|
+
fname: stripBinNull(b.toString('ascii', 108, 236)),
|
|
181
|
+
options: {}
|
|
182
|
+
};
|
|
183
|
+
_ref = [0, b.slice(240)];
|
|
184
|
+
i = _ref[0];
|
|
185
|
+
options = _ref[1];
|
|
186
|
+
while (i < options.length && options[i] !== 255) {
|
|
187
|
+
optNum = parseInt(options[i++], 10);
|
|
188
|
+
optLen = parseInt(options[i++], 10);
|
|
189
|
+
var converter = get_convert(optNum);
|
|
190
|
+
optVal = converter.decode(options.slice(i, i + optLen), optNum);
|
|
191
|
+
ret.options[optNum] = optVal;
|
|
192
|
+
i += optLen;
|
|
193
|
+
}
|
|
194
|
+
return new Packet(ret);
|
|
195
|
+
};
|
|
196
|
+
var toBuffer = function () {
|
|
197
|
+
var buffer, hex, i, key, octet, opt, padded, pos, value, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1, _ref2, _ref3;
|
|
198
|
+
buffer = new Buffer.alloc(512, 0x00, 'ascii');
|
|
199
|
+
buffer[0] = this.op;
|
|
200
|
+
buffer[1] = this.htype;
|
|
201
|
+
buffer.writeUInt8(this.hlen, 2);
|
|
202
|
+
buffer.writeUInt8(this.hops, 3);
|
|
203
|
+
buffer.writeUInt32BE(this.xid, 4);
|
|
204
|
+
buffer.writeUInt16BE(this.secs, 8);
|
|
205
|
+
buffer.writeUInt16BE(this.flags, 10);
|
|
206
|
+
pos = 12;
|
|
207
|
+
_ref = ["ciaddr", "yiaddr", "siaddr", "giaddr"];
|
|
208
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
209
|
+
key = _ref[_i];
|
|
210
|
+
_ref1 = (this[key] || "0.0.0.0").split(".");
|
|
211
|
+
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
|
212
|
+
octet = _ref1[_j];
|
|
213
|
+
buffer.writeUInt8(parseInt(octet, 10), pos++);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
_ref2 = this.chaddr.split(':');
|
|
217
|
+
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
|
|
218
|
+
hex = _ref2[_k];
|
|
219
|
+
buffer[pos++] = parseInt(hex, 16);
|
|
220
|
+
}
|
|
221
|
+
buffer.fill(0, 43, 235);
|
|
222
|
+
buffer.write(this.sname, 43, 64, 'ascii');
|
|
223
|
+
if (typeof this.fname === 'string' || this.fname instanceof String) {
|
|
224
|
+
buffer.write(this.fname, 108, 128, 'ascii');
|
|
225
|
+
}
|
|
226
|
+
pos = 236;
|
|
227
|
+
_ref3 = [99, 130, 83, 99];
|
|
228
|
+
for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {
|
|
229
|
+
i = _ref3[_l];
|
|
230
|
+
buffer[pos++] = i;
|
|
231
|
+
}
|
|
232
|
+
pos = 240;
|
|
233
|
+
for (opt in this.options) {
|
|
234
|
+
if (this.options.hasOwnProperty(opt)) {
|
|
235
|
+
value = this.options[opt];
|
|
236
|
+
var converter = get_convert(opt);
|
|
237
|
+
pos = converter.encode(buffer, opt, value, pos);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
buffer[pos] = 255;
|
|
241
|
+
padded = new Buffer.alloc(pos, 0x00, 'ascii');
|
|
242
|
+
buffer.copy(padded, 0, 0, pos);
|
|
243
|
+
return padded;
|
|
244
|
+
};
|
|
245
|
+
Packet.fromBuffer = fromBuffer;
|
|
246
|
+
Packet.prototype.toBuffer = toBuffer;
|
|
247
|
+
module.exports = {
|
|
248
|
+
Packet: Packet,
|
|
249
|
+
fromBuffer: fromBuffer,
|
|
250
|
+
toBuffer: toBuffer
|
|
251
|
+
};
|