diff options
Diffstat (limited to 'sandbox/hyper/influx/http')
| -rwxr-xr-x | sandbox/hyper/influx/http/index.js | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/sandbox/hyper/influx/http/index.js b/sandbox/hyper/influx/http/index.js new file mode 100755 index 00000000..346dde3b --- /dev/null +++ b/sandbox/hyper/influx/http/index.js @@ -0,0 +1,57 @@ +#! /usr/bin/env node + +name = '//hyper/influx/http' +port = process.env.port || 1337 +host = process.env.host || '127.0.0.1' + + +console.info(name); + +fs = require('fs'); +path = require('path'); +http = require('http'); + +fifo_path = path.resolve(process.argv[2] || path.join(process.cwd(), '0')); + +// check configuration +try { +  (function (stat) { +    if ((stat.mode & 0010000) === 0) { +      throw { code: 'E_not_fifo', path: fifo_path }; +    }; +  })(fs.statSync(fifo_path)); +} catch (exn) { +  console.error(exn); +  process.exit(23); +}; + +process.stdin.destroy(); +fifo = fs.createWriteStream(fifo_path); +fifo.on('open', function (fd) { +  console.info('fifo open as fd', fd); + +  http.createServer(function (req, res) { +    var rhost = req.connection.remoteAddress; +    var rport = req.connection.remotePort; +    var id = rhost + ':' + rport; +   +    console.info(id, 'request', req.method, req.url); + +    req.on('data', function (data) { +      console.info(id, 'data', data.length); +    }); + +    req.on('end', function (data) { +      console.info(id, 'end'); +      res.writeHead(202, { +        'Content-Length': 0, +        'Connection': 'close' +      }); +      res.end(); +    }); + +    req.pipe(fifo, { end: false }); +  }).listen(port, host, function () { +    console.info('server running at http://' + host + ':' + port + '/'); +  }); +}); | 
