forked from coolaj86/walnut.js
		
	
		
			
				
	
	
		
			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;
 | |
| }
 |