89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var net = require('net');
 | |
| var tls = require('tls');
 | |
| var http = require('http');
 | |
| var tlsOpts = require('localhost.daplie.com-certificates').merge({});
 | |
| var Duplex = require('stream').Duplex;
 | |
| var httpServer = http.createServer(function (req, res) {
 | |
|   res.end('Hello, World!');
 | |
| });
 | |
| var tcp3000 = net.createServer();
 | |
| 
 | |
| tcp3000.listen(3000, function () {
 | |
|   console.log('listening on 3000');
 | |
| });
 | |
| 
 | |
| 
 | |
| var tls3000 = tls.createServer(tlsOpts, function (tlsSocket) {
 | |
|   httpServer.emit('connection', tlsSocket);
 | |
|   /*
 | |
|   tlsSocket.on('data', function (chunk) {
 | |
|     console.log('chunk', chunk.byteLength);
 | |
|   });
 | |
|   */
 | |
| });
 | |
| 
 | |
| 
 | |
| tcp3000.on('connection', function (socket) {
 | |
|   // this works when I put it here, but I don't know if it's tls yet here
 | |
|   // httpsServer.emit('connection', socket);
 | |
|   //tls3000.emit('connection', socket);
 | |
| 
 | |
|   //var tlsSocket = new tls.TLSSocket(socket, { secureContext: tls.createSecureContext(tlsOpts) });
 | |
|   //tlsSocket.on('data', function (chunk) {
 | |
|   //  console.log('dummy', chunk.byteLength);
 | |
|   //});
 | |
| 
 | |
|   //return;
 | |
|   socket.once('data', function (chunk) {
 | |
|     if (/http\/1/i.test(chunk.toString())) {
 | |
| 
 | |
|       console.log("looks like http, continue");
 | |
| 
 | |
|       // this works as expected
 | |
|       httpServer.emit('connection', socket);
 | |
| 
 | |
|     } else {
 | |
| 
 | |
|       console.log("doesn't look like http, try tls");
 | |
| 
 | |
|       // none of these methods work:
 | |
|       // httpsServer.emit('connection', socket);  // this didn't work
 | |
|       // tlsServer.emit('connection', socket);    // this didn't work either
 | |
|       var myDuplex = new Duplex();
 | |
|       myDuplex._write = function (chunk, encoding, cb) {
 | |
|         console.log('_write', chunk.byteLength);
 | |
|         socket.write(chunk, encoding);
 | |
|         cb();
 | |
|       };
 | |
|       myDuplex._read = function (size) {
 | |
|         console.log('_read');
 | |
|         var x = socket.read(size);
 | |
|         if (x) {
 | |
|           console.log('_read', size);
 | |
|           this.push(x);
 | |
|         }
 | |
|       };
 | |
|       socket.on('data', function (chunk) {
 | |
|         console.log('socket data', chunk.byteLength);
 | |
|         myDuplex.push(chunk);
 | |
|       });
 | |
| 
 | |
|       tls3000.emit('connection', myDuplex);
 | |
|       //var tlsSocket = new tls.TLSSocket(myDuplex, { secureContext: tls.createSecureContext(tlsOpts) });
 | |
|       /*
 | |
|       var tlsSocket = new tls.TLSSocket(socket, { secureContext: tls.createSecureContext(tlsOpts) });
 | |
|       tlsSocket.on('data', function (chunk) {
 | |
|         console.log('tls chunk', chunk.byteLength);
 | |
|       });
 | |
|       */
 | |
| 
 | |
| 
 | |
|     }
 | |
| 
 | |
|     socket.unshift(chunk);
 | |
|   });
 | |
| 
 | |
| });
 |