Merge branch 'master' into commercial
This commit is contained in:
		
						commit
						63065d6d65
					
				
							
								
								
									
										37
									
								
								lib/relay.js
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								lib/relay.js
									
									
									
									
									
								
							@ -4,6 +4,7 @@ var url = require('url');
 | 
				
			|||||||
var PromiseA = require('bluebird');
 | 
					var PromiseA = require('bluebird');
 | 
				
			||||||
var jwt = require('jsonwebtoken');
 | 
					var jwt = require('jsonwebtoken');
 | 
				
			||||||
var Packer = require('proxy-packer');
 | 
					var Packer = require('proxy-packer');
 | 
				
			||||||
 | 
					var portServers = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function timeoutPromise(duration) {
 | 
					function timeoutPromise(duration) {
 | 
				
			||||||
  return new PromiseA(function (resolve) {
 | 
					  return new PromiseA(function (resolve) {
 | 
				
			||||||
@ -258,9 +259,7 @@ module.exports.create = function (state) {
 | 
				
			|||||||
          Devices.add(state.deviceLists, domainname, token);
 | 
					          Devices.add(state.deviceLists, domainname, token);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function onDynTcpReady() {
 | 
					        function onDynTcpReadyHelper(serviceport) {
 | 
				
			||||||
          var serviceport = this.address().port;
 | 
					 | 
				
			||||||
          console.info('[DynTcpConn] Port', serviceport, 'now open for', token.deviceId);
 | 
					 | 
				
			||||||
          //token.dynamicPorts.push(serviceport);
 | 
					          //token.dynamicPorts.push(serviceport);
 | 
				
			||||||
          Devices.add(state.deviceLists, serviceport, token);
 | 
					          Devices.add(state.deviceLists, serviceport, token);
 | 
				
			||||||
          //var hri = require('human-readable-ids').hri;
 | 
					          //var hri = require('human-readable-ids').hri;
 | 
				
			||||||
@ -300,16 +299,28 @@ module.exports.create = function (state) {
 | 
				
			|||||||
        //token.dynamicNames = [];
 | 
					        //token.dynamicNames = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var onePortForNow = parseInt(token.ports[0], 10) || 0;
 | 
					        var onePortForNow = parseInt(token.ports[0], 10) || 0;
 | 
				
			||||||
        // TODO try again with random port
 | 
					        if (portServers[onePortForNow]) {
 | 
				
			||||||
        try {
 | 
					          //token.ports = [];
 | 
				
			||||||
          token.server = require('net').createServer(onDynTcpConn).listen(onePortForNow, onDynTcpReady);
 | 
					          token.server = portServers[onePortForNow];
 | 
				
			||||||
          token.server.on('error', function (e) {
 | 
					          token.server.on('connection', onDynTcpConn);
 | 
				
			||||||
            console.error("Server Error assigning a dynamic port to a new connection:", e);
 | 
					          onDynTcpReadyHelper(onePortForNow);
 | 
				
			||||||
          });
 | 
					        } else {
 | 
				
			||||||
        } catch(e) {
 | 
					          try {
 | 
				
			||||||
          // what a wonderful problem it will be the day that this bug needs to be fixed
 | 
					            token.server = require('net').createServer(onDynTcpConn).listen(onePortForNow, function () {
 | 
				
			||||||
          // (i.e. there are enough users to run out of ports)
 | 
					              var serviceport = this.address().port;
 | 
				
			||||||
          console.error("Error assigning a dynamic port to a new connection:", e);
 | 
					              portServers[serviceport] = this;
 | 
				
			||||||
 | 
					              console.info('[DynTcpConn] Port', serviceport, 'now open for', token.deviceId);
 | 
				
			||||||
 | 
					              onDynTcpReadyHelper(serviceport);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            token.server.on('error', function (e) {
 | 
				
			||||||
 | 
					              // TODO try again with random port
 | 
				
			||||||
 | 
					              console.error("Server Error assigning a dynamic port to a new connection:", e);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          } catch(e) {
 | 
				
			||||||
 | 
					            // what a wonderful problem it will be the day that this bug needs to be fixed
 | 
				
			||||||
 | 
					            // (i.e. there are enough users to run out of ports)
 | 
				
			||||||
 | 
					            console.error("Error assigning a dynamic port to a new connection:", e);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        remotes[jwtoken] = token;
 | 
					        remotes[jwtoken] = token;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user