Browse Source

Fixed 'upgrade' event for httpclient

onend and ondata was cleaning on parser end
v0.7.4-release
Fedor Indutny 14 years ago
committed by Ryan Dahl
parent
commit
5535aa3d51
  1. 8
      lib/http.js
  2. 64
      test/simple/test-http-upgrade-client2.js

8
lib/http.js

@ -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");
}
@ -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 {
@ -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();

64
test/simple/test-http-upgrade-client2.js

@ -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);
});
Loading…
Cancel
Save