Browse Source

Fixing the 1 byte off error in http.Server's upgradeHead

(And fix up some style issues)
v0.7.4-release
Micheil Smith 15 years ago
committed by Ryan Dahl
parent
commit
aee226b243
  1. 8
      lib/http.js
  2. 24
      test/simple/test-http-upgrade.js

8
lib/http.js

@ -564,9 +564,13 @@ function connectionListener (socket) {
socket.onend = null;
var req = parser.incoming;
req.upgradeHead = d.slice(start + bytesParsed, end);
// This is start + byteParsed + 1 due to the error of getting \n
// in the upgradeHead from the closing lines of the headers
var upgradeHead = d.slice(start + bytesParsed + 1, end);
if(self.listeners("upgrade").length > 0) {
self.emit('upgrade', req, req.socket, req.upgradeHead);
self.emit('upgrade', req, req.socket, upgradeHead);
} else {
socket.end();
}

24
test/simple/test-http-upgrade.js

@ -7,6 +7,7 @@ var http = require("http");
var requests_recv = 0;
var requests_sent = 0;
var request_upgradeHead = null;
function createTestServer(){
return new testServer();
@ -27,12 +28,13 @@ function testServer(){
});
server.addListener("upgrade", function(req, socket, upgradeHead){
socket.write([
"HTTP/1.1 101 Web Socket Protocol Handshake",
"Upgrade: WebSocket",
"Connection: Upgrade",
"\r\n"
].join("\r\n"), "utf8");
socket.write( "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
+ "Upgrade: WebSocket\r\n"
+ "Connection: Upgrade\r\n"
+ "\r\n\r\n"
);
request_upgradeHead = upgradeHead;
socket.ondata = function(d, start, end){
var data = d.toString('utf8', start, end);
@ -68,7 +70,13 @@ function test_upgrade_with_listener(_server){
var state = 0;
conn.addListener("connect", function () {
writeReq(conn, "GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\n\r\n");
writeReq( conn
, "GET / HTTP/1.1\r\n"
+ "Upgrade: WebSocket\r\n"
+ "Connection: Upgrade\r\n"
+ "\r\n"
+ "WjN}|M(6"
);
});
conn.addListener("data", function(data){
@ -76,6 +84,7 @@ function test_upgrade_with_listener(_server){
if(state == 1){
assert.equal("HTTP/1.1 101", data.substr(0, 12));
assert.equal("WjN}|M(6", request_upgradeHead.toString("utf8"));
conn.write("test", "utf8");
} else if(state == 2) {
assert.equal("test", data);
@ -138,6 +147,7 @@ server.addListener("listening", function(){
// All tests get chained after this:
test_upgrade_with_listener(server);
});
server.listen(PORT);

Loading…
Cancel
Save