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