summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Geisendörfer <felix@debuggable.com>2010-05-17 22:42:24 -0400
committerRyan Dahl <ry@tinyclouds.org>2010-05-18 01:04:39 -0700
commitf987ecf45be6f5c7c18d5cebd38be0b411648140 (patch)
treee198cc53870d28d7db909d3f73f70abb1a8ac991
parented5f1162fae2303a324017a98b247728dbe4718e (diff)
downloadnode-new-f987ecf45be6f5c7c18d5cebd38be0b411648140.tar.gz
Use Utf8Stream for http Streams with utf8 encoding
-rw-r--r--lib/http.js12
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 () {