michael@0: var fs = require('fs'); michael@0: var path = require('path'); michael@0: var http2 = require('..'); michael@0: michael@0: var options = process.env.HTTP2_PLAIN ? { michael@0: plain: true michael@0: } : { michael@0: key: fs.readFileSync(path.join(__dirname, '/localhost.key')), michael@0: cert: fs.readFileSync(path.join(__dirname, '/localhost.crt')) michael@0: }; michael@0: michael@0: // Passing bunyan logger (optional) michael@0: options.log = require('../test/util').createLogger('server'); michael@0: michael@0: // We cache one file to be able to do simple performance tests without waiting for the disk michael@0: var cachedFile = fs.readFileSync(path.join(__dirname, './server.js')); michael@0: var cachedUrl = '/server.js'; michael@0: michael@0: // Creating the server michael@0: var server = http2.createServer(options, function(request, response) { michael@0: var filename = path.join(__dirname, request.url); michael@0: michael@0: // Serving server.js from cache. Useful for microbenchmarks. michael@0: if (request.url === cachedUrl) { michael@0: response.end(cachedFile); michael@0: } michael@0: michael@0: // Reading file from disk if it exists and is safe. michael@0: else if ((filename.indexOf(__dirname) === 0) && fs.existsSync(filename) && fs.statSync(filename).isFile()) { michael@0: response.writeHead('200'); michael@0: michael@0: // If they download the certificate, push the private key too, they might need it. michael@0: if (response.push && request.url === '/localhost.crt') { michael@0: var push = response.push('/localhost.key'); michael@0: push.writeHead(200); michael@0: fs.createReadStream(path.join(__dirname, '/localhost.key')).pipe(push); michael@0: } michael@0: michael@0: fs.createReadStream(filename).pipe(response); michael@0: } michael@0: michael@0: // Otherwise responding with 404. michael@0: else { michael@0: response.writeHead('404'); michael@0: response.end(); michael@0: } michael@0: }); michael@0: michael@0: server.listen(process.env.HTTP2_PORT || 8080);