82 lines
1.8 KiB
JavaScript
82 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
var PromiseA = require('bluebird').Promise;
|
|
var natUpnp = require('nat-upnp');
|
|
|
|
exports.upnpForward = function (port) {
|
|
return natUpnp.createClient({ timeout: 1800 }).then(function (client) {
|
|
return client.portMapping({
|
|
public: port.public,
|
|
private: port.private || port.public,
|
|
ttl: port.ttl || 0
|
|
})/*.then(function () {
|
|
var promitter = client.getMappings();
|
|
|
|
promitter.on('entry', function (entry, i) {
|
|
console.log('entry', i);
|
|
console.log(entry);
|
|
}).then(function (mappings) {
|
|
console.log('mappings');
|
|
console.log(mappings);
|
|
});
|
|
|
|
return promitter;
|
|
})*/;
|
|
});
|
|
};
|
|
|
|
/*
|
|
client.portUnmapping({
|
|
public: 80
|
|
});
|
|
|
|
.findGateway().then(function (stuff) {
|
|
console.log('[a] gateway');
|
|
console.log(stuff.gateway);
|
|
console.log('[a] address');
|
|
console.log(stuff.address);
|
|
}).then(function () {
|
|
return client
|
|
*/
|
|
|
|
/*
|
|
client.getMappings({ local: true }, function(err, results) {
|
|
console.log('local mappings', results);
|
|
});
|
|
|
|
client.externalIp(function(err, ip) {
|
|
console.log('ext-ip', ip);
|
|
});
|
|
*/
|
|
|
|
function usage() {
|
|
console.warn("");
|
|
console.warn("node helpers/upnp-forward [public port] [private port] [ttl]");
|
|
console.warn("");
|
|
}
|
|
|
|
function run() {
|
|
var pubPort = parseInt(process.argv[2], 10) || 0;
|
|
var privPort = parseInt(process.argv[3], 10) || pubPort;
|
|
var ttl = parseInt(process.argv[4], 10) || 0;
|
|
var options = { public: pubPort, private: privPort, ttl: ttl };
|
|
|
|
if (!pubPort) {
|
|
usage();
|
|
return;
|
|
}
|
|
|
|
exports.upnpForward(options).then(function () {
|
|
console.log('done');
|
|
}).catch(function (err) {
|
|
console.error('ERROR');
|
|
console.error(err);
|
|
throw err;
|
|
});
|
|
}
|
|
|
|
if (require.main === module) {
|
|
run();
|
|
return;
|
|
}
|