Compare commits

..

56 Commits
0.8.7 ... 0.9.1

Author SHA1 Message Date
Guillermo Rauch
c0e2c3012f Release 0.9.1 2012-03-02 08:20:38 -03:00
Guillermo Rauch
97b04c4152 Merge branch 'master' of github.com:LearnBoost/socket.io 2012-03-02 07:50:59 -03:00
Guillermo Rauch
c8306e207d Temporarily removing node 0.4 from travis-ci 2012-02-29 11:01:11 -03:00
Guillermo Rauch
de5c0b3554 Merge pull request #771 from felixge/heartbeat
Make heartbeat timeout > heartbeat interval
2012-02-29 05:43:24 -08:00
Felix Geisendörfer
57a0b24060 Make heartbeat timeout > heartbeat interval
Otherwise clients would detect timeouts before a heartbeat has a chance
of reaching them. The new values themselves were suggested by @rauchg. I
myself think that the heartbeat timeout should probably only be ~10s larger
than the interval.
2012-02-29 14:15:37 +01:00
Guillermo Rauch
204576c006 Make these 2 tests work both on 0.4 and 0.6 2012-02-26 21:51:22 -03:00
Guillermo Rauch
66ac425bf7 Release 0.9.0 2012-02-26 21:46:39 -03:00
Guillermo Rauch
a01e7e2256 Make tests pass on 0.4 2012-02-26 18:21:25 -03:00
Guillermo Rauch
47cfa5aadf Fixed tests. All 250 passing. 2012-02-26 17:14:06 -03:00
Guillermo Rauch
ddd7f804af Fixed cross-domain xhr tests. 2012-02-26 17:11:52 -03:00
Guillermo Rauch
8c1c7a24ef Merge pull request #744 from ajaxorg/regexp-as-resource
make it possible to use a regexp to match the socket.io resource URL
2012-02-09 09:38:03 -08:00
Fabian Jakobs
09b130f4cf make it possible to use a regexp to match the
socket.io resource URL. We need this because we
have to prefix the socket.io URL with a variable
ID.
2012-02-09 17:17:55 +01:00
Guillermo Rauch
b662704b0b Merge pull request #737 from mixu/mixu/authfix2
Supplemental fix to gavinuhma/authfix, it looks like the same Access-Control-Origin logic is needed in the http and xhr-polling transports
2012-02-03 14:24:57 -08:00
Mikito Takada
304a4285ff Supplemental fix to gavinuhma/authfix, it looks like the same Access-Control-Origin logic is needed in the http and xhr-polling transports 2012-02-03 12:20:40 -08:00
Guillermo Rauch
6074795b19 Updated express dep for windows compatibility. 2012-01-11 07:41:09 -08:00
Guillermo Rauch
a139809a97 Updated express dep for windows compatibility. 2012-01-11 07:40:44 -08:00
Guillermo Rauch
8ff2edd79c Merge pull request #689 from bwillard/master
Improve performance of parser.decodePayload
2011-12-16 14:04:12 -08:00
Brian Willard
ebd25676ee combine two substr calls into one in decodePayload to improve performance 2011-12-16 15:31:48 -06:00
Guillermo Rauch
d9d529cb17 Merge pull request #683 from jherdman/documentation-fix
Minor documentation fix
2011-12-12 11:02:24 -08:00
James Herdman
b37666a8e8 Minor documentation fix 2011-12-12 11:10:25 -05:00
Guillermo Rauch
cc2270bb90 Merge pull request #622 from mattrobenolt/master
Location mismatch in Safari behind proxy
2011-12-05 14:04:57 -08:00
Matt Robenolt
36fc7b07ea Minor. Conform to style of other files. 2011-12-05 16:59:15 -05:00
Matt Robenolt
8eab3a87e7 Switching setting to 'match origin protocol' 2011-12-05 16:58:00 -05:00
Guillermo Rauch
94d513c85a Revert "Fixes leaking Redis subscriptions for #663. The local flag was not getting passed through onClientDisconnect()."
This reverts commit d5ab46d662.
2011-11-26 15:14:26 -08:00
Guillermo Rauch
70abe7aada Revert "Handle leaked dispatch:[id] subscription."
This reverts commit c110036f75.
2011-11-26 15:14:13 -08:00
Guillermo Rauch
9a8c1c4ae7 Merge pull request #667 from dshaw/patch/redis-disconnect
Patch/redis disconnect
2011-11-26 14:03:01 -08:00
Daniel Shaw
c110036f75 Handle leaked dispatch:[id] subscription. 2011-11-26 12:14:39 -08:00
Daniel Shaw
d5ab46d662 Fixes leaking Redis subscriptions for #663. The local flag was not getting passed through onClientDisconnect(). 2011-11-26 11:22:43 -08:00
Guillermo Rauch
eeaca6d9ac Merge pull request #662 from 3rd-Eden/leak
prevent memory leaking on uncompleted requests & add max post size limit...
2011-11-23 14:04:42 -08:00
Arnout Kazemier
a7f45fe6c0 prevent memory leaking on uncompleted requests & add max post size limitation 2011-11-23 22:28:38 +01:00
Guillermo Rauch
b59fd61d56 Merge pull request #661 from 3rd-Eden/travis
Fix for testcase
2011-11-22 14:52:36 -08:00
Arnout Kazemier
7948619609 Fix for testcase 2011-11-22 23:49:58 +01:00
Guillermo Rauch
6e8166d039 Merge pull request #660 from 3rd-Eden/travis
Assertvarnish
2011-11-22 14:43:21 -08:00
Arnout Kazemier
8fc3e37ca1 Merge branch 'master' of github.com:LearnBoost/socket.io into travis 2011-11-22 23:41:54 +01:00
Guillermo Rauch
17d0f4d489 Merge pull request #630 from gavinuhma/auth-fix
set Access-Control-Allow-Origin header to origin to enable withCredentials
2011-11-22 14:38:30 -08:00
Gavin Uhma
61e7e8955a Merge branch 'master' of git://github.com/LearnBoost/socket.io into auth-fix 2011-11-22 18:03:48 -04:00
Gavin Uhma
4c17f7f83b Set Access-Control-Allow-Credentials true, regardless of cookie 2011-11-22 18:03:25 -04:00
Arnout Kazemier
0f29d786b2 Remove assertvarnish from package as it breaks on 0.6 2011-11-22 21:18:15 +01:00
Guillermo Rauch
5ee6b43921 Merge pull request #659 from 3rd-Eden/travis
Added travis
2011-11-22 11:47:49 -08:00
Arnout Kazemier
f211f78019 Correct irc channel 2011-11-22 20:46:01 +01:00
Arnout Kazemier
eeb2a73f16 Added travis 2011-11-22 20:44:19 +01:00
Guillermo Rauch
3887633e35 Merge pull request #440 from dylang/master
Updated package.json to reflect new repo location
2011-11-16 13:05:31 -08:00
Guillermo Rauch
db8cf7673b Merge pull request #634 from christopherobin/master
Fixing issue #432
2011-11-16 13:05:18 -08:00
Guillermo Rauch
dfb852151b Merge pull request #570 from 3rd-Eden/logger
Use tty to detect if we should add colors or not by default.
2011-11-16 13:04:51 -08:00
Guillermo Rauch
7b6c85030e Merge pull request #643 from einaros/master
Bug fixes, and for some reason a heap of whitespace cleanups
2011-11-14 09:09:58 -08:00
einaros
2d5dcc1a8a whitespace cleanup 2011-11-14 17:57:34 +01:00
einaros
2b28c46400 added proper return after reserved field error 2011-11-14 17:50:57 +01:00
einaros
27714d7286 fixes manager.js failure to close connection after transport error has happened 2011-11-14 17:40:16 +01:00
einaros
ffef944dd5 added implicit port 80 for origin checks. fixes #638 2011-11-14 09:45:44 +01:00
Christophe Robin
f4b434a6a5 Fixed bug #432 in 0.8.7 2011-11-11 11:06:56 +09:00
Gavin Uhma
e4a9342e8b set Access-Control-Allow-Origin header to origin to enable withCredentials 2011-11-08 18:22:30 -04:00
Matt Robenolt
6f2270add6 Adding configuration variable matchOriginProtocol
matchOriginProtocol is meant to be used when running socket.io behind a
proxy. matchOriginProtocol should be set to true when you want the
location handshake to match the protocol of the origin. This fixes
issues with terminating the SSL in front of Node and forcing location
to think it's wss instead of ws.
2011-11-03 15:34:24 -04:00
Matt Robenolt
220f8d5bf5 Fixes location mismatch error in Safari. 2011-11-03 01:35:18 -03:00
Arnout Kazemier
d9049f69c1 Merge branch 'master' of github.com:LearnBoost/socket.io into logger 2011-10-11 20:01:05 +02:00
Arnout Kazemier
10ffbd59e9 Use tty to detect if we should add colors or not by default. 2011-10-11 20:00:30 +02:00
Dylan Greene
a51fe07420 Updated the package location. 2011-08-01 14:44:11 -03:00
29 changed files with 543 additions and 364 deletions

6
.travis.yml Normal file
View File

@@ -0,0 +1,6 @@
language: node_js
node_js:
- 0.6
notifications:
irc: "irc.freenode.org#socket.io"

View File

@@ -1,4 +1,42 @@
0.9.1 / 2012-03-02
==================
* Changed heartbeat timeout and interval defaults (60 and 25 seconds)
* Make tests work both on 0.4 and 0.6
* Updated client (improvements + bug fixes).
0.9.0 / 2012-02-26
==================
* Make it possible to use a regexp to match the socket.io resource URL.
We need this because we have to prefix the socket.io URL with a variable ID.
* Supplemental fix to gavinuhma/authfix, it looks like the same Access-Control-Origin logic is needed in the http and xhr-polling transports
* Updated express dep for windows compatibility.
* Combine two substr calls into one in decodePayload to improve performance
* Minor documentation fix
* Minor. Conform to style of other files.
* Switching setting to 'match origin protocol'
* Revert "Fixes leaking Redis subscriptions for #663. The local flag was not getting passed through onClientDisconnect()."
* Revert "Handle leaked dispatch:[id] subscription."
* Merge pull request #667 from dshaw/patch/redis-disconnect
* Handle leaked dispatch:[id] subscription.
* Fixes leaking Redis subscriptions for #663. The local flag was not getting passed through onClientDisconnect().
* Prevent memory leaking on uncompleted requests & add max post size limitation
* Fix for testcase
* Set Access-Control-Allow-Credentials true, regardless of cookie
* Remove assertvarnish from package as it breaks on 0.6
* Correct irc channel
* Added proper return after reserved field error
* Fixes manager.js failure to close connection after transport error has happened
* Added implicit port 80 for origin checks. fixes #638
* Fixed bug #432 in 0.8.7
* Set Access-Control-Allow-Origin header to origin to enable withCredentials
* Adding configuration variable matchOriginProtocol
* Fixes location mismatch error in Safari.
* Use tty to detect if we should add colors or not by default.
* Updated the package location.
0.8.7 / 2011-11-05
==================

View File

@@ -131,7 +131,7 @@ The following example defines a socket that listens on '/chat' and one for
var io = require('socket.io').listen(80);
var chat = io
.of('/chat');
.of('/chat')
.on('connection', function (socket) {
socket.emit('a message', { that: 'only', '/chat': 'will get' });
chat.emit('a message', { everyone: 'in', '/chat': 'will get' });

View File

@@ -3,7 +3,7 @@
, "description": "example chat application with socket.io"
, "version": "0.0.1"
, "dependencies": {
"express": "2.5.0"
"express": "2.5.5"
, "jade": "0.16.4"
, "stylus": "0.19.0"
, "nib": "0.2.0"

View File

@@ -2,7 +2,7 @@
"name": "socket.io-irc"
, "version": "0.0.1"
, "dependencies": {
"express": "2.5.0"
"express": "2.5.5"
, "jade": "0.16.4"
, "stylus": "0.19.0"
, "nib": "0.2.0"

View File

@@ -10,6 +10,7 @@
var fs = require('fs')
, url = require('url')
, tty = require('tty')
, util = require('./util')
, store = require('./store')
, client = require('socket.io-client')
@@ -69,14 +70,15 @@ function Manager (server, options) {
, authorization: false
, blacklist: ['disconnect']
, 'log level': 3
, 'log colors': true
, 'log colors': tty.isatty(process.stdout.fd)
, 'close timeout': 25
, 'heartbeat timeout': 15
, 'heartbeat interval': 20
, 'heartbeat interval': 25
, 'heartbeat timeout': 60
, 'polling duration': 20
, 'flash policy server': true
, 'flash policy port': 10843
, 'destroy upgrade': true
, 'destroy buffer size': 10E7
, 'browser client': true
, 'browser client cache': true
, 'browser client minification': false
@@ -85,6 +87,7 @@ function Manager (server, options) {
, 'browser client gzip': false
, 'browser client handler': false
, 'client store expiration': 15
, 'match origin protocol': false
};
for (var i in options) {
@@ -468,7 +471,8 @@ Manager.prototype.onClientMessage = function (id, packet) {
Manager.prototype.onClientDisconnect = function (id, reason) {
for (var name in this.namespaces) {
this.namespaces[name].handleDisconnect(id, reason, typeof this.roomClients[id][name] !== 'undefined');
this.namespaces[name].handleDisconnect(id, reason, typeof this.roomClients[id] !== 'undefined' &&
typeof this.roomClients[id][name] !== 'undefined');
}
this.onDisconnect(id);
@@ -624,6 +628,11 @@ Manager.prototype.handleClient = function (data, req) {
var transport = new transports[data.transport](this, data, req)
, handshaken = this.handshaken[data.id];
if (transport.disconnected) {
// failed during transport setup
req.connection.end();
return;
}
if (handshaken) {
if (transport.open) {
if (this.closed[data.id] && this.closed[data.id].length) {
@@ -720,11 +729,8 @@ Manager.prototype.handleHandshake = function (data, req, res) {
if (origin) {
// https://developer.mozilla.org/En/HTTP_Access_Control
headers['Access-Control-Allow-Origin'] = '*';
if (req.headers.cookie) {
headers['Access-Control-Allow-Credentials'] = 'true';
}
headers['Access-Control-Allow-Origin'] = origin;
headers['Access-Control-Allow-Credentials'] = 'true';
}
this.authorize(handshakeData, function (err, authorized, newData) {
@@ -774,12 +780,12 @@ Manager.prototype.handshakeData = function (data) {
connectionAddress = {
address: connection.remoteAddress
, port: connection.remotePort
};
};
} else if (connection.socket && connection.socket.remoteAddress) {
connectionAddress = {
address: connection.socket.remoteAddress
, port: connection.socket.remotePort
};
};
}
return {
@@ -813,6 +819,7 @@ Manager.prototype.verifyOrigin = function (request) {
if (origin) {
try {
var parts = url.parse(origin);
parts.port = parts.port || 80;
var ok =
~origins.indexOf(parts.hostname + ':' + parts.port) ||
~origins.indexOf(parts.hostname + ':*') ||
@@ -824,7 +831,7 @@ Manager.prototype.verifyOrigin = function (request) {
}
}
else {
this.log.warn('origin missing from handshake, yet required by config');
this.log.warn('origin missing from handshake, yet required by config');
}
return false;
};
@@ -897,8 +904,17 @@ var regexp = /^\/([^\/]+)\/?([^\/]+)?\/?([^\/]+)?\/?$/
Manager.prototype.checkRequest = function (req) {
var resource = this.get('resource');
if (req.url.substr(0, resource.length) == resource) {
var uri = url.parse(req.url.substr(resource.length), true)
var match;
if (typeof resource === 'string') {
match = req.url.substr(0, resource.length);
if (match !== resource) match = null;
} else {
match = resource.exec(req.url);
if (match) match = match[0];
}
if (match) {
var uri = url.parse(req.url.substr(match.length), true)
, path = uri.pathname || ''
, pieces = path.match(regexp);

View File

@@ -234,7 +234,7 @@ exports.decodePayload = function (data) {
for (var i = 1, length = ''; i < data.length; i++) {
if (data[i] == '\ufffd') {
ret.push(exports.decodePacket(data.substr(i + 1).substr(0, length)));
ret.push(exports.decodePacket(data.substr(i + 1, length)));
i += Number(length) + 1;
length = '';
} else {

View File

@@ -15,7 +15,7 @@ var client = require('socket.io-client');
* Version.
*/
exports.version = '0.8.7';
exports.version = '0.9.1';
/**
* Supported protocol version.

View File

@@ -51,6 +51,11 @@ HTTPTransport.prototype.handleRequest = function (req) {
req.on('data', function (data) {
buffer += data;
if (Buffer.byteLength(buffer) >= self.manager.get('destroy buffer size')) {
buffer = '';
req.connection.destroy();
}
});
req.on('end', function () {
@@ -60,13 +65,15 @@ HTTPTransport.prototype.handleRequest = function (req) {
self.onData(self.postEncoded ? qs.parse(buffer).d : buffer);
});
// prevent memory leaks for uncompleted requests
req.on('close', function () {
buffer = '';
});
if (origin) {
// https://developer.mozilla.org/En/HTTP_Access_Control
headers['Access-Control-Allow-Origin'] = '*';
if (req.headers.cookie) {
headers['Access-Control-Allow-Credentials'] = 'true';
}
headers['Access-Control-Allow-Origin'] = origin;
headers['Access-Control-Allow-Credentials'] = 'true';
}
} else {
this.response = req.res;

View File

@@ -88,8 +88,10 @@ WebSocket.prototype.onSocketConnect = function () {
return;
}
var origin = this.req.headers.origin
, location = (this.socket.encrypted ? 'wss' : 'ws')
var origin = this.req.headers['origin']
, location = ((this.manager.settings['match origin protocol'] ?
origin.match(/^https/) : this.socket.encrypted) ?
'wss' : 'ws')
+ '://' + this.req.headers.host + this.req.url
, waitingForNonce = false;

View File

@@ -99,7 +99,9 @@ WebSocket.prototype.onSocketConnect = function () {
}
var origin = this.req.headers['sec-websocket-origin']
, location = (this.socket.encrypted ? 'wss' : 'ws')
, location = ((this.manager.settings['match origin protocol'] ?
origin.match(/^https/) : this.socket.encrypted) ?
'wss' : 'ws')
+ '://' + this.req.headers.host + this.req.url;
if (!this.verifyOrigin(origin)) {
@@ -159,6 +161,7 @@ WebSocket.prototype.verifyOrigin = function (origin) {
if (origin) {
try {
var parts = url.parse(origin);
parts.port = parts.port || 80;
var ok =
~origins.indexOf(parts.hostname + ':' + parts.port) ||
~origins.indexOf(parts.hostname + ':*') ||
@@ -505,7 +508,9 @@ Parser.prototype.expect = function(what, length, handler) {
*/
Parser.prototype.processPacket = function (data) {
if ((data[0] & 0x70) != 0) this.error('reserved fields must be empty');
if ((data[0] & 0x70) != 0) {
this.error('reserved fields must be empty');
}
this.state.lastFragment = (data[0] & 0x80) == 0x80;
this.state.masked = (data[1] & 0x80) == 0x80;
var opcode = data[0] & 0xf;

View File

@@ -99,7 +99,9 @@ WebSocket.prototype.onSocketConnect = function () {
}
var origin = this.req.headers['origin']
, location = (this.socket.encrypted ? 'wss' : 'ws')
, location = ((this.manager.settings['match origin protocol'] ?
origin.match(/^https/) : this.socket.encrypted) ?
'wss' : 'ws')
+ '://' + this.req.headers.host + this.req.url;
if (!this.verifyOrigin(origin)) {
@@ -159,6 +161,7 @@ WebSocket.prototype.verifyOrigin = function (origin) {
if (origin) {
try {
var parts = url.parse(origin);
parts.port = parts.port || 80;
var ok =
~origins.indexOf(parts.hostname + ':' + parts.port) ||
~origins.indexOf(parts.hostname + ':*') ||
@@ -505,7 +508,10 @@ Parser.prototype.expect = function(what, length, handler) {
*/
Parser.prototype.processPacket = function (data) {
if ((data[0] & 0x70) != 0) this.error('reserved fields must be empty');
if ((data[0] & 0x70) != 0) {
this.error('reserved fields must be empty');
return;
}
this.state.lastFragment = (data[0] & 0x80) == 0x80;
this.state.masked = (data[1] & 0x80) == 0x80;
var opcode = data[0] & 0xf;

View File

@@ -59,11 +59,8 @@ XHRPolling.prototype.doWrite = function (data) {
if (origin) {
// https://developer.mozilla.org/En/HTTP_Access_Control
headers['Access-Control-Allow-Origin'] = '*';
if (this.req.headers.cookie) {
headers['Access-Control-Allow-Credentials'] = 'true';
}
headers['Access-Control-Allow-Origin'] = origin;
headers['Access-Control-Allow-Credentials'] = 'true';
}
this.response.writeHead(200, headers);

View File

@@ -1,6 +1,6 @@
{
"name": "socket.io"
, "version": "0.8.7"
, "version": "0.9.1"
, "description": "Real-time apps made cross-browser & easy with a WebSocket-like API"
, "homepage": "http://socket.io"
, "keywords": ["websocket", "socket", "realtime", "socket.io", "comet", "ajax"]
@@ -16,18 +16,20 @@
, "url": "https://github.com/LearnBoost/socket.io.git"
}
, "dependencies": {
"socket.io-client": "0.8.7"
"socket.io-client": "0.9.1"
, "policyfile": "0.0.4"
, "redis": "0.6.7"
}
, "devDependencies": {
"expresso": "0.9.2"
, "should": "0.0.4"
, "assertvanish": "0.0.3-1"
, "benchmark": "0.2.2"
, "microtime": "0.1.3-1"
, "colors": "0.5.1"
}
, "main": "index"
, "engines": { "node": ">= 0.4.0" }
, "scripts": {
"test": "make test"
}
}

View File

@@ -9,7 +9,7 @@
* Test dependencies.
*/
var io = require('socket.io')
var io = require('../')
, parser = io.parser
, http = require('http')
, https = require('https')
@@ -227,7 +227,7 @@ function WSClient (port, sid, transport) {
this.transportName = transport || 'websocket';
WebSocket.call(
this
, 'ws://localhost:' + port + '/socket.io/'
, 'ws://localhost:' + port + '/socket.io/'
+ io.protocol + '/' + this.transportName + '/' + sid
);
};

View File

@@ -43,7 +43,7 @@ mask = function(buf, maskString) {
if (typeof buf == 'string') buf = new Buffer(buf);
var mask = getBufferFromHexString(maskString || '34 83 a8 68');
for (var i = 0; i < buf.length; ++i) {
buf[i] ^= mask[i % 4];
buf[i] ^= mask[i % 4];
}
return buf;
}
@@ -51,8 +51,8 @@ mask = function(buf, maskString) {
/**
* Returns a hex string representing the length of a message
*/
getHybiLengthAsHexString = function(len, masked) {
getHybiLengthAsHexString = function(len, masked) {
if (len < 126) {
var buf = new Buffer(1);
buf[0] = (masked ? 0x80 : 0) | len;
@@ -94,6 +94,6 @@ pack = function(length, number) {
* Left pads the string 's' to a total length of 'n' with char 'c'.
*/
padl = function(s, n, c) {
padl = function(s, n, c) {
return new Array(1 + n - s.length).join(c) + s;
}

View File

@@ -9,7 +9,7 @@
* Test dependencies.
*/
var sio = require('socket.io')
var sio = require('../')
, fs = require('fs')
, http = require('http')
, https = require('https')

View File

@@ -8,7 +8,7 @@
* Test dependencies.
*/
var sio = require('socket.io')
var sio = require('../')
, http = require('http')
, should = require('./common')
, ports = 15100;
@@ -277,6 +277,23 @@ module.exports = {
});
},
'test that a referer with implicit port 80 is accepted for foo.bar.com:80 origin': function (done) {
var port = ++ports
, io = sio.listen(port)
, cl = client(port);
io.configure(function () {
io.set('origins', 'foo.bar.com:80');
});
cl.get('/socket.io/{protocol}', { headers: { referer: 'http://foo.bar.com/something' } }, function (res, data) {
res.statusCode.should.eql(200);
cl.end();
io.server.close();
done();
});
},
'test that erroneous referer is denied for addr:* origin': function (done) {
var port = ++ports
, io = sio.listen(port)
@@ -339,7 +356,7 @@ module.exports = {
cl.get('/socket.io/{protocol}/', { headers:headers }, function (res, data) {
res.statusCode.should.eql(200);
res.headers['access-control-allow-origin'].should.eql('*');
res.headers['access-control-allow-origin'].should.eql('http://example.org:1337');
res.headers['access-control-allow-credentials'].should.eql('true');
cl.end();

View File

@@ -3,7 +3,7 @@
* Test dependencies.
*/
var parser = require('socket.io').parser
var parser = require('../').parser
, decode = parser.decode
, should = require('./common');

View File

@@ -9,7 +9,7 @@
* Test dependencies.
*/
var sio = require('socket.io')
var sio = require('../')
, should = require('./common')
, ports = 15400;
@@ -94,7 +94,7 @@ module.exports = {
'test that the client is build with the enabled transports': function (done) {
var port = ++ports
, io = sio.listen(port)
, io = sio.listen(port)
, cl = client(port);
io.set('transports', ['websocket']);

View File

@@ -5,7 +5,7 @@
* @api private
*/
var sio = require('socket.io')
var sio = require('../')
, should = require('should')
, MemoryStore = sio.MemoryStore;
@@ -45,7 +45,7 @@ module.exports = {
client.set('b', 'c', function (err) {
should.strictEqual(err, null);
client.set('c', 'd', function (err) {
should.strictEqual(err, null);

View File

@@ -5,7 +5,7 @@
* @api private
*/
var sio = require('socket.io')
var sio = require('../')
, redis = require('redis')
, should = require('should')
, RedisStore = sio.RedisStore;
@@ -95,7 +95,7 @@ module.exports = {
client.set('b', 'c', function (err) {
should.strictEqual(err, null);
client.set('c', 'd', function (err) {
should.strictEqual(err, null);

View File

@@ -9,7 +9,7 @@
* Test dependencies.
*/
var sio = require('socket.io')
var sio = require('../')
, net = require('net')
, http = require('http')
, should = require('./common')
@@ -30,7 +30,7 @@ function FlashSocket (port, sid) {
WebSocket.call(
this
, 'ws://localhost:' + port + '/socket.io/'
, 'ws://localhost:' + port + '/socket.io/'
+ sio.protocol + '/flashsocket/' + sid
);
};

View File

@@ -9,7 +9,7 @@
* Test dependencies.
*/
var sio = require('socket.io')
var sio = require('../')
, should = require('./common')
, HTTPClient = should.HTTPClient
, parser = sio.parser

View File

@@ -9,7 +9,7 @@
* Test dependencies.
*/
var sio = require('socket.io')
var sio = require('../')
, should = require('./common')
, qs = require('querystring')
, HTTPClient = should.HTTPClient

View File

@@ -2,7 +2,7 @@
* Test dependencies.
*/
var assert = require('assert');
var assert = require('assert');
var Parser = require('../lib/transports/websocket/hybi-07-12.js').Parser;
require('./hybi-common');
@@ -14,38 +14,38 @@ module.exports = {
'can parse unmasked text message': function() {
var p = new Parser();
var packet = '81 05 48 65 6c 6c 6f';
var gotData = false;
p.on('data', function(data) {
gotData = true;
assert.equal('Hello', data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
'can parse close message': function() {
var p = new Parser();
var packet = '88 00';
var gotClose = false;
p.on('close', function(data) {
gotClose = true;
});
p.add(getBufferFromHexString(packet));
assert.ok(gotClose);
},
'can parse masked text message': function() {
var p = new Parser();
var packet = '81 93 34 83 a8 68 01 b9 92 52 4f a1 c6 09 59 e6 8a 52 16 e6 cb 00 5b a1 d5';
var gotData = false;
p.on('data', function(data) {
gotData = true;
assert.equal('5:::{"name":"echo"}', data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -54,13 +54,13 @@ module.exports = {
var message = 'A';
for (var i = 0; i < 300; ++i) message += (i % 5).toString();
var packet = '81 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -75,7 +75,7 @@ module.exports = {
gotData = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -87,13 +87,13 @@ module.exports = {
var msgpiece2 = message.substr(150);
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
gotData = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet1));
p.add(getBufferFromHexString(packet2));
assert.ok(gotData);
@@ -102,25 +102,25 @@ module.exports = {
var p = new Parser();
var message = 'Hello';
var packet = '89 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotPing = false;
p.on('ping', function(data) {
gotPing = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotPing);
},
'can parse a ping with no data': function() {
var p = new Parser();
var packet = '89 00';
var gotPing = false;
p.on('ping', function(data) {
gotPing = true;
});
p.add(getBufferFromHexString(packet));
assert.ok(gotPing);
},
@@ -128,16 +128,16 @@ module.exports = {
var p = new Parser();
var message = 'A';
for (var i = 0; i < 300; ++i) message += (i % 5).toString();
var msgpiece1 = message.substr(0, 150);
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
var pingMessage = 'Hello';
var pingPacket = '89 FE ' + pack(4, pingMessage.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
var msgpiece2 = message.substr(150);
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
@@ -148,7 +148,7 @@ module.exports = {
gotPing = true;
assert.equal(pingMessage, data);
});
p.add(getBufferFromHexString(packet1));
p.add(getBufferFromHexString(pingPacket));
p.add(getBufferFromHexString(packet2));
@@ -159,16 +159,16 @@ module.exports = {
var p = new Parser();
var message = 'A';
for (var i = 0; i < 300; ++i) message += (i % 5).toString();
var msgpiece1 = message.substr(0, 150);
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
var pingMessage = 'Hello';
var pingPacket = '89 FE ' + pack(4, pingMessage.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
var msgpiece2 = message.substr(150);
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
@@ -179,7 +179,7 @@ module.exports = {
gotPing = true;
assert.equal(pingMessage, data);
});
var buffers = [];
buffers = buffers.concat(splitBuffer(getBufferFromHexString(packet1)));
buffers = buffers.concat(splitBuffer(getBufferFromHexString(pingPacket)));
@@ -195,7 +195,7 @@ module.exports = {
var length = 100;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
@@ -203,7 +203,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -212,7 +212,7 @@ module.exports = {
var length = 256;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
@@ -220,7 +220,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -229,7 +229,7 @@ module.exports = {
var length = 200 * 1024;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
@@ -237,7 +237,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -246,7 +246,7 @@ module.exports = {
var length = 200 * 1024;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, false) + ' ' + getHexStringFromBuffer(message);
var gotData = false;
@@ -254,7 +254,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},

View File

@@ -2,7 +2,7 @@
* Test dependencies.
*/
var assert = require('assert');
var assert = require('assert');
var Parser = require('../lib/transports/websocket/hybi-16.js').Parser;
require('./hybi-common');
@@ -14,38 +14,38 @@ module.exports = {
'can parse unmasked text message': function() {
var p = new Parser();
var packet = '81 05 48 65 6c 6c 6f';
var gotData = false;
p.on('data', function(data) {
gotData = true;
assert.equal('Hello', data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
'can parse close message': function() {
var p = new Parser();
var packet = '88 00';
var gotClose = false;
p.on('close', function(data) {
gotClose = true;
});
p.add(getBufferFromHexString(packet));
assert.ok(gotClose);
},
'can parse masked text message': function() {
var p = new Parser();
var packet = '81 93 34 83 a8 68 01 b9 92 52 4f a1 c6 09 59 e6 8a 52 16 e6 cb 00 5b a1 d5';
var gotData = false;
p.on('data', function(data) {
gotData = true;
assert.equal('5:::{"name":"echo"}', data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -54,13 +54,13 @@ module.exports = {
var message = 'A';
for (var i = 0; i < 300; ++i) message += (i % 5).toString();
var packet = '81 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -75,7 +75,7 @@ module.exports = {
gotData = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -87,13 +87,13 @@ module.exports = {
var msgpiece2 = message.substr(150);
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
gotData = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet1));
p.add(getBufferFromHexString(packet2));
assert.ok(gotData);
@@ -102,25 +102,25 @@ module.exports = {
var p = new Parser();
var message = 'Hello';
var packet = '89 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotPing = false;
p.on('ping', function(data) {
gotPing = true;
assert.equal(message, data);
});
p.add(getBufferFromHexString(packet));
assert.ok(gotPing);
},
'can parse a ping with no data': function() {
var p = new Parser();
var packet = '89 00';
var gotPing = false;
p.on('ping', function(data) {
gotPing = true;
});
p.add(getBufferFromHexString(packet));
assert.ok(gotPing);
},
@@ -128,16 +128,16 @@ module.exports = {
var p = new Parser();
var message = 'A';
for (var i = 0; i < 300; ++i) message += (i % 5).toString();
var msgpiece1 = message.substr(0, 150);
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
var pingMessage = 'Hello';
var pingPacket = '89 FE ' + pack(4, pingMessage.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
var msgpiece2 = message.substr(150);
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
@@ -148,7 +148,7 @@ module.exports = {
gotPing = true;
assert.equal(pingMessage, data);
});
p.add(getBufferFromHexString(packet1));
p.add(getBufferFromHexString(pingPacket));
p.add(getBufferFromHexString(packet2));
@@ -159,16 +159,16 @@ module.exports = {
var p = new Parser();
var message = 'A';
for (var i = 0; i < 300; ++i) message += (i % 5).toString();
var msgpiece1 = message.substr(0, 150);
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
var pingMessage = 'Hello';
var pingPacket = '89 FE ' + pack(4, pingMessage.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
var msgpiece2 = message.substr(150);
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
var gotData = false;
p.on('data', function(data) {
gotData = true;
@@ -179,7 +179,7 @@ module.exports = {
gotPing = true;
assert.equal(pingMessage, data);
});
var buffers = [];
buffers = buffers.concat(splitBuffer(getBufferFromHexString(packet1)));
buffers = buffers.concat(splitBuffer(getBufferFromHexString(pingPacket)));
@@ -195,7 +195,7 @@ module.exports = {
var length = 100;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
@@ -203,7 +203,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -212,7 +212,7 @@ module.exports = {
var length = 256;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
@@ -220,7 +220,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -229,7 +229,7 @@ module.exports = {
var length = 200 * 1024;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
var gotData = false;
@@ -237,7 +237,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},
@@ -246,7 +246,7 @@ module.exports = {
var length = 200 * 1024;
var message = new Buffer(length);
for (var i = 0; i < length; ++i) message[i] = i % 256;
var originalMessage = getHexStringFromBuffer(message);
var originalMessage = getHexStringFromBuffer(message);
var packet = '82 ' + getHybiLengthAsHexString(length, false) + ' ' + getHexStringFromBuffer(message);
var gotData = false;
@@ -254,7 +254,7 @@ module.exports = {
gotData = true;
assert.equal(originalMessage, getHexStringFromBuffer(data));
});
p.add(getBufferFromHexString(packet));
assert.ok(gotData);
},

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
* Test dependencies.
*/
var sio = require('socket.io')
var sio = require('../')
, should = require('./common')
, HTTPClient = should.HTTPClient
, parser = sio.parser
@@ -768,7 +768,7 @@ module.exports = {
var cl = client(++ports)
, io = create(cl)
, messages = 0;
io.configure(function () {
io.set('polling duration', 0);
io.set('close timeout', .1);
@@ -2652,8 +2652,8 @@ module.exports = {
}, function (res, packs) {
var headers = res.headers;
headers['access-control-allow-origin'].should.equal('*');
should.strictEqual(headers['access-control-allow-credentials'], undefined);
headers['access-control-allow-origin'].should.equal('http://localhost:3500');
headers['access-control-allow-credentials'].should.equal('true');
packs.should.have.length(1);
packs[0].type.should.eql('message');
@@ -2669,7 +2669,7 @@ module.exports = {
}
}, function (res, data) {
var headers = res.headers;
headers['access-control-allow-origin'].should.equal('*');
headers['access-control-allow-origin'].should.equal('http://localhost:3500');
headers['access-control-allow-credentials'].should.equal('true');
data.should.equal('1');
@@ -2751,7 +2751,7 @@ module.exports = {
}
);
});
});
});
}