60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var net = require('net');
 | |
| var tls = require('tls');
 | |
| var http = require('http');
 | |
| var https = require('https');
 | |
| var sni = require('sni');
 | |
| 
 | |
| var http80 = http.createServer(function (req, res) {
 | |
|   res.end('Happy Day!');
 | |
| });
 | |
| 
 | |
| var tcp80 = net.createServer(function (client) {
 | |
|   http80.emit('connection', client);
 | |
| });
 | |
| 
 | |
| tcp80.listen(80, function () {
 | |
|   console.log('listening on 80');
 | |
| });
 | |
| 
 | |
| var tlsOpts = require('localhost.daplie.com-certificates').merge({});
 | |
| var https443 = https.createServer(tlsOpts, function (req, res) {
 | |
|   res.end('Happy Encrypted Day!');
 | |
| });
 | |
| 
 | |
| var tls443 = tls.createServer(tlsOpts, function (socket) {
 | |
|   socket.on('data', function (chunk) {
 | |
|     console.log('chunk', chunk.toString());
 | |
|   });
 | |
| });
 | |
| 
 | |
| var tcp443 = net.createServer(function (client) {
 | |
|   //tls443.emit('connection', client); // no go
 | |
|   //return;
 | |
| 
 | |
|   client.once('data', function (chunk) {
 | |
|     var servername = sni(chunk);
 | |
| 
 | |
|     console.log('servername:', servername);
 | |
| 
 | |
|     //client.push(chunk);
 | |
| 
 | |
|     https443.emit('connection', client);
 | |
|     //tls443.emit('connection', client); // no go
 | |
|     //client.pause();
 | |
|     process.nextTick(function () {
 | |
|       //client.emit('data', chunk);
 | |
|       client.push(chunk);
 | |
|       client.emit('readable', chunk);
 | |
|       //client.resume();
 | |
|     });
 | |
| 
 | |
|     //client.resume();
 | |
|   });
 | |
| });
 | |
| 
 | |
| tcp443.listen(443, function () {
 | |
|   console.log('listening on 443');
 | |
| });
 |