Skip to content

Commit

Permalink
Fixed 'upgrade' event for httpclient
Browse files Browse the repository at this point in the history
onend and ondata was cleaning on parser end
  • Loading branch information
indutny authored and ry committed Sep 23, 2010
1 parent 4d0456f commit 5535aa3
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/http.js
Original file line number Diff line number Diff line change
Expand Up @@ -883,7 +883,7 @@ function Client ( ) {
};
};

self.ondata = function (d, start, end) {
function onData(d, start, end) {
if (!parser) {
throw new Error("parser not initialized prior to Client.ondata call");
}
Expand All @@ -909,6 +909,10 @@ function Client ( ) {

self.addListener("connect", function () {
debug('client connected');

self.ondata = onData;
self.onend = onEnd;

if (this.https) {
this.setSecure(this.credentials);
} else {
Expand All @@ -924,7 +928,7 @@ function Client ( ) {
outgoingFlush(self);
});

self.onend = function () {
function onEnd() {
if (parser) parser.finish();
debug("self got end closing. readyState = " + self.readyState);
self.end();
Expand Down
64 changes: 64 additions & 0 deletions test/simple/test-http-upgrade-client2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
var common = require("../common");
var assert = common.assert
var http = require('http'),
CRLF = '\r\n';

var server = http.createServer();
server.on('upgrade', function(req, socket, head) {
socket.write('HTTP/1.1 101 Ok' + CRLF +
'Connection: Upgrade' + CRLF +
'Upgrade: Test' + CRLF + CRLF + 'head');
socket.on('end', function () {
socket.end();
});
});
server.listen(8000);

var client = http.createClient(8000);

function upgradeRequest(fn) {
var request = client.request('GET', '/', {
'Connection': 'Upgrade',
'Upgrade': 'Test'
});

var wasUpgrade = false;

function onUpgrade(res, socket, head) {
wasUpgrade = true;

client.removeListener('upgrade', onUpgrade);
socket.end();
}
client.on('upgrade', onUpgrade);

function onEnd() {
client.removeListener('end', onEnd);
if (!wasUpgrade) {
throw new Error('hasn\'t received upgrade event');
} else {
fn && process.nextTick(fn);
}
}
client.on('end', onEnd);

request.write('head');

}

successCount = 0;
upgradeRequest(function() {
successCount++;
upgradeRequest(function() {
successCount++;
// Test pass
console.log('Pass!');
client.end();
client.destroy();
server.close();
});
});

process.on('exit', function () {
assert.equal(2, successCount);
});

0 comments on commit 5535aa3

Please sign in to comment.