mirror of https://github.com/nodejs/node.git
Fixed 'upgrade' event for httpclient
onend and ondata was cleaning on parser endv0.7.4-release
parent
4d0456f827
commit
5535aa3d51
|
@ -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();
|
||||
|
|
|
@ -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…
Reference in New Issue