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');
|
|
});
|