From 16589e65f69e617f96775f4b518dc05313276018 Mon Sep 17 00:00:00 2001 From: tigerbot Date: Mon, 30 Oct 2017 15:57:18 -0600 Subject: [PATCH] moved most things related to TCP connections to a tcp directory --- lib/{modules => tcp}/http.js | 8 ++++---- lib/{goldilocks.js => tcp/index.js} | 29 +++++++++++------------------ lib/{ => tcp}/proxy-conn.js | 8 ++++++-- lib/{modules => tcp}/tls.js | 6 +++--- lib/worker.js | 3 +-- 5 files changed, 25 insertions(+), 29 deletions(-) rename lib/{modules => tcp}/http.js (98%) rename lib/{goldilocks.js => tcp/index.js} (94%) rename lib/{ => tcp}/proxy-conn.js (92%) rename lib/{modules => tcp}/tls.js (98%) diff --git a/lib/modules/http.js b/lib/tcp/http.js similarity index 98% rename from lib/modules/http.js rename to lib/tcp/http.js index 13bb9f6..3026ad9 100644 --- a/lib/modules/http.js +++ b/lib/tcp/http.js @@ -1,6 +1,6 @@ 'use strict'; -module.exports.create = function (deps, conf, greenlockMiddleware) { +module.exports.create = function (deps, conf, tcpMods) { var PromiseA = require('bluebird'); var statAsync = PromiseA.promisify(require('fs').stat); var domainMatches = require('../domain-utils').match; @@ -172,7 +172,7 @@ module.exports.create = function (deps, conf, greenlockMiddleware) { } if (!acmeServer) { - acmeServer = require('http').createServer(greenlockMiddleware); + acmeServer = require('http').createServer(tcpMods.tls.middleware); } return emitConnection(acmeServer, conn, opts); } @@ -241,7 +241,7 @@ module.exports.create = function (deps, conf, greenlockMiddleware) { res.statusCode = 502; res.setHeader('Connection', 'close'); res.setHeader('Content-Type', 'text/html'); - res.end(require('../proxy-conn').getRespBody(err, conf.debug)); + res.end(tcpMods.proxy.getRespBody(err, conf.debug)); }); proxyServer = http.createServer(function (req, res) { @@ -292,7 +292,7 @@ module.exports.create = function (deps, conf, greenlockMiddleware) { newConnOpts.remoteAddress = opts.address || conn.remoteAddress; newConnOpts.remotePort = opts.port || conn.remotePort; - deps.proxy(conn, newConnOpts, opts.firstChunk); + tcpMods.proxy(conn, newConnOpts, opts.firstChunk); } function checkProxy(mod, conn, opts, headers) { diff --git a/lib/goldilocks.js b/lib/tcp/index.js similarity index 94% rename from lib/goldilocks.js rename to lib/tcp/index.js index 43a70b1..6dc01a7 100644 --- a/lib/goldilocks.js +++ b/lib/tcp/index.js @@ -3,10 +3,8 @@ module.exports.create = function (deps, config) { console.log('config', config); - //var PromiseA = global.Promise; - var PromiseA = require('bluebird'); - var listeners = require('./servers').listeners.tcp; - var domainUtils = require('./domain-utils'); + var listeners = require('../servers').listeners.tcp; + var domainUtils = require('../domain-utils'); var modules; var addrProperties = [ @@ -24,13 +22,6 @@ module.exports.create = function (deps, config) { }); } - function loadModules() { - modules = {}; - - modules.tls = require('./modules/tls').create(deps, config, tcpHandler); - modules.http = require('./modules/http').create(deps, config, modules.tls.middleware); - } - function proxy(mod, conn, opts) { // First thing we need to add to the connection options is where to proxy the connection to var newConnOpts = domainUtils.separatePort(mod.address || ''); @@ -44,7 +35,7 @@ module.exports.create = function (deps, config) { newConnOpts['_' + name] = opts[name] || opts['_'+name] || conn[name] || conn['_'+name]; }); - deps.proxy(conn, newConnOpts); + modules.proxy(conn, newConnOpts); return true; } @@ -91,10 +82,6 @@ module.exports.create = function (deps, config) { // opts = { servername, encrypted, peek, data, remoteAddress, remotePort } function peek(conn, firstChunk, opts) { - if (!modules) { - loadModules(); - } - opts.firstChunk = firstChunk; conn.__opts = opts; // TODO port/service-based routing can do here @@ -172,6 +159,12 @@ module.exports.create = function (deps, config) { }); } + modules = {}; + modules.tcpHandler = tcpHandler; + modules.proxy = require('./proxy-conn').create(deps, config); + modules.tls = require('./tls').create(deps, config, modules); + modules.http = require('./http').create(deps, config, modules); + deps.tunnel = deps.tunnel || {}; deps.tunnel.net = { createConnection: function (opts, cb) { @@ -235,8 +228,8 @@ module.exports.create = function (deps, config) { return writer; } }; - deps.tunnelClients = require('./tunnel-client-manager').create(deps, config); - deps.tunnelServer = require('./tunnel-server-manager').create(deps, config); + deps.tunnelClients = require('../tunnel-client-manager').create(deps, config); + deps.tunnelServer = require('../tunnel-server-manager').create(deps, config); function updateListeners() { var current = listeners.list(); diff --git a/lib/proxy-conn.js b/lib/tcp/proxy-conn.js similarity index 92% rename from lib/proxy-conn.js rename to lib/tcp/proxy-conn.js index 625a864..db020d6 100644 --- a/lib/proxy-conn.js +++ b/lib/tcp/proxy-conn.js @@ -32,7 +32,7 @@ module.exports.getRespBody = getRespBody; module.exports.sendBadGateway = sendBadGateway; module.exports.create = function (deps, config) { - return function proxy(conn, newConnOpts, firstChunk, decrypt) { + function proxy(conn, newConnOpts, firstChunk, decrypt) { var connected = false; newConnOpts.allowHalfOpen = true; var newConn = deps.net.createConnection(newConnOpts, function () { @@ -73,5 +73,9 @@ module.exports.create = function (deps, config) { newConn.on('close', function () { conn.destroy(); }); - }; + } + + proxy.getRespBody = getRespBody; + proxy.sendBadGateway = sendBadGateway; + return proxy; }; diff --git a/lib/modules/tls.js b/lib/tcp/tls.js similarity index 98% rename from lib/modules/tls.js rename to lib/tcp/tls.js index 63d4d38..e75355c 100644 --- a/lib/modules/tls.js +++ b/lib/tcp/tls.js @@ -1,6 +1,6 @@ 'use strict'; -module.exports.create = function (deps, config, netHandler) { +module.exports.create = function (deps, config, tcpMods) { var path = require('path'); var tls = require('tls'); var parseSni = require('sni'); @@ -208,7 +208,7 @@ module.exports.create = function (deps, config, netHandler) { var terminateServer = tls.createServer(terminatorOpts, function (socket) { console.log('(post-terminated) tls connection, addr:', extractSocketProp(socket, 'remoteAddress')); - netHandler(socket, { + tcpMods.tcpHandler(socket, { servername: socket.servername , encrypted: true // remoteAddress... ugh... https://github.com/nodejs/node/issues/8854 @@ -232,7 +232,7 @@ module.exports.create = function (deps, config, netHandler) { newConnOpts.remoteAddress = opts.address || extractSocketProp(socket, 'remoteAddress'); newConnOpts.remotePort = opts.port || extractSocketProp(socket, 'remotePort'); - deps.proxy(socket, newConnOpts, opts.firstChunk, function () { + tcpMods.proxy(socket, newConnOpts, opts.firstChunk, function () { // This function is called in the event of a connection error and should decrypt // the socket so the proxy module can send a 502 HTTP response. var tlsOpts = localhostCerts.mergeTlsOptions('localhost.daplie.me', {isServer: true}); diff --git a/lib/worker.js b/lib/worker.js index 5b05f87..956674e 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -48,12 +48,11 @@ function create(conf) { modules = { storage: require('./storage').create(deps, conf) - , proxy: require('./proxy-conn').create(deps, conf) , socks5: require('./socks5-server').create(deps, conf) , ddns: require('./ddns').create(deps, conf) , mdns: require('./mdns').create(deps, conf) , udp: require('./udp').create(deps, conf) - , tcp: require('./goldilocks').create(deps, conf) + , tcp: require('./tcp').create(deps, conf) }; Object.assign(deps, modules);