|
- /*
- * 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)
- : {};
- }
- };
|