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) {
|
function createTcpForwarder(mod) {
|
||||||
var dest = require('./domain-utils').separatePort(mod.address || '');
|
var dest = require('./domain-utils').separatePort(mod.address || '');
|
||||||
dest.port = dest.port || mod.port;
|
dest.port = dest.port || mod.port;
|
||||||
|
@ -289,12 +268,6 @@ module.exports.create = function (deps, config) {
|
||||||
listenPromises.push(listeners.tcp.add(port, tcpHandler));
|
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) {
|
if (!config.mdns.disabled) {
|
||||||
require('./mdns').start(deps, config, portList[0]);
|
require('./mdns').start(deps, config, portList[0]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
, proxy: require('./proxy-conn').create(deps, conf)
|
||||||
, socks5: require('./socks5-server').create(deps, conf)
|
, socks5: require('./socks5-server').create(deps, conf)
|
||||||
, ddns: require('./ddns').create(deps, conf)
|
, ddns: require('./ddns').create(deps, conf)
|
||||||
|
, udp: require('./udp').create(deps, conf)
|
||||||
};
|
};
|
||||||
Object.assign(deps, modules);
|
Object.assign(deps, modules);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue