diff --git a/lib/http.js b/lib/http.js index c994790b5f..aa922ef472 100644 --- a/lib/http.js +++ b/lib/http.js @@ -891,7 +891,7 @@ function Client ( ) { self.ondata = null; self.onend = null - var req = self._outgoing[0]; + var req = parser.incoming; var upgradeHead = d.slice(start + bytesParsed + 1, end); diff --git a/test/simple/test-http-upgrade-client.js b/test/simple/test-http-upgrade-client.js index 7540b13a04..b09cc58a27 100644 --- a/test/simple/test-http-upgrade-client.js +++ b/test/simple/test-http-upgrade-client.js @@ -8,48 +8,21 @@ assert = common.assert var http = require('http'); var net = require('net'); -// Parse a string of data, returning an object if headers are complete, and -// undefined otherwise -var parseHeaders = function(data) { - var m = data.search(/\r\n\r\n/); - if (!m) { - return; - } - - var o = {}; - data.substring(0, m.index).split('\r\n').forEach(function(h) { - var foo = h.split(':'); - if (foo.length < 2) { - return; - } - - o[foo[0].trim().toLowerCase()] = foo[1].trim().toLowerCase(); - }); - - return o; -}; - // Create a TCP server var srv = net.createServer(function(c) { var data = ''; c.addListener('data', function(d) { data += d.toString('utf8'); - // We found the end of the headers; make sure that we have an 'upgrade' - // header and send back a response - var headers = parseHeaders(data); - if (!headers) { - return; - } - - assert.ok('upgrade' in headers); - c.write('HTTP/1.1 101\r\n'); + c.write('hello: world\r\n'); c.write('connection: upgrade\r\n'); - c.write('upgrade: ' + headers.upgrade + '\r\n'); + c.write('upgrade: websocket\r\n'); c.write('\r\n'); c.write('nurtzo'); + }); + c.addListener('end', function() { c.end(); }); }); @@ -57,20 +30,24 @@ srv.listen(common.PORT, '127.0.0.1'); var gotUpgrade = false; var hc = http.createClient(common.PORT, '127.0.0.1'); -hc.addListener('upgrade', function(req, socket, upgradeHead) { +hc.addListener('upgrade', function(res, socket, upgradeHead) { // XXX: This test isn't fantastic, as it assumes that the entire response // from the server will arrive in a single data callback assert.equal(upgradeHead, 'nurtzo'); + console.log(res.headers); + var expectedHeaders = { "hello": "world" + , "connection": "upgrade" + , "upgrade": "websocket" + }; + assert.deepEqual(expectedHeaders, res.headers); + socket.end(); srv.close(); gotUpgrade = true; }); -hc.request('/', { - 'Connection' : 'Upgrade', - 'Upgrade' : 'WebSocket' -}).end(); +hc.request('GET', '/').end(); process.addListener('exit', function() { assert.ok(gotUpgrade);