52 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var net = require('net'); | ||
|  | var tls = require('tls'); | ||
|  | 
 | ||
|  | function listenForConns(opts) { | ||
|  |   var server = net.createServer(function (c) { | ||
|  |     var sclient = tls.connect({ | ||
|  |       servername: opts.remoteAddr, host: opts.remoteAddr, port: opts.remotePort | ||
|  |     , rejectUnauthorized: opts.rejectUnauthorized | ||
|  |     }, function () { | ||
|  |       console.info('[connect] ' + sclient.localAddress.replace('::1', 'localhost') + ":" + sclient.localPort | ||
|  |         + " => " + opts.remoteAddr + ":" + opts.remotePort); | ||
|  |       c.pipe(sclient); | ||
|  |       sclient.pipe(c); | ||
|  |     }); | ||
|  |     sclient.on('error', function (err) { | ||
|  |       console.error('[error] (remote) ' + err.toString()); | ||
|  |     }); | ||
|  |     c.on('error', function (err) { | ||
|  |       console.error('[error] (local) ' + err.toString()); | ||
|  |     }); | ||
|  |   }); | ||
|  |   server.on('error', function (err) { | ||
|  |     console.error('[error] ' + err.toString()); | ||
|  |   }); | ||
|  |   server.listen({ | ||
|  |     host: opts.localAddress | ||
|  |   , port: opts.localPort | ||
|  |   }, function () { | ||
|  |     console.info('[listening] ' + opts.remoteAddr + ":" + opts.remotePort | ||
|  |       + " <= " + opts.localAddress + ":" + opts.localPort); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | function testConn(opts) { | ||
|  |   // Test connection first
 | ||
|  |   var tlsSock = tls.connect({ | ||
|  |     servername: opts.remoteAddr, host: opts.remoteAddr, port: opts.remotePort | ||
|  |   , rejectUnauthorized: opts.rejectUnauthorized | ||
|  |   }, function () { | ||
|  |     tlsSock.end(); | ||
|  |     listenForConns(opts); | ||
|  |   }); | ||
|  |   tlsSock.on('error', function (err) { | ||
|  |     console.warn("[warn] '" + opts.remoteAddr + ":" + opts.remotePort + "' may not be accepting connections: ", err.toString(), '\n'); | ||
|  |     listenForConns(opts); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = testConn; |