tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

server.js (2042B)


      1 var fs = require('fs');
      2 var path = require('path');
      3 var http2 = require('..');
      4 
      5 // We cache one file to be able to do simple performance tests without waiting for the disk
      6 var cachedFile = fs.readFileSync(path.join(__dirname, './server.js'));
      7 var cachedUrl = '/server.js';
      8 
      9 // The callback to handle requests
     10 function onRequest(request, response) {
     11  var filename = path.join(__dirname, request.url);
     12 
     13  // Serving server.js from cache. Useful for microbenchmarks.
     14  if (request.url === cachedUrl) {
     15    if (response.push) {
     16      // Also push down the client js, since it's possible if the requester wants
     17      // one, they want both.
     18      var push = response.push('/client.js');
     19      push.writeHead(200);
     20      fs.createReadStream(path.join(__dirname, '/client.js')).pipe(push);
     21    }
     22    response.end(cachedFile);
     23  }
     24 
     25  // Reading file from disk if it exists and is safe.
     26  else if ((filename.indexOf(__dirname) === 0) && fs.existsSync(filename) && fs.statSync(filename).isFile()) {
     27    response.writeHead(200);
     28    var fileStream = fs.createReadStream(filename);
     29    fileStream.pipe(response);
     30    fileStream.on('finish',response.end);
     31  }
     32 
     33  // Example for testing large (boundary-sized) frames.
     34  else if (request.url === "/largeframe") {
     35    response.writeHead(200);
     36    var body = 'a';
     37    for (var i = 0; i < 14; i++) {
     38      body += body;
     39    }
     40    body = body + 'a';
     41    response.end(body);
     42  }
     43 
     44  // Otherwise responding with 404.
     45  else {
     46    response.writeHead(404);
     47    response.end();
     48  }
     49 }
     50 
     51 // Creating a bunyan logger (optional)
     52 var log = require('../test/util').createLogger('server');
     53 
     54 // Creating the server in plain or TLS mode (TLS mode is the default)
     55 var server;
     56 if (process.env.HTTP2_PLAIN) {
     57  server = http2.raw.createServer({
     58    log: log
     59  }, onRequest);
     60 } else {
     61  server = http2.createServer({
     62    log: log,
     63    key: fs.readFileSync(path.join(__dirname, '/localhost.key')),
     64    cert: fs.readFileSync(path.join(__dirname, '/localhost.crt'))
     65  }, onRequest);
     66 }
     67 server.listen(process.env.HTTP2_PORT || 8080);