Fixed 'upgrade' event for httpclient
onend and ondata was cleaning on parser end
This commit is contained in:
parent
4d0456f827
commit
5535aa3d51
@ -883,7 +883,7 @@ function Client ( ) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
self.ondata = function (d, start, end) {
|
function onData(d, start, end) {
|
||||||
if (!parser) {
|
if (!parser) {
|
||||||
throw new Error("parser not initialized prior to Client.ondata call");
|
throw new Error("parser not initialized prior to Client.ondata call");
|
||||||
}
|
}
|
||||||
@ -909,6 +909,10 @@ function Client ( ) {
|
|||||||
|
|
||||||
self.addListener("connect", function () {
|
self.addListener("connect", function () {
|
||||||
debug('client connected');
|
debug('client connected');
|
||||||
|
|
||||||
|
self.ondata = onData;
|
||||||
|
self.onend = onEnd;
|
||||||
|
|
||||||
if (this.https) {
|
if (this.https) {
|
||||||
this.setSecure(this.credentials);
|
this.setSecure(this.credentials);
|
||||||
} else {
|
} else {
|
||||||
@ -924,7 +928,7 @@ function Client ( ) {
|
|||||||
outgoingFlush(self);
|
outgoingFlush(self);
|
||||||
});
|
});
|
||||||
|
|
||||||
self.onend = function () {
|
function onEnd() {
|
||||||
if (parser) parser.finish();
|
if (parser) parser.finish();
|
||||||
debug("self got end closing. readyState = " + self.readyState);
|
debug("self got end closing. readyState = " + self.readyState);
|
||||||
self.end();
|
self.end();
|
||||||
|
64
test/simple/test-http-upgrade-client2.js
Normal file
64
test/simple/test-http-upgrade-client2.js
Normal file
@ -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…
x
Reference in New Issue
Block a user