48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var net = require('net');
 | |
| var tls = require('tls');
 | |
| var http = require('http');
 | |
| var sni = require('sni');
 | |
| var https = require('https');
 | |
| var tlsOpts = require('localhost.daplie.com-certificates').merge({});
 | |
| 
 | |
| var http80 = http.createServer(function (req, res) {
 | |
|   res.end('Hello, World!');
 | |
| });
 | |
| 
 | |
| var https443 = https.createServer(tlsOpts, function (req, res) {
 | |
|   res.end('Hello, Encrypted World!');
 | |
| });
 | |
| 
 | |
| var tcp3000 = net.createServer(function (socket) {
 | |
| 
 | |
|   socket.once('data', function (chunk) {
 | |
| 
 | |
|     if (/http\/1/i.test(chunk.toString())) {
 | |
|       console.log("looks like http, continue");
 | |
|       http80.emit('connection', socket);
 | |
|     } else {
 | |
|       console.log("doesn't look like http, try tls");
 | |
|       https443.emit('connection', socket);
 | |
|       var tlsSocket = new tls.TLSSocket(socket, { secureContext: tls.createSecureContext(tlsOpts) });
 | |
|       tlsSocket.on('data', function (chunk) {
 | |
|         console.log('chunk', chunk);
 | |
|       });
 | |
|       socket.emit('connect');
 | |
|       //http80.emit('connection', socket);
 | |
|     }
 | |
| 
 | |
|     socket.pause();
 | |
|     process.nextTick(function () {
 | |
|       socket.emit('data', chunk);
 | |
|       socket.resume();
 | |
|     });
 | |
|   });
 | |
| 
 | |
| });
 | |
| 
 | |
| tcp3000.listen(3000, function () {
 | |
|   console.log('listening on 3000');
 | |
| });
 |