holepunch.js/lib/loopback-listener.js

64 lines
1.7 KiB
JavaScript
Raw Normal View History

2015-12-29 18:32:37 +00:00
'use strict';
var http = require('http');
var https = require('https');
var express = require('express');
var middleware = module.exports.middleware = require('./middleware');
module.exports.create = function (opts) {
var httpsOptions = opts.httpsOptions || require('localhost.daplie.com-certificates');
var results = {
plainServers: []
, tlsServers: []
};
var app = express();
app.use('/', middleware(opts));
(opts.plainPorts||[]).forEach(function (plainPort) {
var plainServer = http.createServer();
plainServer.__plainPort = plainPort;
2015-12-30 03:36:14 +00:00
plainServer.on('request', app);
2015-12-29 18:32:37 +00:00
results.plainServers.push(plainServer);
});
(opts.tlsPorts||[]).forEach(function (tlsPort) {
var tlsServer = https.createServer(httpsOptions);
tlsServer.__tlsPort = tlsPort;
2015-12-30 03:36:14 +00:00
tlsServer.on('request', app);
2015-12-29 18:32:37 +00:00
results.tlsServers.push(tlsServer);
});
function onListen() {
/*jshint validthis: true*/
var server = this;
var addr = server.address();
var proto = 'honorCipherOrder' in server ? 'https' : 'http';
console.info('Listening on ' + proto + '://' + addr.address + ':' + addr.port);
}
process.nextTick(function () {
results.plainServers.forEach(function (plainServer) {
plainServer.listen(
2015-12-30 03:42:44 +00:00
plainServer.__plainPort.internal || plainServer.__plainPort.port
2015-12-29 18:32:37 +00:00
, plainServer.__plainPort.address || '0.0.0.0'
, onListen
);
});
results.tlsServers.forEach(function (tlsServer) {
tlsServer.listen(
2015-12-30 03:42:44 +00:00
tlsServer.__tlsPort.internal || tlsServer.__tlsPort.port
2015-12-29 18:32:37 +00:00
, tlsServer.__tlsPort.address || '0.0.0.0'
, onListen
);
});
});
2015-12-30 06:35:21 +00:00
results.key = opts.key;
results.value = opts.value;
2015-12-29 18:32:37 +00:00
return results;
};