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