forked from coolaj86/goldilocks.js
		
	moved the handling of udp stuff to a separate file
This commit is contained in:
		
							parent
							
								
									b44ad7b17a
								
							
						
					
					
						commit
						5534ba2ef1
					
				@ -159,27 +159,6 @@ module.exports.create = function (deps, config) {
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function udpHandler(port, msg) {
 | 
			
		||||
    if (!Array.isArray(config.udp.modules)) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    var socket = require('dgram').createSocket('udp4');
 | 
			
		||||
    config.udp.modules.forEach(function (mod) {
 | 
			
		||||
      if (mod.type !== 'forward') {
 | 
			
		||||
        console.warn('found bad DNS module', mod);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      if (mod.ports.indexOf(port) < 0) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var dest = require('./domain-utils').separatePort(mod.address || '');
 | 
			
		||||
      dest.port = dest.port || mod.port;
 | 
			
		||||
      dest.host = dest.host || mod.host || 'localhost';
 | 
			
		||||
      socket.send(msg, dest.port, dest.host);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function createTcpForwarder(mod) {
 | 
			
		||||
    var dest = require('./domain-utils').separatePort(mod.address || '');
 | 
			
		||||
    dest.port = dest.port || mod.port;
 | 
			
		||||
@ -289,12 +268,6 @@ module.exports.create = function (deps, config) {
 | 
			
		||||
    listenPromises.push(listeners.tcp.add(port, tcpHandler));
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  if (config.udp.bind) {
 | 
			
		||||
    config.udp.bind.forEach(function (port) {
 | 
			
		||||
      listenPromises.push(listeners.udp.add(port, udpHandler.bind(port)));
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!config.mdns.disabled) {
 | 
			
		||||
    require('./mdns').start(deps, config, portList[0]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										57
									
								
								lib/udp.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								lib/udp.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
module.exports.create = function (deps, config) {
 | 
			
		||||
  var listeners = require('./servers').listeners.udp;
 | 
			
		||||
 | 
			
		||||
  function packetHandler(port, msg) {
 | 
			
		||||
    if (!Array.isArray(config.udp.modules)) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var socket = require('dgram').createSocket('udp4');
 | 
			
		||||
    config.udp.modules.forEach(function (mod) {
 | 
			
		||||
      if (mod.type !== 'forward') {
 | 
			
		||||
        // To avoid logging bad modules every time we get a UDP packet we assign a warned
 | 
			
		||||
        // property to the module (non-enumerable so it won't be saved to the config or
 | 
			
		||||
        // show up in the API).
 | 
			
		||||
        if (!mod.warned) {
 | 
			
		||||
          console.warn('found bad DNS module', mod);
 | 
			
		||||
          Object.defineProperty(mod, 'warned', {value: true, enumerable: false});
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      if (mod.ports.indexOf(port) < 0) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var dest = require('./domain-utils').separatePort(mod.address || '');
 | 
			
		||||
      dest.port = dest.port || mod.port;
 | 
			
		||||
      dest.host = dest.host || mod.host || 'localhost';
 | 
			
		||||
      socket.send(msg, dest.port, dest.host);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function updateListeners() {
 | 
			
		||||
    var current = listeners.list();
 | 
			
		||||
    var wanted = config.udp.bind;
 | 
			
		||||
 | 
			
		||||
    if (!Array.isArray(wanted)) { wanted = []; }
 | 
			
		||||
    wanted = wanted.map(Number).filter((port) => port > 0 && port < 65356);
 | 
			
		||||
 | 
			
		||||
    current.forEach(function (port) {
 | 
			
		||||
      if (wanted.indexOf(port) < 0) {
 | 
			
		||||
        listeners.close(port);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    wanted.forEach(function (port) {
 | 
			
		||||
      if (current.indexOf(port) < 0) {
 | 
			
		||||
        listeners.add(port, packetHandler.bind(port));
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  updateListeners();
 | 
			
		||||
  return {
 | 
			
		||||
    updateConf: updateListeners
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
@ -51,6 +51,7 @@ function create(conf) {
 | 
			
		||||
  , proxy:    require('./proxy-conn').create(deps, conf)
 | 
			
		||||
  , socks5:   require('./socks5-server').create(deps, conf)
 | 
			
		||||
  , ddns:     require('./ddns').create(deps, conf)
 | 
			
		||||
  , udp:      require('./udp').create(deps, conf)
 | 
			
		||||
  };
 | 
			
		||||
  Object.assign(deps, modules);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user