test loopback listener
This commit is contained in:
		
							parent
							
								
									0a3b457583
								
							
						
					
					
						commit
						6ecb868ae1
					
				
							
								
								
									
										33
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								index.js
									
									
									
									
									
								
							| @ -1,34 +1,3 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| var PromiseA = require('bluebird'); | ||||
| 
 | ||||
| module.exports.create = function (args) { | ||||
|   var promises = []; | ||||
| 
 | ||||
|   if (args.debug) { | ||||
|     console.log('[HP] create holepuncher'); | ||||
|     console.log(args); | ||||
|   } | ||||
| 
 | ||||
|   // TODO determine if we have a AAAA local ip or not
 | ||||
|   // TODO get A and AAAA records
 | ||||
|   if (-1 !== args.protocols.indexOf('none')) { | ||||
|     promises.push(PromiseA.any(args.ipifyUrls.map(function (ipifyUrl) { | ||||
|       var getIp = require('./lib/external-ip'); | ||||
| 
 | ||||
|       return getIp({ hostname: ipifyUrl, debug: args.debug }); | ||||
|     })).then(function (ips) { | ||||
|       return ips.map(function (ip) { | ||||
|         // TODO attempt loopback
 | ||||
|         return ip; | ||||
|       }); | ||||
|     })); | ||||
|   } | ||||
| 
 | ||||
|   return PromiseA.all(promises).then(function (results) { | ||||
|     if (args.debug) { | ||||
|       console.log('[HP] all done'); | ||||
|       console.log(results); | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
| module.exports = require('./lib/index.js'); | ||||
|  | ||||
| @ -2,41 +2,8 @@ | ||||
| 
 | ||||
| var PromiseA = require('bluebird'); | ||||
| //var dns = PromiseA.promisifyAll(require('dns'));
 | ||||
| var https = PromiseA.promisifyAll(require('https')); | ||||
| var os = require('os'); | ||||
| 
 | ||||
| function requestAsync(opts) { | ||||
|   return new PromiseA(function (resolve, reject) { | ||||
|     var req = https.request(opts, function (res) { | ||||
|       var data = ''; | ||||
| 
 | ||||
|       res.on('error', function (err) { | ||||
|         if (opts.debug) { | ||||
|           console.error('[Error] HP: bad request:'); | ||||
|           console.error(err); | ||||
|         } | ||||
|         reject(err); | ||||
|       }); | ||||
|       res.on('data', function (chunk) { | ||||
|         if (opts.debug > 2) { | ||||
|           console.log('HP: request chunk:'); | ||||
|           console.log(chunk); | ||||
|         } | ||||
|         data += chunk.toString('utf8'); | ||||
|       }); | ||||
|       res.on('end', function () { | ||||
|         if (opts.debug > 2) { | ||||
|           console.log('HP: request complete:'); | ||||
|           console.log(data); | ||||
|         } | ||||
|         resolve(data); | ||||
|       }); | ||||
|     }); | ||||
| 
 | ||||
|     req.on('error', reject); | ||||
|     req.end(); | ||||
|   }); | ||||
| } | ||||
| var requestAsync = require('./request'); | ||||
| 
 | ||||
| module.exports = function (opts) { | ||||
|   var promises = []; | ||||
| @ -126,6 +93,7 @@ module.exports = function (opts) { | ||||
|       return { | ||||
|         family: iface.family | ||||
|       , address: addr | ||||
|       , localAddress: iface.address | ||||
|       }; | ||||
|     })); | ||||
|   }); | ||||
|  | ||||
							
								
								
									
										53
									
								
								lib/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								lib/index.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| var PromiseA = require('bluebird'); | ||||
| var loopback = require('./loopback-listener'); | ||||
| 
 | ||||
| module.exports.create = function (args) { | ||||
|   if (args.debug) { | ||||
|     console.log('[HP] create holepuncher'); | ||||
|     console.log(args); | ||||
|   } | ||||
| 
 | ||||
|   var servers = loopback.create(args); | ||||
|   var promises = []; | ||||
| 
 | ||||
|   if (args.debug) { | ||||
|     console.log('[HP] create servers'); | ||||
|     console.log(servers); | ||||
|   } | ||||
| 
 | ||||
|   if (-1 !== args.protocols.indexOf('none')) { | ||||
|     promises.push(PromiseA.any(args.ipifyUrls.map(function (ipifyUrl) { | ||||
|       var getIp = require('./external-ip'); | ||||
| 
 | ||||
|       return getIp({ hostname: ipifyUrl, debug: args.debug }); | ||||
|     })).then(function (ips) { | ||||
|       // TODO how (if at all) should ip.address === ip.localAddress be treated differently?
 | ||||
|       // TODO check local firewall?
 | ||||
|       // TODO would it ever make sense for a public ip to respond to upnp?
 | ||||
|       var requestAsync = require('./request'); | ||||
| 
 | ||||
|       return PromiseA.all(ips.map(function (ip) { | ||||
|         return requestAsync({ | ||||
|           secure: false | ||||
|         , hostname: ip.address | ||||
|         , path: '/api/com.daplie.loopback' | ||||
|         , servername: 'daplie.invalid' | ||||
|         , localAddress: ip.localAddress | ||||
|         , port: 65080 | ||||
|         , headers: { | ||||
|             Host: 'daplie.invalid' | ||||
|           } | ||||
|         }); | ||||
|       })); | ||||
|     })); | ||||
|   } | ||||
| 
 | ||||
|   return PromiseA.all(promises).then(function (results) { | ||||
|     if (args.debug) { | ||||
|       console.log('[HP] all done'); | ||||
|       console.log(results); | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
| @ -19,14 +19,14 @@ module.exports.create = function (opts) { | ||||
|   (opts.plainPorts||[]).forEach(function (plainPort) { | ||||
|     var plainServer = http.createServer(); | ||||
|     plainServer.__plainPort = plainPort; | ||||
|     http.on('request', app); | ||||
|     plainServer.on('request', app); | ||||
|     results.plainServers.push(plainServer); | ||||
|   }); | ||||
| 
 | ||||
|   (opts.tlsPorts||[]).forEach(function (tlsPort) { | ||||
|     var tlsServer = https.createServer(httpsOptions); | ||||
|     tlsServer.__tlsPort = tlsPort; | ||||
|     http.on('request', app); | ||||
|     tlsServer.on('request', app); | ||||
|     results.tlsServers.push(tlsServer); | ||||
|   }); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										42
									
								
								lib/request.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								lib/request.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| var PromiseA = require('bluebird'); | ||||
| var https = PromiseA.promisifyAll(require('https')); | ||||
| var http = PromiseA.promisifyAll(require('http')); | ||||
| 
 | ||||
| function requestAsync(opts) { | ||||
|   return new PromiseA(function (resolve, reject) { | ||||
|     var httpr = (false === opts.secure) ? http : https; | ||||
| 
 | ||||
|     var req = httpr.request(opts, function (res) { | ||||
|       var data = ''; | ||||
| 
 | ||||
|       res.on('error', function (err) { | ||||
|         if (opts.debug) { | ||||
|           console.error('[Error] HP: bad request:'); | ||||
|           console.error(err); | ||||
|         } | ||||
|         reject(err); | ||||
|       }); | ||||
|       res.on('data', function (chunk) { | ||||
|         if (opts.debug > 2) { | ||||
|           console.log('HP: request chunk:'); | ||||
|           console.log(chunk); | ||||
|         } | ||||
|         data += chunk.toString('utf8'); | ||||
|       }); | ||||
|       res.on('end', function () { | ||||
|         if (opts.debug > 2) { | ||||
|           console.log('HP: request complete:'); | ||||
|           console.log(data); | ||||
|         } | ||||
|         resolve(data); | ||||
|       }); | ||||
|     }); | ||||
| 
 | ||||
|     req.on('error', reject); | ||||
|     req.end(); | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| module.exports = requestAsync; | ||||
| @ -9,7 +9,13 @@ | ||||
|   "directories": { | ||||
|     "example": "examples" | ||||
|   }, | ||||
|   "dependencies": {}, | ||||
|   "dependencies": { | ||||
|     "bluebird": "^3.1.1", | ||||
|     "express": "^4.13.3", | ||||
|     "localhost.daplie.com-certificates": "^1.1.2", | ||||
|     "request": "^2.67.0", | ||||
|     "scmp": "^1.0.0" | ||||
|   }, | ||||
|   "devDependencies": {}, | ||||
|   "scripts": { | ||||
|     "test": "echo \"Error: no test specified\" && exit 1" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user