Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed 'upgrade' event for httpclient

onend and ondata was cleaning on parser end
  • Loading branch information...
commit 5535aa3d51c6af2380540bb5f0908357b76ebd13 1 parent 4d0456f
@indutny indutny authored ry committed
Showing with 70 additions and 2 deletions.
  1. +6 −2 lib/http.js
  2. +64 −0 test/simple/test-http-upgrade-client2.js
View
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();
View
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);
+});
Please sign in to comment.
Something went wrong with that request. Please try again.