feat(network): UPnP support

This commit is contained in:
Alexey Kasyanchuk
2018-03-02 04:14:04 +03:00
parent 3b73b37d74
commit b876c71f12
5 changed files with 343 additions and 163 deletions

419
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "rats-search",
"version": "0.6.1",
"version": "0.8.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -1457,15 +1457,14 @@
}
},
"addr-to-ip-port": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/addr-to-ip-port/-/addr-to-ip-port-1.4.2.tgz",
"integrity": "sha1-fkb/Hya3qfXjP9g51XrvYwO0xpI="
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/addr-to-ip-port/-/addr-to-ip-port-1.4.3.tgz",
"integrity": "sha512-+KHTG8KSAFdKYmLNZp3VnKj94AZ94gDdu2ipAwxNuMmN9vpf5hdsQgk1hNXFqQOXfd+BMHokyDa1GwDAlGAtGQ=="
},
"ajv": {
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": {
"co": "4.6.0",
"fast-deep-equal": "1.0.0",
@ -1787,8 +1786,7 @@
"asn1": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
"integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
"dev": true
"integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
},
"asn1.js": {
"version": "4.9.2",
@ -1813,8 +1811,7 @@
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"assertion-error": {
"version": "1.1.0",
@ -1832,7 +1829,6 @@
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
"integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
"dev": true,
"requires": {
"lodash": "4.17.5"
}
@ -1857,8 +1853,7 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"atob": {
"version": "1.1.3",
@ -1900,14 +1895,12 @@
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
"dev": true
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
},
"babel-code-frame": {
"version": "6.26.0",
@ -2031,7 +2024,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"dev": true,
"optional": true,
"requires": {
"tweetnacl": "0.14.5"
@ -2110,13 +2102,13 @@
"integrity": "sha1-n2dWEvDmr8bvNFDfulH/cjir83E="
},
"bittorrent-protocol": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/bittorrent-protocol/-/bittorrent-protocol-2.2.3.tgz",
"integrity": "sha512-nMPIjGGuQS9InlqYfXUZrxaivlftJLbSLQI1WQYBG1od1FnIf1iU2mN4tJctPvqw95jZ6qfAHig6dPIeKCXhrg==",
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/bittorrent-protocol/-/bittorrent-protocol-2.4.0.tgz",
"integrity": "sha512-q5ILfNwWpVLu1/+djBaDeDZBvJq0fXpKy2jchyfFZlyTqOG2snMd3jlpss4BVsklpjs8rbLPH/7N+SfvrsT3+g==",
"requires": {
"bencode": "1.0.0",
"bitfield": "1.1.2",
"debug": "2.6.9",
"bencode": "2.0.0",
"bitfield": "2.0.0",
"debug": "3.1.0",
"inherits": "2.0.3",
"randombytes": "2.0.6",
"readable-stream": "2.3.4",
@ -2126,14 +2118,19 @@
"xtend": "4.0.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"ms": "2.0.0"
"safe-buffer": "5.1.1"
}
},
"bitfield": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bitfield/-/bitfield-2.0.0.tgz",
"integrity": "sha512-4xM4DYejOHQ/qWBfeqBXNA4mJ12PwcOibFYnH1kYh5U9BHciCqEJBqGNVnMJXUhm8mflujNRLSv7IiVQxovgjw=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@ -2179,11 +2176,11 @@
}
},
"bittorrent-tracker": {
"version": "9.4.0",
"resolved": "https://registry.npmjs.org/bittorrent-tracker/-/bittorrent-tracker-9.4.0.tgz",
"integrity": "sha512-crjYvkPtIJa+0DELC49AEAAgte+Z9a3DUxssW4he5xmsXltl3A6PnG4YnLcDYexdMM/RSqUSWhArFanU+XnyOw==",
"version": "9.6.0",
"resolved": "https://registry.npmjs.org/bittorrent-tracker/-/bittorrent-tracker-9.6.0.tgz",
"integrity": "sha512-WEypMPSaVnfeWD1dEE83CqkykFjEzxmMPziHKuBEayaE3M9e1E/HYORrZ+29NoePB9ysiGHy7c8wMrtaoUfjcw==",
"requires": {
"bencode": "1.0.0",
"bencode": "2.0.0",
"bittorrent-peerid": "1.2.0",
"bn.js": "4.11.8",
"bufferutil": "3.0.3",
@ -2200,20 +2197,72 @@
"run-series": "1.1.4",
"safe-buffer": "5.1.1",
"simple-get": "2.7.0",
"simple-peer": "8.5.0",
"simple-peer": "9.0.0",
"simple-websocket": "7.0.1",
"string2compact": "1.2.2",
"uniq": "1.0.1",
"unordered-array-remove": "1.0.2",
"ws": "4.0.0",
"ws": "4.1.0",
"xtend": "4.0.1"
},
"dependencies": {
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"safe-buffer": "5.1.1"
}
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"readable-stream": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "2.0.0",
"safe-buffer": "5.1.1",
"string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
}
},
"simple-peer": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.0.0.tgz",
"integrity": "sha512-oQEM7S540h7+aOgttTputZ9Nkd5DP9jqMif2fdUvoRGVvjBn5jIeV8CADOULMosRIYaaAXKzkB6G6xUw3MLIXQ==",
"requires": {
"debug": "3.1.0",
"get-browser-rtc": "1.0.2",
"inherits": "2.0.3",
"randombytes": "2.0.6",
"readable-stream": "2.3.4"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"requires": {
"safe-buffer": "5.1.1"
}
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
@ -2329,7 +2378,6 @@
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"dev": true,
"requires": {
"hoek": "4.2.0"
}
@ -2739,8 +2787,7 @@
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"center-align": {
"version": "0.1.3",
@ -3104,8 +3151,7 @@
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"dev": true
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
},
"coa": {
"version": "1.0.4",
@ -3192,7 +3238,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
"dev": true,
"requires": {
"delayed-stream": "1.0.0"
}
@ -3470,11 +3515,11 @@
}
},
"create-torrent": {
"version": "3.29.2",
"resolved": "https://registry.npmjs.org/create-torrent/-/create-torrent-3.29.2.tgz",
"integrity": "sha512-UG4yQZ9XiXXHAJdb0HI4If+GQg3PMRIpYoFYvMbgrL4vgjOpcPs7qQPBWqnxWul/gGGVdBk/n0Oa6XLV6xGONA==",
"version": "3.30.0",
"resolved": "https://registry.npmjs.org/create-torrent/-/create-torrent-3.30.0.tgz",
"integrity": "sha512-sTpbGpKKw/PaV7FHW6xhluPeAHe+hA+j4BIp8QY5abHxco45TCk08H5Joiv7lDAjP9YhSw6jWnJzJwJc6sILSw==",
"requires": {
"bencode": "1.0.0",
"bencode": "2.0.0",
"block-stream2": "1.1.0",
"filestream": "4.1.3",
"flatten": "1.0.2",
@ -3490,6 +3535,14 @@
"xtend": "4.0.1"
},
"dependencies": {
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"safe-buffer": "5.1.1"
}
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@ -3549,7 +3602,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"dev": true,
"requires": {
"boom": "5.2.0"
},
@ -3558,7 +3610,6 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
"hoek": "4.2.0"
}
@ -3787,7 +3838,6 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
"assert-plus": "1.0.0"
}
@ -3863,8 +3913,7 @@
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates": {
"version": "1.0.0",
@ -4008,7 +4057,6 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"dev": true,
"optional": true,
"requires": {
"jsbn": "0.1.1"
@ -4779,20 +4827,17 @@
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
"integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
"dev": true
"integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"fastparse": {
"version": "1.1.1",
@ -4951,14 +4996,12 @@
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
"integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
"dev": true,
"requires": {
"asynckit": "0.4.0",
"combined-stream": "1.0.5",
@ -6054,7 +6097,6 @@
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "1.0.0"
}
@ -6156,14 +6198,12 @@
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"dev": true,
"requires": {
"ajv": "5.5.2",
"har-schema": "2.0.0"
@ -6282,7 +6322,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"dev": true,
"requires": {
"boom": "4.3.1",
"cryptiles": "3.1.2",
@ -6310,8 +6349,7 @@
"hoek": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
"integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==",
"dev": true
"integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ=="
},
"hoist-non-react-statics": {
"version": "2.3.1",
@ -6340,7 +6378,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"jsprim": "1.4.1",
@ -6953,8 +6990,7 @@
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"js-base64": {
"version": "2.4.3",
@ -6981,7 +7017,6 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true,
"optional": true
},
"jsesc": {
@ -7005,14 +7040,12 @@
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
"dev": true
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
},
"json-socket": {
"version": "0.3.0",
@ -7022,8 +7055,7 @@
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"json5": {
"version": "0.5.1",
@ -7044,7 +7076,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
@ -7074,19 +7105,29 @@
"requires": {
"buffer-equals": "1.0.4",
"k-bucket": "3.3.1",
"k-rpc-socket": "1.7.2",
"k-rpc-socket": "1.8.0",
"randombytes": "2.0.6",
"safe-buffer": "5.1.1"
}
},
"k-rpc-socket": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.7.2.tgz",
"integrity": "sha512-g1FH/9Ahiy9iAfH/fwqpoaD6KgpgKRdzG++1hEuH6Lg9epAgYwG2ca37CMDgIIegyju0Ct8GO1eVaBCkAcbABQ==",
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.8.0.tgz",
"integrity": "sha512-f/9TynsO8YYjZ6JjNNtSSH7CJcIHcio1buy3zqByGxb/GX8AWLdL6FZEWTrN8V3/J7W4/E0ZTQQ+Jt2rVq7ELg==",
"requires": {
"bencode": "1.0.0",
"bencode": "2.0.0",
"buffer-equals": "1.0.4",
"safe-buffer": "5.1.1"
},
"dependencies": {
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"keycode": {
@ -7112,6 +7153,11 @@
"graceful-fs": "4.1.11"
}
},
"last-one-wins": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz",
"integrity": "sha1-wb/Qy8tGeQ7JFWuNGu6Py4bNoio="
},
"latest-version": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
@ -7604,7 +7650,6 @@
"version": "2.1.17",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
"dev": true,
"requires": {
"mime-db": "1.30.0"
}
@ -7904,6 +7949,17 @@
}
}
},
"nat-upnp": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/nat-upnp/-/nat-upnp-1.1.1.tgz",
"integrity": "sha512-b1Q+sf9fHGCXhlWErNgTTEto8A02MnNysw3vx3kD1657+/Ae23vPEAB6QBh+9RqLL4+xw/LmjVTiLy6A7Cx0xw==",
"requires": {
"async": "2.6.0",
"ip": "1.1.5",
"request": "2.83.0",
"xml2js": "0.1.14"
}
},
"nerf-dart": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz",
@ -7921,9 +7977,9 @@
"integrity": "sha1-53eKzeLlWALgrRh5w5z2917aYdg="
},
"node-abi": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.2.0.tgz",
"integrity": "sha512-FqVC0WNNL8fQWQK3GYTESfwZXZKDbSIiEEIvufq7HV6Lj0IDDZRVa4CU/KTA0JVlqY9eTDSuPiC8FS9UfGVuzA==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.3.0.tgz",
"integrity": "sha512-zwm6vU3SsVgw3e9fu48JBaRBCJGIvAgysDsqtf5+vEexFE71bEOtaMWb5zr/zODZNzTPtQlqUUpC79k68Hspow==",
"optional": true,
"requires": {
"semver": "5.5.0"
@ -8119,8 +8175,7 @@
"oauth-sign": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
"dev": true
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
},
"object-assign": {
"version": "4.1.1",
@ -8426,7 +8481,7 @@
"blob-to-buffer": "1.2.7",
"get-stdin": "5.0.1",
"magnet-uri": "5.1.7",
"parse-torrent-file": "4.0.3",
"parse-torrent-file": "4.1.0",
"simple-get": "2.7.0"
},
"dependencies": {
@ -8438,13 +8493,23 @@
}
},
"parse-torrent-file": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/parse-torrent-file/-/parse-torrent-file-4.0.3.tgz",
"integrity": "sha512-Ob1IK1FC165T6dslPBdgxfbQIZI1+QE0sqOfoB+YS/XfDda2Xa2xDZmE0vcGD4ei5Lw6FQYNhsHX9RzZzHwFtQ==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/parse-torrent-file/-/parse-torrent-file-4.1.0.tgz",
"integrity": "sha512-Bd6yLjRgkl0dfMi7/x9hJDL1eaAnmhFD3JoCLTuIjR+CM9gr55YMHNo+hTbObYjoj2SPWIUAelZMQ5IbpmzbmQ==",
"requires": {
"bencode": "1.0.0",
"bencode": "2.0.0",
"simple-sha1": "2.1.0",
"uniq": "1.0.1"
},
"dependencies": {
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"pascalcase": {
@ -8534,8 +8599,7 @@
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"piece-length": {
"version": "1.0.0",
@ -9105,7 +9169,7 @@
"github-from-package": "0.0.0",
"minimist": "1.2.0",
"mkdirp": "0.5.1",
"node-abi": "2.2.0",
"node-abi": "2.3.0",
"noop-logger": "0.1.1",
"npmlog": "4.1.2",
"os-homedir": "1.0.2",
@ -9261,8 +9325,7 @@
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
},
"pupa": {
"version": "1.0.0",
@ -9278,8 +9341,7 @@
"qs": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
"dev": true
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
},
"query-string": {
"version": "4.3.4",
@ -9680,6 +9742,11 @@
"symbol-observable": "1.2.0"
}
},
"record-cache": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/record-cache/-/record-cache-1.0.1.tgz",
"integrity": "sha512-PqZBqRbn00rDt2nAvb/7oC5dbhY0VuOUjLhFKqZ6C7aaJmSc1BgqewKXxFScXnFe4cCZAmTvD4xRLimtvOIi1A=="
},
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
@ -9865,9 +9932,9 @@
"dev": true
},
"render-media": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/render-media/-/render-media-2.10.0.tgz",
"integrity": "sha1-V/OfigJn5KZ5XPuhlImYK0BxdFo=",
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/render-media/-/render-media-2.11.0.tgz",
"integrity": "sha512-TjQjOxZ0HfSxZCfSSMxMvQNvXgQhPScpH8kd+zt+BE65jXVXa65mMPfEMmvGzMpDuXHgqJzAtvdcnXcxMaTu+A==",
"requires": {
"debug": "2.6.9",
"is-ascii": "1.0.0",
@ -9915,7 +9982,6 @@
"version": "2.83.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
"integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
"dev": true,
"requires": {
"aws-sign2": "0.7.0",
"aws4": "1.6.0",
@ -10036,9 +10102,9 @@
"integrity": "sha1-iac93F51ye+KtjIMChYA1qQRebk="
},
"rusha": {
"version": "0.8.12",
"resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.12.tgz",
"integrity": "sha1-XYOM4fzosUVnTudx6q1byyV15ks="
"version": "0.8.13",
"resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.13.tgz",
"integrity": "sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo="
},
"rx-lite": {
"version": "4.0.8",
@ -10235,7 +10301,7 @@
"resolved": "https://registry.npmjs.org/simple-sha1/-/simple-sha1-2.1.0.tgz",
"integrity": "sha1-lCe7lv8SY8wQqEFM7dUaGLkZ6LM=",
"requires": {
"rusha": "0.8.12"
"rusha": "0.8.13"
}
},
"simple-websocket": {
@ -10248,7 +10314,7 @@
"randombytes": "2.0.6",
"readable-stream": "2.3.4",
"safe-buffer": "5.1.1",
"ws": "4.0.0"
"ws": "4.1.0"
},
"dependencies": {
"isarray": {
@ -10444,7 +10510,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"dev": true,
"requires": {
"hoek": "4.2.0"
}
@ -10602,7 +10667,6 @@
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
"integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
"dev": true,
"requires": {
"asn1": "0.2.3",
"assert-plus": "1.0.0",
@ -10856,7 +10920,7 @@
"resolved": "https://registry.npmjs.org/string2compact/-/string2compact-1.2.2.tgz",
"integrity": "sha1-Qgs6nuHEaFSRm0oq6sZcQ/pQWXs=",
"requires": {
"addr-to-ip-port": "1.4.2",
"addr-to-ip-port": "1.4.3",
"ipaddr.js": "1.5.4"
}
},
@ -10869,8 +10933,7 @@
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
"integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
"dev": true
"integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
},
"strip-ansi": {
"version": "3.0.1",
@ -11263,24 +11326,43 @@
}
},
"torrent-discovery": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/torrent-discovery/-/torrent-discovery-8.3.1.tgz",
"integrity": "sha1-e0+jOQwqlau4e0sDJDazCArWrdY=",
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/torrent-discovery/-/torrent-discovery-8.4.0.tgz",
"integrity": "sha512-UzlkS9UBynp1HdkuNjFfRIKVLG/TyEiKQGkvHDiBV2pzyD0mpB+vn15iqDuNkNXX6qF0OwBVe1eU/PyvI14I0w==",
"requires": {
"bittorrent-dht": "7.10.0",
"bittorrent-tracker": "9.4.0",
"debug": "2.6.9",
"bittorrent-dht": "8.1.0",
"bittorrent-tracker": "9.6.0",
"debug": "3.1.0",
"inherits": "2.0.3",
"run-parallel": "1.1.7",
"xtend": "4.0.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"ms": "2.0.0"
"safe-buffer": "5.1.1"
}
},
"bittorrent-dht": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-8.1.0.tgz",
"integrity": "sha512-Lm8iBOIjeVRz+28aKYANGeJzQLNDr49bWobde86vCcx2/DVKIao3lOWEnlzu0j39D8PHfGmO7L/ixMiCv1/CJQ==",
"requires": {
"bencode": "2.0.0",
"buffer-equals": "1.0.4",
"debug": "3.1.0",
"inherits": "2.0.3",
"k-bucket": "3.3.1",
"k-rpc": "4.2.1",
"last-one-wins": "1.0.4",
"lru": "3.1.0",
"randombytes": "2.0.6",
"record-cache": "1.0.1",
"safe-buffer": "5.1.1",
"simple-sha1": "2.1.0"
}
},
"xtend": {
@ -11299,7 +11381,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
"integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
"dev": true,
"requires": {
"punycode": "1.4.1"
}
@ -11358,7 +11439,6 @@
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true,
"optional": true
},
"type-detect": {
@ -11457,11 +11537,6 @@
"resolved": "https://registry.npmjs.org/uint64be/-/uint64be-1.0.1.tgz",
"integrity": "sha1-H3FUIC8qG4rzU4cd2mUb80zpPpU="
},
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
},
"unherit": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz",
@ -11842,37 +11917,52 @@
}
},
"ut_metadata": {
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/ut_metadata/-/ut_metadata-3.0.11.tgz",
"integrity": "sha512-PbDsUBK3zyiL3q4i785QtLMpuYHDToGFt2HGnb6Ax9dGIYYVfeGKmAiRf4n0wvz3bqoIvESDBO/He/6QErpakg==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/ut_metadata/-/ut_metadata-3.2.0.tgz",
"integrity": "sha512-EfEV2pPUYCBDSLb1ZO5e+XloK2npOJKb3adc7Oxc4nZyPpB5Ke7SSdLk1TVlsc6LJG1KCP9ARQ1WrwmLdgGF2A==",
"requires": {
"bencode": "1.0.0",
"bitfield": "1.1.2",
"debug": "2.6.9",
"bencode": "2.0.0",
"bitfield": "2.0.0",
"debug": "3.1.0",
"inherits": "2.0.3",
"safe-buffer": "5.1.1",
"simple-sha1": "2.1.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"ms": "2.0.0"
"safe-buffer": "5.1.1"
}
},
"bitfield": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bitfield/-/bitfield-2.0.0.tgz",
"integrity": "sha512-4xM4DYejOHQ/qWBfeqBXNA4mJ12PwcOibFYnH1kYh5U9BHciCqEJBqGNVnMJXUhm8mflujNRLSv7IiVQxovgjw=="
}
}
},
"ut_pex": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/ut_pex/-/ut_pex-1.1.6.tgz",
"integrity": "sha512-cgIQHCp7FSGFmuD8qzDL0cSBT0rnImYwxWkCzpfhgCc6XMKqmZdNT8+fgw4U0Fbba/Az/q8uZR2loR8EymFmLg==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/ut_pex/-/ut_pex-1.2.0.tgz",
"integrity": "sha512-ICiTfNctYEW7k70OYtRA5cqg1hwOKIRiC903CIJDLZQM0afPV0drf8c4LHFSaDuNZTyZeC5P5EjGLOTfWQIn1g==",
"requires": {
"bencode": "1.0.0",
"bencode": "2.0.0",
"compact2string": "1.4.0",
"inherits": "2.0.3",
"string2compact": "1.2.2"
},
"dependencies": {
"bencode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz",
"integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==",
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"utf8-byte-length": {
@ -11906,8 +11996,7 @@
"uuid": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
"dev": true
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
},
"validate-npm-package-license": {
"version": "3.0.1",
@ -11935,7 +12024,6 @@
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"core-util-is": "1.0.2",
@ -12282,12 +12370,12 @@
"webtorrent": {
"version": "github:DEgITx/webtorrent#4222a53369e420ab98e7c61adab3de56d0cefff6",
"requires": {
"addr-to-ip-port": "1.4.2",
"addr-to-ip-port": "1.4.3",
"bitfield": "1.1.2",
"bittorrent-dht": "7.10.0",
"bittorrent-protocol": "2.2.3",
"bittorrent-protocol": "2.4.0",
"chunk-store-stream": "2.0.2",
"create-torrent": "3.29.2",
"create-torrent": "3.30.0",
"debug": "3.1.0",
"end-of-stream": "1.4.1",
"fs-chunk-store": "1.6.5",
@ -12304,7 +12392,7 @@
"randombytes": "2.0.6",
"range-parser": "1.2.0",
"readable-stream": "2.3.4",
"render-media": "2.10.0",
"render-media": "2.11.0",
"run-parallel": "1.1.7",
"run-parallel-limit": "1.0.3",
"safe-buffer": "5.1.1",
@ -12316,12 +12404,12 @@
"stream-to-blob": "1.0.0",
"stream-to-blob-url": "2.1.0",
"stream-with-known-length-to-buffer": "1.0.0",
"torrent-discovery": "8.3.1",
"torrent-discovery": "8.4.0",
"torrent-piece": "1.1.1",
"uniq": "1.0.1",
"unordered-array-remove": "1.0.2",
"ut_metadata": "3.0.11",
"ut_pex": "1.1.6",
"ut_metadata": "3.2.0",
"ut_pex": "1.2.0",
"xtend": "4.0.1",
"zero-fill": "2.2.3"
},
@ -12492,13 +12580,12 @@
}
},
"ws": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz",
"integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz",
"integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==",
"requires": {
"async-limiter": "1.0.0",
"safe-buffer": "5.1.1",
"ultron": "1.1.1"
"safe-buffer": "5.1.1"
}
},
"x-is-function": {
@ -12517,6 +12604,14 @@
"integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
"dev": true
},
"xml2js": {
"version": "0.1.14",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.1.14.tgz",
"integrity": "sha1-UnTmf1pkxfkpdM2FE54DMq3GuQw=",
"requires": {
"sax": "1.2.4"
}
},
"xmlbuilder": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",

View File

@ -91,6 +91,7 @@
"material-ui": "^0.20.0",
"moment": "^2.20.1",
"mysql": "^2.15.0",
"nat-upnp": "^1.1.1",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-input-range": "^1.3.0",

View File

@ -110,6 +110,16 @@ export default class AdminPage extends Page {
<div className='fs0-75' style={{color: 'grey'}}>* For current work UDP port must be fully open and forward in case of router usage</div>
</div>
<Toggle
style={{marginTop: '10px'}}
label="Enabled UPnP"
toggled={this.options.upnp}
onToggle={(e, checked) => {
this.options.upnp = checked
this.forceUpdate()
}}
/>
<div className='row inline w100p'>
<div style={{flex: 1}}>Collection directory</div>
<TextField

View File

@ -10,6 +10,7 @@ let config = {
udpTrackersPort: 4446,
udpTrackersTimeout: 3 * 60 * 1000,
p2p: true,
upnp: true,
sitemapMaxSize: 25000,

View File

@ -6,6 +6,7 @@ const getPeersStatisticUDP = require('./bt/udp-tracker-request')
const crypto = require('crypto')
const P2PServer = require('./p2p')
const stun = require('stun')
const natUpnp = require('nat-upnp');
//var express = require('express');
//var app = express();
//var server = require('http').Server(app);
@ -604,12 +605,18 @@ p2p.listen()
upSpider()
}
if(upnp)
upnp.ratsUnmap()
for(const option in options)
{
if(option in config)
config[option] = options[option]
}
if(upnp)
upnp.ratsMap()
if(config.p2p)
{
spider.announceHashes = [crypto.createHash('sha1').update('degrats-v1').digest()]
@ -1030,11 +1037,74 @@ stunServer.once('bindingResponse', stunMsg => {
const {address, port} = stunMsg.getAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS).value
stunServer.close()
console.log('p2p ignore my address', address)
console.log('p2p stun ignore my address', address)
p2p.ignoreAddresses.push(address)
})
stunServer.send(stunRequest, 19302, 'stun.l.google.com')
let upnp
if(config.upnp)
{
upnp = natUpnp.createClient();
upnp.ratsMap = () => {
upnp.portMapping({
public: config.spiderPort,
private: config.spiderPort,
protocol: 'UDP',
description: 'Rats',
ttl: 0
}, function(err) {
if(err)
console.log('upnp error', err)
});
upnp.portMapping({
public: config.spiderPort,
private: config.spiderPort,
protocol: 'TCP',
description: 'Rats',
ttl: 0
}, function(err) {
if(err)
console.log('upnp error', err)
});
upnp.portMapping({
public: config.udpTrackersPort,
private: config.udpTrackersPort,
protocol: 'UDP',
description: 'Rats',
ttl: 0
}, function(err) {
if(err)
console.log('upnp error', err)
});
}
upnp.ratsUnmap = () => {
upnp.portUnmapping({
public: config.spiderPort,
protocol: 'UDP'
});
upnp.portUnmapping({
public: config.spiderPort,
protocol: 'TCP'
});
upnp.portUnmapping({
public: config.udpTrackersPort,
protocol: 'UDP'
});
}
upnp.ratsMap();
upnp.externalIp(function(err, ip) {
if(err)
return
console.log('p2p upnp ignore my address', ip)
p2p.ignoreAddresses.push(ip)
});
}
spider.on('peer', (IPs) => {
IPs.forEach(ip => p2p.add(ip))
})
@ -1101,6 +1171,9 @@ if(config.spaceQuota)
this.stop = (callback) => {
console.log('spider closing...')
if(upnp)
upnp.ratsUnmap()
torrentClient.destroy(() => {
sphinx.end(() => spider.close(() => {
mysqlSingle.destroy()