/* * 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'), HttpStream = require('./http-stream'); var RequestStream = module.exports = function (options) { options = options || {}; HttpStream.call(this, options); this.on('pipe', this.pipeRequest); this.request = options.request; }; util.inherits(RequestStream, HttpStream); // // ### function pipeRequest (source) // #### @source {ServerRequest|HttpStream} Source stream piping to this instance // Pipes additional HTTP request 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? // RequestStream.prototype.pipeRequest = function (source) { this.url = this.originalUrl = source.url; this.method = source.method; this.httpVersion = source.httpVersion; this.httpVersionMajor = source.httpVersionMajor; this.httpVersionMinor = source.httpVersionMinor; this.setEncoding = source.setEncoding; this.connection = source.connection; this.socket = source.socket; if (source.query) { this.query = source.query; } else { this.query = ~source.url.indexOf('?') ? qs.parse(url.parse(source.url).query) : {}; } }; // http.serverRequest methods ['setEncoding'].forEach(function (method) { RequestStream.prototype[method] = function () { return this.request[method].apply(this.request, arguments); }; });