Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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.