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