diff options
author | Felix Geisendörfer <felix@debuggable.com> | 2010-05-17 22:42:24 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2010-05-18 01:04:39 -0700 |
commit | f987ecf45be6f5c7c18d5cebd38be0b411648140 (patch) | |
tree | e198cc53870d28d7db909d3f73f70abb1a8ac991 | |
parent | ed5f1162fae2303a324017a98b247728dbe4718e (diff) | |
download | node-new-f987ecf45be6f5c7c18d5cebd38be0b411648140.tar.gz |
Use Utf8Stream for http Streams with utf8 encoding
-rw-r--r-- | lib/http.js | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/http.js b/lib/http.js index 352a05ed3e..0030ddcc0b 100644 --- a/lib/http.js +++ b/lib/http.js @@ -9,6 +9,7 @@ function debug (x) { var sys = require('sys'); var net = require('net'); +var Utf8Stream = require('utf8_stream').Utf8Stream; var events = require('events'); var Buffer = require('buffer').Buffer; @@ -91,6 +92,8 @@ var parsers = new FreeList('parsers', 1000, function () { var enc = parser.incoming._encoding; if (!enc) { parser.incoming.emit('data', b.slice(start, start+len)); + } else if (this._decoder) { + this._decoder.write(pool.slice(start, end)); } else { var string = b.toString(enc, start, start+len); parser.incoming.emit('data', string); @@ -198,6 +201,15 @@ IncomingMessage.prototype.setBodyEncoding = function (enc) { IncomingMessage.prototype.setEncoding = function (enc) { // TODO check values, error out on bad, and deprecation message? this._encoding = enc.toLowerCase(); + if (this._encoding == 'utf-8' || this._encoding == 'utf8') { + this._decoder = new Utf8Stream(); + this._decoder.onString = function(str) { + this.emit('data', str); + }; + } else if (this._decoder) { + delete this._decoder; + } + }; IncomingMessage.prototype.pause = function () { |