Commit bdd6352d authored by indexzero's avatar indexzero Committed by Cédric de Saint Martin

[refactor minor] Update vendor/websocket.js to be compatible with node@0.6.x

parent f4653eea
...@@ -496,7 +496,7 @@ var WebSocket = function(url, proto, opts) { ...@@ -496,7 +496,7 @@ var WebSocket = function(url, proto, opts) {
if (u.protocol === 'ws:' || u.protocol === 'wss:') { if (u.protocol === 'ws:' || u.protocol === 'wss:') {
protocol = u.protocol === 'ws:' ? http : https; protocol = u.protocol === 'ws:' ? http : https;
port = u.protocol === 'ws:' ? 80 : 443; port = u.protocol === 'ws:' ? 80 : 443;
agent = u.protocol === 'ws:' ? protocol.getAgent(u.hostname, u.port || port) : protocol.getAgent({ agent = u.protocol === new protocol.Agent({
host: u.hostname, host: u.hostname,
port: u.port || port port: u.port || port
}); });
...@@ -514,113 +514,111 @@ var WebSocket = function(url, proto, opts) { ...@@ -514,113 +514,111 @@ var WebSocket = function(url, proto, opts) {
throw new Error('Invalid URL scheme \'' + urlScheme + '\' specified.'); throw new Error('Invalid URL scheme \'' + urlScheme + '\' specified.');
} }
if (!agent._events || agent._events['upgrade'].length === 0) { var httpReq = protocol.request({
agent.on('upgrade', (function() { host: u.hostname,
var data = undefined; method: 'GET',
agent: agent,
return function(res, s, head) { port: u.port,
stream = s; path: httpPath,
headers: httpHeaders
// });
// Emit the `wsupgrade` event to inspect the raw
// arguments returned from the websocket request. httpReq.on('error', function (e) {
// errorListener(e);
self.emit('wsupgrade', httpHeaders, res, s, head); });
httpReq.on('upgrade', (function() {
var data = undefined;
return function(res, s, head) {
stream = s;
//
// Emit the `wsupgrade` event to inspect the raw
// arguments returned from the websocket request.
//
self.emit('wsupgrade', httpHeaders, res, s, head);
stream.on('data', function(d) {
if (d.length <= 0) {
return;
}
stream.on('data', function(d) { if (!data) {
if (d.length <= 0) { data = d;
return; } else {
} var data2 = new buffer.Buffer(data.length + d.length);
if (!data) {
data = d;
} else {
var data2 = new buffer.Buffer(data.length + d.length);
data.copy(data2, 0, 0, data.length); data.copy(data2, 0, 0, data.length);
d.copy(data2, data.length, 0, d.length); d.copy(data2, data.length, 0, d.length);
data = data2; data = data2;
} }
if (data.length >= 16) { if (data.length >= 16) {
var expected = computeSecretKeySignature(key1, key2, challenge); var expected = computeSecretKeySignature(key1, key2, challenge);
var actual = data.slice(0, 16).toString('binary'); var actual = data.slice(0, 16).toString('binary');
// Handshaking fails; we're donezo // Handshaking fails; we're donezo
if (actual != expected) { if (actual != expected) {
debug( debug(
'expected=\'' + str2hex(expected) + '\'; ' + 'expected=\'' + str2hex(expected) + '\'; ' +
'actual=\'' + str2hex(actual) + '\'' 'actual=\'' + str2hex(actual) + '\''
);
process.nextTick(function() {
// N.B. Emit 'wserror' here, as 'error' is a reserved word in the
// EventEmitter world, and gets thrown.
self.emit(
'wserror',
new Error('Invalid handshake from server:' +
'expected \'' + str2hex(expected) + '\', ' +
'actual \'' + str2hex(actual) + '\''
)
); );
process.nextTick(function() { if (self.onerror) {
// N.B. Emit 'wserror' here, as 'error' is a reserved word in the self.onerror();
// EventEmitter world, and gets thrown. }
self.emit(
'wserror',
new Error('Invalid handshake from server:' +
'expected \'' + str2hex(expected) + '\', ' +
'actual \'' + str2hex(actual) + '\''
)
);
if (self.onerror) {
self.onerror();
}
finishClose();
});
}
// finishClose();
// Un-register our data handler and add the one to be used });
// for the normal, non-handshaking case. If we have extra }
// data left over, manually fire off the handler on
// whatever remains.
//
stream.removeAllListeners('data');
stream.on('data', dataListener);
readyState = OPEN; //
// Un-register our data handler and add the one to be used
// for the normal, non-handshaking case. If we have extra
// data left over, manually fire off the handler on
// whatever remains.
//
stream.removeAllListeners('data');
stream.on('data', dataListener);
process.nextTick(function() { readyState = OPEN;
self.emit('open');
if (self.onopen) { process.nextTick(function() {
self.onopen(); self.emit('open');
}
});
// Consume any leftover data if (self.onopen) {
if (data.length > 16) { self.onopen();
stream.emit('data', data.slice(16, data.length));
} }
});
// Consume any leftover data
if (data.length > 16) {
stream.emit('data', data.slice(16, data.length));
} }
}); }
stream.on('fd', fdListener); });
stream.on('error', errorListener); stream.on('fd', fdListener);
stream.on('close', function() { stream.on('error', errorListener);
errorListener(new Error('Stream closed unexpectedly.')); stream.on('close', function() {
}); errorListener(new Error('Stream closed unexpectedly.'));
});
stream.emit('data', head);
};
})());
}
agent.on('error', function (e) {
errorListener(e);
});
var httpReq = protocol.request({ stream.emit('data', head);
host: u.hostname, };
method: 'GET', })());
agent: agent,
port: u.port,
path: httpPath,
headers: httpHeaders
});
httpReq.write(challenge, 'binary'); httpReq.write(challenge, 'binary');
httpReq.end(); httpReq.end();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment