| /* |
| * http-stream.js: Idomatic buffered stream which pipes additional HTTP information. |
| * |
| * (C) 2011, Charlie Robbins & the Contributors |
| * MIT LICENSE |
| * |
| */ |
| |
| var url = require('url'), |
| util = require('util'), |
| qs = require('qs'), |
| BufferedStream = require('./buffered-stream'); |
| |
| var HttpStream = module.exports = function (options) { |
| options = options || {}; |
| BufferedStream.call(this, options.limit); |
| |
| if (options.buffer === false) { |
| this.buffer = false; |
| } |
| |
| this.on('pipe', this.pipeState); |
| }; |
| |
| util.inherits(HttpStream, BufferedStream); |
| |
| // |
| // ### function pipeState (source) |
| // #### @source {ServerRequest|HttpStream} Source stream piping to this instance |
| // Pipes additional HTTP metadata from the `source` HTTP stream (either concrete or |
| // abstract) to this instance. e.g. url, headers, query, etc. |
| // |
| // Remark: Is there anything else we wish to pipe? |
| // |
| HttpStream.prototype.pipeState = function (source) { |
| this.headers = source.headers; |
| this.trailers = source.trailers; |
| this.method = source.method; |
| |
| if (source.url) { |
| this.url = this.originalUrl = source.url; |
| } |
| |
| if (source.query) { |
| this.query = source.query; |
| } |
| else if (source.url) { |
| this.query = ~source.url.indexOf('?') |
| ? qs.parse(url.parse(source.url).query) |
| : {}; |
| } |
| }; |