Browse Source

Removed included socket.io

going to have a build script to install it with npm
Nathaniel van Diepen 10 years ago
parent
commit
b2d4e33001
100 changed files with 1 additions and 12161 deletions
  1. 1 2
      .gitignore
  2. 0 3
      app/node_modules/socket.io/.npmignore
  3. 0 6
      app/node_modules/socket.io/.travis.yml
  4. 0 325
      app/node_modules/socket.io/History.md
  5. 0 22
      app/node_modules/socket.io/LICENSE
  6. 0 31
      app/node_modules/socket.io/Makefile
  7. 0 364
      app/node_modules/socket.io/Readme.md
  8. 0 64
      app/node_modules/socket.io/benchmarks/decode.bench.js
  9. 0 90
      app/node_modules/socket.io/benchmarks/encode.bench.js
  10. 0 55
      app/node_modules/socket.io/benchmarks/runner.js
  11. 0 8
      app/node_modules/socket.io/index.js
  12. 0 97
      app/node_modules/socket.io/lib/logger.js
  13. 0 1027
      app/node_modules/socket.io/lib/manager.js
  14. 0 355
      app/node_modules/socket.io/lib/namespace.js
  15. 0 249
      app/node_modules/socket.io/lib/parser.js
  16. 0 143
      app/node_modules/socket.io/lib/socket.io.js
  17. 0 369
      app/node_modules/socket.io/lib/socket.js
  18. 0 395
      app/node_modules/socket.io/lib/static.js
  19. 0 98
      app/node_modules/socket.io/lib/store.js
  20. 0 143
      app/node_modules/socket.io/lib/stores/memory.js
  21. 0 269
      app/node_modules/socket.io/lib/stores/redis.js
  22. 0 534
      app/node_modules/socket.io/lib/transport.js
  23. 0 129
      app/node_modules/socket.io/lib/transports/flashsocket.js
  24. 0 83
      app/node_modules/socket.io/lib/transports/htmlfile.js
  25. 0 147
      app/node_modules/socket.io/lib/transports/http-polling.js
  26. 0 121
      app/node_modules/socket.io/lib/transports/http.js
  27. 0 12
      app/node_modules/socket.io/lib/transports/index.js
  28. 0 97
      app/node_modules/socket.io/lib/transports/jsonp-polling.js
  29. 0 36
      app/node_modules/socket.io/lib/transports/websocket.js
  30. 0 362
      app/node_modules/socket.io/lib/transports/websocket/default.js
  31. 0 622
      app/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js
  32. 0 622
      app/node_modules/socket.io/lib/transports/websocket/hybi-16.js
  33. 0 11
      app/node_modules/socket.io/lib/transports/websocket/index.js
  34. 0 69
      app/node_modules/socket.io/lib/transports/xhr-polling.js
  35. 0 50
      app/node_modules/socket.io/lib/util.js
  36. 0 3
      app/node_modules/socket.io/node_modules/base64id/.npmignore
  37. 0 18
      app/node_modules/socket.io/node_modules/base64id/README.md
  38. 0 103
      app/node_modules/socket.io/node_modules/base64id/lib/base64id.js
  39. 0 28
      app/node_modules/socket.io/node_modules/base64id/package.json
  40. 0 1
      app/node_modules/socket.io/node_modules/policyfile/.npmignore
  41. 0 19
      app/node_modules/socket.io/node_modules/policyfile/LICENSE
  42. 0 7
      app/node_modules/socket.io/node_modules/policyfile/Makefile
  43. 0 98
      app/node_modules/socket.io/node_modules/policyfile/README.md
  44. 0 375
      app/node_modules/socket.io/node_modules/policyfile/doc/index.html
  45. 0 8
      app/node_modules/socket.io/node_modules/policyfile/examples/basic.fallback.js
  46. 0 5
      app/node_modules/socket.io/node_modules/policyfile/examples/basic.js
  47. 0 1
      app/node_modules/socket.io/node_modules/policyfile/index.js
  48. 0 289
      app/node_modules/socket.io/node_modules/policyfile/lib/server.js
  49. 0 39
      app/node_modules/socket.io/node_modules/policyfile/package.json
  50. 0 21
      app/node_modules/socket.io/node_modules/policyfile/tests/ssl/ssl.crt
  51. 0 27
      app/node_modules/socket.io/node_modules/policyfile/tests/ssl/ssl.private.key
  52. 0 231
      app/node_modules/socket.io/node_modules/policyfile/tests/unit.test.js
  53. 0 1
      app/node_modules/socket.io/node_modules/redis/.npmignore
  54. 0 691
      app/node_modules/socket.io/node_modules/redis/README.md
  55. 0 89
      app/node_modules/socket.io/node_modules/redis/benches/buffer_bench.js
  56. 0 38
      app/node_modules/socket.io/node_modules/redis/benches/hiredis_parser.js
  57. 0 14
      app/node_modules/socket.io/node_modules/redis/benches/re_sub_test.js
  58. 0 29
      app/node_modules/socket.io/node_modules/redis/benches/reconnect_test.js
  59. 0 16
      app/node_modules/socket.io/node_modules/redis/benches/stress/codec.js
  60. 0 38
      app/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/pub.js
  61. 0 10
      app/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/run
  62. 0 23
      app/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/server.js
  63. 0 49
      app/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/pub.js
  64. 0 6
      app/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/run
  65. 0 30
      app/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/server.js
  66. 0 13
      app/node_modules/socket.io/node_modules/redis/benches/stress/speed/00
  67. 0 13
      app/node_modules/socket.io/node_modules/redis/benches/stress/speed/plot
  68. BIN
      app/node_modules/socket.io/node_modules/redis/benches/stress/speed/size-rate.png
  69. 0 84
      app/node_modules/socket.io/node_modules/redis/benches/stress/speed/speed.js
  70. 0 18
      app/node_modules/socket.io/node_modules/redis/benches/sub_quit_test.js
  71. 0 219
      app/node_modules/socket.io/node_modules/redis/changelog.md
  72. 0 87
      app/node_modules/socket.io/node_modules/redis/diff_multi_bench_output.js
  73. 0 5
      app/node_modules/socket.io/node_modules/redis/examples/auth.js
  74. 0 33
      app/node_modules/socket.io/node_modules/redis/examples/backpressure_drain.js
  75. 0 9
      app/node_modules/socket.io/node_modules/redis/examples/eval.js
  76. 0 24
      app/node_modules/socket.io/node_modules/redis/examples/extend.js
  77. 0 32
      app/node_modules/socket.io/node_modules/redis/examples/file.js
  78. 0 5
      app/node_modules/socket.io/node_modules/redis/examples/mget.js
  79. 0 10
      app/node_modules/socket.io/node_modules/redis/examples/monitor.js
  80. 0 46
      app/node_modules/socket.io/node_modules/redis/examples/multi.js
  81. 0 29
      app/node_modules/socket.io/node_modules/redis/examples/multi2.js
  82. 0 33
      app/node_modules/socket.io/node_modules/redis/examples/psubscribe.js
  83. 0 41
      app/node_modules/socket.io/node_modules/redis/examples/pub_sub.js
  84. 0 24
      app/node_modules/socket.io/node_modules/redis/examples/simple.js
  85. 0 17
      app/node_modules/socket.io/node_modules/redis/examples/sort.js
  86. 0 15
      app/node_modules/socket.io/node_modules/redis/examples/subqueries.js
  87. 0 19
      app/node_modules/socket.io/node_modules/redis/examples/subquery.js
  88. 0 29
      app/node_modules/socket.io/node_modules/redis/examples/unix_socket.js
  89. 0 31
      app/node_modules/socket.io/node_modules/redis/examples/web_server.js
  90. 0 39
      app/node_modules/socket.io/node_modules/redis/generate_commands.js
  91. 0 1113
      app/node_modules/socket.io/node_modules/redis/index.js
  92. 0 147
      app/node_modules/socket.io/node_modules/redis/lib/commands.js
  93. 0 46
      app/node_modules/socket.io/node_modules/redis/lib/parser/hiredis.js
  94. 0 317
      app/node_modules/socket.io/node_modules/redis/lib/parser/javascript.js
  95. 0 61
      app/node_modules/socket.io/node_modules/redis/lib/queue.js
  96. 0 12
      app/node_modules/socket.io/node_modules/redis/lib/to_array.js
  97. 0 11
      app/node_modules/socket.io/node_modules/redis/lib/util.js
  98. 0 11
      app/node_modules/socket.io/node_modules/redis/mem.js
  99. 0 225
      app/node_modules/socket.io/node_modules/redis/multi_bench.js
  100. 0 26
      app/node_modules/socket.io/node_modules/redis/package.json

+ 1 - 2
.gitignore

@@ -169,5 +169,4 @@ config.php
 # cloud9 files
 .c9revisions
 
-app/node_modules/npm-debug.log
-app/node_modules/.bin
+app/node_modules

+ 0 - 3
app/node_modules/socket.io/.npmignore

@@ -1,3 +0,0 @@
-support
-test
-examples

+ 0 - 6
app/node_modules/socket.io/.travis.yml

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

+ 0 - 325
app/node_modules/socket.io/History.md

@@ -1,325 +0,0 @@
-
-0.9.16 / 2013-06-06
-===================
-
-  * transports: added tests for htmlfile escaping/unescaping
-
-0.9.15 / 2013-06-06
-===================
-
-  * transports: added escaping to htmlfile (fixes #1251)
-
-0.9.14 / 2013-03-29
-===================
-
-  * manager: fix memory leak with SSL [jpallen]
-
-0.9.13 / 2012-12-13
-===================
-
-  * package: fixed `base64id` requirement
-
-0.9.12 / 2012-12-13
-===================
-
-  * manager: fix for latest node which is returning a clone with `listeners` [viirya]
-
-0.9.11 / 2012-11-02
-===================
-
-  * package: move redis to optionalDependenices [3rd-Eden]
-  * bumped client
-
-0.9.10 / 2012-08-10
-===================
-
-  * Don't lowercase log messages
-  * Always set the HTTP response in case an error should be returned to the client
-  * Create or destroy the flash policy server on configuration change
-  * Honour configuration to disable flash policy server
-  * Add express 3.0 instructions on Readme.md
-  * Bump client
-
-0.9.9 / 2012-08-01
-==================
-
-  * Fixed sync disconnect xhrs handling
-  * Put license text in its own file (#965)
-  * Add warning to .listen() to ease the migration to Express 3.x
-  * Restored compatibility with node 0.4.x
-
-0.9.8 / 2012-07-24
-==================
-
-  * Bumped client.
-
-0.9.7 / 2012-07-24
-==================
-
-  * Prevent crash when socket leaves a room twice.
-  * Corrects unsafe usage of for..in
-  * Fix for node 0.8 with `gzip compression` [vadimi]
-  * Update redis to support Node 0.8.x
-  * Made ID generation securely random
-  * Fix Redis Store race condition in manager onOpen unsubscribe callback
-  * Fix for EventEmitters always reusing the same Array instance for listeners
-
-0.9.6 / 2012-04-17
-==================
-
-  * Fixed XSS in jsonp-polling.
-
-0.9.5 / 2012-04-05
-==================
-
-  * Added test for polling and socket close.
-  * Ensure close upon request close.
-  * Fix disconnection reason being lost for polling transports.
-  * Ensure that polling transports work with Connection: close.
-  * Log disconnection reason.
-
-0.9.4 / 2012-04-01
-==================
-
-  * Disconnecting from namespace improvement (#795) [DanielBaulig]
-  * Bumped client with polling reconnection loop (#438)
-
-0.9.3 / 2012-03-28
-==================
-
-  * Fix "Syntax error" on FF Web Console with XHR Polling [mikito]
-
-0.9.2 / 2012-03-13
-==================
-
-  * More sensible close `timeout default` (fixes disconnect issue)
-
-0.9.1-1 / 2012-03-02
-====================
-
-  * Bumped client with NPM dependency fix.
-
-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
-==================
-
-  * Fixed memory leaks in closed clients.
-  * Fixed memory leaks in namespaces.
-  * Fixed websocket handling for malformed requests from proxies. [einaros]
-  * Node 0.6 compatibility. [einaros] [3rd-Eden]
-  * Adapted tests and examples.
-
-0.8.6 / 2011-10-27 
-==================
-
-  * Added JSON decoding on jsonp-polling transport.
-  * Fixed README example.
-  * Major speed optimizations [3rd-Eden] [einaros] [visionmedia]
-  * Added decode/encode benchmarks [visionmedia]
-  * Added support for black-listing client sent events.
-  * Fixed logging options, closes #540 [3rd-Eden]
-  * Added vary header for gzip [3rd-Eden]
-  * Properly cleaned up async websocket / flashsocket tests, after patching node-websocket-client
-  * Patched to properly shut down when a finishClose call is made during connection establishment
-  * Added support for socket.io version on url and far-future Expires [3rd-Eden] [getify]
-  * Began IE10 compatibility [einaros] [tbranyen]
-  * Misc WebSocket fixes [einaros]
-  * Added UTF8 to respone headers for htmlfile [3rd-Eden]
-
-0.8.5 / 2011-10-07
-==================
-
-  * Added websocket draft HyBi-16 support. [einaros]
-  * Fixed websocket continuation bugs. [einaros]
-  * Fixed flashsocket transport name.
-  * Fixed websocket tests.
-  * Ensured `parser#decodePayload` doesn't choke.
-  * Added http referrer verification to manager verifyOrigin.
-  * Added access control for cross domain xhr handshakes [3rd-Eden]
-  * Added support for automatic generation of socket.io files [3rd-Eden]
-  * Added websocket binary support [einaros]
-  * Added gzip support for socket.io.js [3rd-Eden]
-  * Expose socket.transport [3rd-Eden]
-  * Updated client.
-
-0.8.4 / 2011-09-06
-==================
-
-  * Client build
-
-0.8.3 / 2011-09-03
-==================
-
-  * Fixed `\n` parsing for non-JSON packets (fixes #479).
-  * Fixed parsing of certain unicode characters (fixes #451).
-  * Fixed transport message packet logging.
-  * Fixed emission of `error` event resulting in an uncaught exception if unhandled (fixes #476).
-  * Fixed; allow for falsy values as the configuration value of `log level` (fixes #491).
-  * Fixed repository URI in `package.json`. Fixes #504.
-  * Added text/plain content-type to handshake responses [einaros]
-  * Improved single byte writes [einaros]
-  * Updated socket.io-flashsocket default port from 843 to 10843 [3rd-Eden]
-  * Updated client.
-
-0.8.2 / 2011-08-29
-==================
-
-  * Updated client.
-
-0.8.1 / 2011-08-29
-==================
-
-  * Fixed utf8 bug in send framing in websocket [einaros]
-  * Fixed typo in docs [Znarkus]
-  * Fixed bug in send framing for over 64kB of data in websocket [einaros]
-  * Corrected ping handling in websocket transport [einaros]
-
-0.8.0 / 2011-08-28
-==================
-
-  * Updated to work with two-level websocket versioning. [einaros]
-  * Added hybi07 support. [einaros]
-  * Added hybi10 support. [einaros]
-  * Added http referrer verification to manager.js verifyOrigin. [einaors]
-
-0.7.11 / 2011-08-27
-===================
-
-  * Updated socket.io-client.
-
-0.7.10 / 2011-08-27
-===================
-
-  * Updated socket.io-client.
-
-0.7.9 / 2011-08-12
-==================
-
-  * Updated socket.io-client.
-  * Make sure we only do garbage collection when the server we receive is actually run.
-
-0.7.8 / 2011-08-08
-==================
-
-  * Changed; make sure sio#listen passes options to both HTTP server and socket.io manager.
-  * Added docs for sio#listen.
-  * Added options parameter support for Manager constructor.
-  * Added memory leaks tests and test-leaks Makefile task.
-  * Removed auto npm-linking from make test.
-  * Make sure that you can disable heartbeats. [3rd-Eden]
-  * Fixed rooms memory leak [3rd-Eden]
-  * Send response once we got all POST data, not immediately [Pita]
-  * Fixed onLeave behavior with missing clientsk [3rd-Eden]
-  * Prevent duplicate references in rooms.
-  * Added alias for `to` to `in` and `in` to `to`.
-  * Fixed roomClients definition.
-  * Removed dependency on redis for installation without npm [3rd-Eden]
-  * Expose path and querystring in handshakeData [3rd-Eden]
-
-0.7.7 / 2011-07-12
-==================
-
-  * Fixed double dispatch handling with emit to closed clients.
-  * Added test for emitting to closed clients to prevent regression.
-  * Fixed race condition in redis test.
-  * Changed Transport#end instrumentation.
-  * Leveraged $emit instead of emit internally.
-  * Made tests faster.
-  * Fixed double disconnect events.
-  * Fixed disconnect logic
-  * Simplified remote events handling in Socket.
-  * Increased testcase timeout.
-  * Fixed unknown room emitting (GH-291). [3rd-Eden]
-  * Fixed `address` in handshakeData. [3rd-Eden]
-  * Removed transports definition in chat example.
-  * Fixed room cleanup
-  * Fixed; make sure the client is cleaned up after booting.
-  * Make sure to mark the client as non-open if the connection is closed.
-  * Removed unneeded `buffer` declarations.
-  * Fixed; make sure to clear socket handlers and subscriptions upon transport close.
-
-0.7.6 / 2011-06-30
-==================
-
-  * Fixed general dispatching when a client has closed.
-
-0.7.5 / 2011-06-30
-==================
-
-  * Fixed dispatching to clients that are disconnected.
-
-0.7.4 / 2011-06-30
-==================
-
-  * Fixed; only clear handlers if they were set. [level09]
-
-0.7.3 / 2011-06-30
-==================
-
-  * Exposed handshake data to clients.
-  * Refactored dispatcher interface.
-  * Changed; Moved id generation method into the manager.
-  * Added sub-namespace authorization. [3rd-Eden]
-  * Changed; normalized SocketNamespace local eventing [dvv]
-  * Changed; Use packet.reason or default to 'packet' [3rd-Eden]
-  * Changed console.error to console.log.
-  * Fixed; bind both servers at the same time do that the test never times out.
-  * Added 304 support.
-  * Removed `Transport#name` for abstract interface.
-  * Changed; lazily require http and https module only when needed. [3rd-Eden]
-
-0.7.2 / 2011-06-22
-==================
-
-  * Make sure to write a packet (of type `noop`) when closing a poll.
-    This solves a problem with cross-domain requests being flagged as aborted and
-    reconnection being triggered.
-  * Added `noop` message type.
-
-0.7.1 / 2011-06-21 
-==================
-
-  * Fixed cross-domain XHR.
-  * Added CORS test to xhr-polling suite.
-
-0.7.0 / 2010-06-21
-==================
-
-  * http://socket.io/announcement.html

+ 0 - 22
app/node_modules/socket.io/LICENSE

@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2011 Guillermo Rauch <[email protected]>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 31
app/node_modules/socket.io/Makefile

@@ -1,31 +0,0 @@
-
-ALL_TESTS = $(shell find test/ -name '*.test.js')
-ALL_BENCH = $(shell find benchmarks -name '*.bench.js')
-
-run-tests:
-	@./node_modules/.bin/expresso \
-		-t 3000 \
-		-I support \
-		--serial \
-		$(TESTFLAGS) \
-		$(TESTS)
-
-test:
-	@$(MAKE) NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests
-
-test-cov:
-	@TESTFLAGS=--cov $(MAKE) test
-
-test-leaks:
-	@ls test/leaks/* | xargs node --expose_debug_as=debug --expose_gc
-
-run-bench:
-	@node $(PROFILEFLAGS) benchmarks/runner.js
-
-bench:
-	@$(MAKE) BENCHMARKS="$(ALL_BENCH)" run-bench
-
-profile:
-	@PROFILEFLAGS='--prof --trace-opt --trace-bailout --trace-deopt' $(MAKE) bench
-
-.PHONY: test bench profile

+ 0 - 364
app/node_modules/socket.io/Readme.md

@@ -1,364 +0,0 @@
-# Socket.IO
-
-Socket.IO is a Node.JS project that makes WebSockets and realtime possible in
-all browsers. It also enhances WebSockets by providing built-in multiplexing,
-horizontal scalability, automatic JSON encoding/decoding, and more.
-
-## How to Install
-
-```bash
-npm install socket.io
-```
-
-## How to use
-
-First, require `socket.io`:
-
-```js
-var io = require('socket.io');
-```
-
-Next, attach it to a HTTP/HTTPS server. If you're using the fantastic `express`
-web framework:
-
-#### Express 3.x
-
-```js
-var app = express()
-  , server = require('http').createServer(app)
-  , io = io.listen(server);
-
-server.listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.emit('news', { hello: 'world' });
-  socket.on('my other event', function (data) {
-    console.log(data);
-  });
-});
-```
-
-#### Express 2.x
-
-```js
-var app = express.createServer()
-  , io = io.listen(app);
-
-app.listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.emit('news', { hello: 'world' });
-  socket.on('my other event', function (data) {
-    console.log(data);
-  });
-});
-```
-
-Finally, load it from the client side code:
-
-```html
-<script src="/socket.io/socket.io.js"></script>
-<script>
-  var socket = io.connect('http://localhost');
-  socket.on('news', function (data) {
-    console.log(data);
-    socket.emit('my other event', { my: 'data' });
-  });
-</script>
-```
-
-For more thorough examples, look at the `examples/` directory.
-
-## Short recipes
-
-### Sending and receiving events.
-
-Socket.IO allows you to emit and receive custom events.
-Besides `connect`, `message` and `disconnect`, you can emit custom events:
-
-```js
-// note, io.listen(<port>) will create a http server for you
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  io.sockets.emit('this', { will: 'be received by everyone' });
-
-  socket.on('private message', function (from, msg) {
-    console.log('I received a private message by ', from, ' saying ', msg);
-  });
-
-  socket.on('disconnect', function () {
-    io.sockets.emit('user disconnected');
-  });
-});
-```
-
-### Storing data associated to a client
-
-Sometimes it's necessary to store data associated with a client that's
-necessary for the duration of the session.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.on('set nickname', function (name) {
-    socket.set('nickname', name, function () { socket.emit('ready'); });
-  });
-
-  socket.on('msg', function () {
-    socket.get('nickname', function (err, name) {
-      console.log('Chat message by ', name);
-    });
-  });
-});
-```
-
-#### Client side
-
-```html
-<script>
-  var socket = io.connect('http://localhost');
-
-  socket.on('connect', function () {
-    socket.emit('set nickname', prompt('What is your nickname?'));
-    socket.on('ready', function () {
-      console.log('Connected !');
-      socket.emit('msg', prompt('What is your message?'));
-    });
-  });
-</script>
-```
-
-### Restricting yourself to a namespace
-
-If you have control over all the messages and events emitted for a particular
-application, using the default `/` namespace works.
-
-If you want to leverage 3rd-party code, or produce code to share with others,
-socket.io provides a way of namespacing a `socket`.
-
-This has the benefit of `multiplexing` a single connection. Instead of
-socket.io using two `WebSocket` connections, it'll use one.
-
-The following example defines a socket that listens on '/chat' and one for
-'/news':
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-var chat = io
-  .of('/chat')
-  .on('connection', function (socket) {
-    socket.emit('a message', { that: 'only', '/chat': 'will get' });
-    chat.emit('a message', { everyone: 'in', '/chat': 'will get' });
-  });
-
-var news = io
-  .of('/news');
-  .on('connection', function (socket) {
-    socket.emit('item', { news: 'item' });
-  });
-```
-
-#### Client side:
-
-```html
-<script>
-  var chat = io.connect('http://localhost/chat')
-    , news = io.connect('http://localhost/news');
-
-  chat.on('connect', function () {
-    chat.emit('hi!');
-  });
-
-  news.on('news', function () {
-    news.emit('woot');
-  });
-</script>
-```
-
-### Sending volatile messages.
-
-Sometimes certain messages can be dropped. Let's say you have an app that
-shows realtime tweets for the keyword `bieber`. 
-
-If a certain client is not ready to receive messages (because of network slowness
-or other issues, or because he's connected through long polling and is in the
-middle of a request-response cycle), if he doesn't receive ALL the tweets related
-to bieber your application won't suffer.
-
-In that case, you might want to send those messages as volatile messages.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  var tweets = setInterval(function () {
-    getBieberTweet(function (tweet) {
-      socket.volatile.emit('bieber tweet', tweet);
-    });
-  }, 100);
-
-  socket.on('disconnect', function () {
-    clearInterval(tweets);
-  });
-});
-```
-
-#### Client side
-
-In the client side, messages are received the same way whether they're volatile
-or not.
-
-### Getting acknowledgements
-
-Sometimes, you might want to get a callback when the client confirmed the message
-reception.
-
-To do this, simply pass a function as the last parameter of `.send` or `.emit`.
-What's more, when you use `.emit`, the acknowledgement is done by you, which
-means you can also pass data along:
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.on('ferret', function (name, fn) {
-    fn('woot');
-  });
-});
-```
-
-#### Client side
-
-```html
-<script>
-  var socket = io.connect(); // TIP: .connect with no args does auto-discovery
-  socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
-    socket.emit('ferret', 'tobi', function (data) {
-      console.log(data); // data will be 'woot'
-    });
-  });
-</script>
-```
-
-### Broadcasting messages
-
-To broadcast, simply add a `broadcast` flag to `emit` and `send` method calls.
-Broadcasting means sending a message to everyone else except for the socket
-that starts it.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.broadcast.emit('user connected');
-  socket.broadcast.json.send({ a: 'message' });
-});
-```
-
-### Rooms
-
-Sometimes you want to put certain sockets in the same room, so that it's easy
-to broadcast to all of them together.
-
-Think of this as built-in channels for sockets. Sockets `join` and `leave`
-rooms in each socket.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.join('justin bieber fans');
-  socket.broadcast.to('justin bieber fans').emit('new fan');
-  io.sockets.in('rammstein fans').emit('new non-fan');
-});
-```
-
-### Using it just as a cross-browser WebSocket
-
-If you just want the WebSocket semantics, you can do that too.
-Simply leverage `send` and listen on the `message` event:
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.on('message', function () { });
-  socket.on('disconnect', function () { });
-});
-```
-
-#### Client side
-
-```html
-<script>
-  var socket = io.connect('http://localhost/');
-  socket.on('connect', function () {
-    socket.send('hi');
-
-    socket.on('message', function (msg) {
-      // my msg
-    });
-  });
-</script>
-```
-
-### Changing configuration
-
-Configuration in socket.io is TJ-style:
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.configure(function () {
-  io.set('transports', ['websocket', 'flashsocket', 'xhr-polling']);
-});
-
-io.configure('development', function () {
-  io.set('transports', ['websocket', 'xhr-polling']);
-  io.enable('log');
-});
-```
-
-## License 
-
-(The MIT License)
-
-Copyright (c) 2011 Guillermo Rauch &lt;[email protected]&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 64
app/node_modules/socket.io/benchmarks/decode.bench.js

@@ -1,64 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var benchmark = require('benchmark')
-  , colors = require('colors')
-  , io = require('../')
-  , parser = io.parser
-  , suite = new benchmark.Suite('Decode packet');
-
-suite.add('string', function () {
-  parser.decodePacket('4:::"2"');
-});
-
-suite.add('event', function () {
-  parser.decodePacket('5:::{"name":"woot"}');
-});
-
-suite.add('event+ack', function () {
-  parser.decodePacket('5:1+::{"name":"tobi"}');
-});
-
-suite.add('event+data', function () {
-  parser.decodePacket('5:::{"name":"edwald","args":[{"a": "b"},2,"3"]}');
-});
-
-suite.add('heartbeat', function () {
-  parser.decodePacket('2:::');
-});
-
-suite.add('error', function () {
-  parser.decodePacket('7:::2+0');
-});
-
-var payload = parser.encodePayload([
-    parser.encodePacket({ type: 'message', data: '5', endpoint: '' })
-  , parser.encodePacket({ type: 'message', data: '53d', endpoint: '' })
-  , parser.encodePacket({ type: 'message', data: 'foobar', endpoint: '' })
-  , parser.encodePacket({ type: 'message', data: 'foobarbaz', endpoint: '' })
-  , parser.encodePacket({ type: 'message', data: 'foobarbazfoobarbaz', endpoint: '' })
-  , parser.encodePacket({ type: 'message', data: 'foobarbaz', endpoint: '' })
-  , parser.encodePacket({ type: 'message', data: 'foobar', endpoint: '' })
-]);
-
-suite.add('payload', function () {
-  parser.decodePayload(payload);
-});
-
-suite.on('cycle', function (bench, details) {
-  console.log('\n' + suite.name.grey, details.name.white.bold);
-  console.log([
-      details.hz.toFixed(2).cyan + ' ops/sec'.grey
-    , details.count.toString().white + ' times executed'.grey
-    , 'benchmark took '.grey + details.times.elapsed.toString().white + ' sec.'.grey
-    , 
-  ].join(', '.grey));
-});
-
-if (!module.parent) {
-  suite.run();
-} else {
-  module.exports = suite;
-}

+ 0 - 90
app/node_modules/socket.io/benchmarks/encode.bench.js

@@ -1,90 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var benchmark = require('benchmark')
-  , colors = require('colors')
-  , io = require('../')
-  , parser = io.parser
-  , suite = new benchmark.Suite('Encode packet');
-
-suite.add('string', function () {
-  parser.encodePacket({
-      type: 'json'
-    , endpoint: ''
-    , data: '2'
-  });
-});
-
-suite.add('event', function () {
-  parser.encodePacket({
-      type: 'event'
-    , name: 'woot'
-    , endpoint: ''
-    , args: []
-  });
-});
-
-suite.add('event+ack', function () {
-  parser.encodePacket({
-      type: 'json'
-    , id: 1
-    , ack: 'data'
-    , endpoint: ''
-    , data: { a: 'b' }
-  });
-});
-
-suite.add('event+data', function () {
-  parser.encodePacket({
-      type: 'event'
-    , name: 'edwald'
-    , endpoint: ''
-    , args: [{a: 'b'}, 2, '3']
-  });
-});
-
-suite.add('heartbeat', function () {
-  parser.encodePacket({
-      type: 'heartbeat'
-    , endpoint: ''
-  })
-});
-
-suite.add('error', function () {
-  parser.encodePacket({
-      type: 'error'
-    , reason: 'unauthorized'
-    , advice: 'reconnect'
-    , endpoint: ''
-  })
-})
-
-suite.add('payload', function () {
-  parser.encodePayload([
-      parser.encodePacket({ type: 'message', data: '5', endpoint: '' })
-    , parser.encodePacket({ type: 'message', data: '53d', endpoint: '' })
-    , parser.encodePacket({ type: 'message', data: 'foobar', endpoint: '' })
-    , parser.encodePacket({ type: 'message', data: 'foobarbaz', endpoint: '' })
-    , parser.encodePacket({ type: 'message', data: 'foobarbazfoobarbaz', endpoint: '' })
-    , parser.encodePacket({ type: 'message', data: 'foobarbaz', endpoint: '' })
-    , parser.encodePacket({ type: 'message', data: 'foobar', endpoint: '' })
-  ]);
-});
-
-suite.on('cycle', function (bench, details) {
-  console.log('\n' + suite.name.grey, details.name.white.bold);
-  console.log([
-      details.hz.toFixed(2).cyan + ' ops/sec'.grey
-    , details.count.toString().white + ' times executed'.grey
-    , 'benchmark took '.grey + details.times.elapsed.toString().white + ' sec.'.grey
-    , 
-  ].join(', '.grey));
-});
-
-if (!module.parent) {
-  suite.run();
-} else {
-  module.exports = suite;
-}

+ 0 - 55
app/node_modules/socket.io/benchmarks/runner.js

@@ -1,55 +0,0 @@
-/**
- * Benchmark runner dependencies
- */
-
-var colors = require('colors')
-  , path = require('path');
-
-/**
- * Find all the benchmarks
- */
-
-var benchmarks_files = process.env.BENCHMARKS.split(' ')
-  , all = [].concat(benchmarks_files)
-  , first = all.shift()
-  , benchmarks = {};
-
-// find the benchmarks and load them all in our obj
-benchmarks_files.forEach(function (file) {
-  benchmarks[file] = require(path.join(__dirname, '..', file));
-});
-
-// setup the complete listeners
-benchmarks_files.forEach(function (file) {
-  var benchmark = benchmarks[file]
-    , next_file = all.shift()
-    , next = benchmarks[next_file];
-
-  /**
-   * Generate a oncomplete function for the tests, either we are done or we
-   * have more benchmarks to process.
-   */
-
-   function complete () {
-      if (!next) {
-        console.log(
-          '\n\nBenchmark completed in'.grey
-        , (Date.now() - start).toString().green + ' ms'.grey
-        );
-      } else {
-        console.log('\nStarting benchmark '.grey + next_file.yellow);
-        next.run();
-      }
-   }
-
-   // attach the listener
-   benchmark.on('complete', complete);
-});
-
-/**
- * Start the benchmark
- */
-
-var start = Date.now();
-console.log('Starting benchmark '.grey + first.yellow);
-benchmarks[first].run();

+ 0 - 8
app/node_modules/socket.io/index.js

@@ -1,8 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-module.exports = require('./lib/socket.io');

+ 0 - 97
app/node_modules/socket.io/lib/logger.js

@@ -1,97 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var util = require('./util')
-  , toArray = util.toArray;
-
-/**
- * Log levels.
- */
-
-var levels = [
-    'error'
-  , 'warn'
-  , 'info'
-  , 'debug'
-];
-
-/**
- * Colors for log levels.
- */
-
-var colors = [
-    31
-  , 33
-  , 36
-  , 90
-];
-
-/**
- * Pads the nice output to the longest log level.
- */
-
-function pad (str) {
-  var max = 0;
-
-  for (var i = 0, l = levels.length; i < l; i++)
-    max = Math.max(max, levels[i].length);
-
-  if (str.length < max)
-    return str + new Array(max - str.length + 1).join(' ');
-
-  return str;
-};
-
-/**
- * Logger (console).
- *
- * @api public
- */
-
-var Logger = module.exports = function (opts) {
-  opts = opts || {}
-  this.colors = false !== opts.colors;
-  this.level = 3;
-  this.enabled = true;
-};
-
-/**
- * Log method.
- *
- * @api public
- */
-
-Logger.prototype.log = function (type) {
-  var index = levels.indexOf(type);
-
-  if (index > this.level || !this.enabled)
-    return this;
-
-  console.log.apply(
-      console
-    , [this.colors
-        ? '   \033[' + colors[index] + 'm' + pad(type) + ' -\033[39m'
-        : type + ':'
-      ].concat(toArray(arguments).slice(1))
-  );
-
-  return this;
-};
-
-/**
- * Generate methods.
- */
-
-levels.forEach(function (name) {
-  Logger.prototype[name] = function () {
-    this.log.apply(this, [name].concat(toArray(arguments)));
-  };
-});

+ 0 - 1027
app/node_modules/socket.io/lib/manager.js

@@ -1,1027 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs')
-  , url = require('url')
-  , tty = require('tty')
-  , crypto = require('crypto')
-  , util = require('./util')
-  , store = require('./store')
-  , client = require('socket.io-client')
-  , transports = require('./transports')
-  , Logger = require('./logger')
-  , Socket = require('./socket')
-  , MemoryStore = require('./stores/memory')
-  , SocketNamespace = require('./namespace')
-  , Static = require('./static')
-  , EventEmitter = process.EventEmitter;
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = Manager;
-
-/**
- * Default transports.
- */
-
-var defaultTransports = exports.defaultTransports = [
-    'websocket'
-  , 'htmlfile'
-  , 'xhr-polling'
-  , 'jsonp-polling'
-];
-
-/**
- * Inherited defaults.
- */
-
-var parent = module.parent.exports
-  , protocol = parent.protocol
-  , jsonpolling_re = /^\d+$/;
-
-/**
- * Manager constructor.
- *
- * @param {HTTPServer} server
- * @param {Object} options, optional
- * @api public
- */
-
-function Manager (server, options) {
-  this.server = server;
-  this.namespaces = {};
-  this.sockets = this.of('');
-  this.settings = {
-      origins: '*:*'
-    , log: true
-    , store: new MemoryStore
-    , logger: new Logger
-    , static: new Static(this)
-    , heartbeats: true
-    , resource: '/socket.io'
-    , transports: defaultTransports
-    , authorization: false
-    , blacklist: ['disconnect']
-    , 'log level': 3
-    , 'log colors': tty.isatty(process.stdout.fd)
-    , 'close timeout': 60
-    , '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
-    , 'browser client etag': false
-    , 'browser client expires': 315360000
-    , 'browser client gzip': false
-    , 'browser client handler': false
-    , 'client store expiration': 15
-    , 'match origin protocol': false
-  };
-
-  for (var i in options) {
-    if (options.hasOwnProperty(i)) {
-      this.settings[i] = options[i];
-    }
-  }
-
-  var self = this;
-
-  // default error handler
-  server.on('error', function(err) {
-    self.log.warn('error raised: ' + err);
-  });
-
-  this.initStore();
-
-  this.on('set:store', function() {
-    self.initStore();
-  });
-
-  // reset listeners
-  this.oldListeners = server.listeners('request').splice(0);
-  server.removeAllListeners('request');
-
-  server.on('request', function (req, res) {
-    self.handleRequest(req, res);
-  });
-
-  server.on('upgrade', function (req, socket, head) {
-    self.handleUpgrade(req, socket, head);
-  });
-
-  server.on('close', function () {
-    clearInterval(self.gc);
-  });
-
-  server.once('listening', function () {
-    self.gc = setInterval(self.garbageCollection.bind(self), 10000);
-  });
-
-  for (var i in transports) {
-    if (transports.hasOwnProperty(i)) {
-      if (transports[i].init) {
-        transports[i].init(this);
-      }
-    }
-  }
-
-  // forward-compatibility with 1.0
-  var self = this;
-  this.sockets.on('connection', function (conn) {
-    self.emit('connection', conn);
-  });
-
-  this.sequenceNumber = Date.now() | 0;
- 
-  this.log.info('socket.io started');
-};
-
-Manager.prototype.__proto__ = EventEmitter.prototype
-
-/**
- * Store accessor shortcut.
- *
- * @api public
- */
-
-Manager.prototype.__defineGetter__('store', function () {
-  var store = this.get('store');
-  store.manager = this;
-  return store;
-});
-
-/**
- * Logger accessor.
- *
- * @api public
- */
-
-Manager.prototype.__defineGetter__('log', function () {
-  var logger = this.get('logger');
-
-  logger.level = this.get('log level') || -1;
-  logger.colors = this.get('log colors');
-  logger.enabled = this.enabled('log');
-
-  return logger;
-});
-
-/**
- * Static accessor.
- *
- * @api public
- */
-
-Manager.prototype.__defineGetter__('static', function () {
-  return this.get('static');
-});
-
-/**
- * Get settings.
- *
- * @api public
- */
-
-Manager.prototype.get = function (key) {
-  return this.settings[key];
-};
-
-/**
- * Set settings
- *
- * @api public
- */
-
-Manager.prototype.set = function (key, value) {
-  if (arguments.length == 1) return this.get(key);
-  this.settings[key] = value;
-  this.emit('set:' + key, this.settings[key], key);
-  return this;
-};
-
-/**
- * Enable a setting
- *
- * @api public
- */
-
-Manager.prototype.enable = function (key) {
-  this.settings[key] = true;
-  this.emit('set:' + key, this.settings[key], key);
-  return this;
-};
-
-/**
- * Disable a setting
- *
- * @api public
- */
-
-Manager.prototype.disable = function (key) {
-  this.settings[key] = false;
-  this.emit('set:' + key, this.settings[key], key);
-  return this;
-};
-
-/**
- * Checks if a setting is enabled
- *
- * @api public
- */
-
-Manager.prototype.enabled = function (key) {
-  return !!this.settings[key];
-};
-
-/**
- * Checks if a setting is disabled
- *
- * @api public
- */
-
-Manager.prototype.disabled = function (key) {
-  return !this.settings[key];
-};
-
-/**
- * Configure callbacks.
- *
- * @api public
- */
-
-Manager.prototype.configure = function (env, fn) {
-  if ('function' == typeof env) {
-    env.call(this);
-  } else if (env == (process.env.NODE_ENV || 'development')) {
-    fn.call(this);
-  }
-
-  return this;
-};
-
-/**
- * Initializes everything related to the message dispatcher.
- *
- * @api private
- */
-
-Manager.prototype.initStore = function () {
-  this.handshaken = {};
-  this.connected = {};
-  this.open = {};
-  this.closed = {};
-  this.rooms = {};
-  this.roomClients = {};
-
-  var self = this;
-
-  this.store.subscribe('handshake', function (id, data) {
-    self.onHandshake(id, data);
-  });
-
-  this.store.subscribe('connect', function (id) {
-    self.onConnect(id);
-  });
-
-  this.store.subscribe('open', function (id) {
-    self.onOpen(id);
-  });
-
-  this.store.subscribe('join', function (id, room) {
-    self.onJoin(id, room);
-  });
-
-  this.store.subscribe('leave', function (id, room) {
-    self.onLeave(id, room);
-  });
-
-  this.store.subscribe('close', function (id) {
-    self.onClose(id);
-  });
-
-  this.store.subscribe('dispatch', function (room, packet, volatile, exceptions) {
-    self.onDispatch(room, packet, volatile, exceptions);
-  });
-
-  this.store.subscribe('disconnect', function (id) {
-    self.onDisconnect(id);
-  });
-};
-
-/**
- * Called when a client handshakes.
- *
- * @param text
- */
-
-Manager.prototype.onHandshake = function (id, data) {
-  this.handshaken[id] = data;
-};
-
-/**
- * Called when a client connects (ie: transport first opens)
- *
- * @api private
- */
-
-Manager.prototype.onConnect = function (id) {
-  this.connected[id] = true;
-};
-
-/**
- * Called when a client opens a request in a different node.
- *
- * @api private
- */
-
-Manager.prototype.onOpen = function (id) {
-  this.open[id] = true;
-
-  if (this.closed[id]) {
-    var self = this;
-
-    this.store.unsubscribe('dispatch:' + id, function () {
-      var transport = self.transports[id];
-      if (self.closed[id] && self.closed[id].length && transport) {
-
-        // if we have buffered messages that accumulate between calling
-        // onOpen an this async callback, send them if the transport is 
-        // still open, otherwise leave them buffered
-        if (transport.open) {
-          transport.payload(self.closed[id]);
-          self.closed[id] = [];
-        }
-      }
-    });
-  }
-
-  // clear the current transport
-  if (this.transports[id]) {
-    this.transports[id].discard();
-    this.transports[id] = null;
-  }
-};
-
-/**
- * Called when a message is sent to a namespace and/or room.
- *
- * @api private
- */
-
-Manager.prototype.onDispatch = function (room, packet, volatile, exceptions) {
-  if (this.rooms[room]) {
-    for (var i = 0, l = this.rooms[room].length; i < l; i++) {
-      var id = this.rooms[room][i];
-
-      if (!~exceptions.indexOf(id)) {
-        if (this.transports[id] && this.transports[id].open) {
-          this.transports[id].onDispatch(packet, volatile);
-        } else if (!volatile) {
-          this.onClientDispatch(id, packet);
-        }
-      }
-    }
-  }
-};
-
-/**
- * Called when a client joins a nsp / room.
- *
- * @api private
- */
-
-Manager.prototype.onJoin = function (id, name) {
-  if (!this.roomClients[id]) {
-    this.roomClients[id] = {};
-  }
-
-  if (!this.rooms[name]) {
-    this.rooms[name] = [];
-  }
-
-  if (!~this.rooms[name].indexOf(id)) {
-    this.rooms[name].push(id);
-    this.roomClients[id][name] = true;
-  }
-};
-
-/**
- * Called when a client leaves a nsp / room.
- *
- * @param private
- */
-
-Manager.prototype.onLeave = function (id, room) {
-  if (this.rooms[room]) {
-    var index = this.rooms[room].indexOf(id);
-
-    if (index >= 0) {
-      this.rooms[room].splice(index, 1);
-    }
-
-    if (!this.rooms[room].length) {
-      delete this.rooms[room];
-    }
-
-    if (this.roomClients[id]) {
-      delete this.roomClients[id][room];
-    }
-  }
-};
-
-/**
- * Called when a client closes a request in different node.
- *
- * @api private
- */
-
-Manager.prototype.onClose = function (id) {
-  if (this.open[id]) {
-    delete this.open[id];
-  }
-
-  this.closed[id] = [];
-
-  var self = this;
-
-  this.store.subscribe('dispatch:' + id, function (packet, volatile) {
-    if (!volatile) {
-      self.onClientDispatch(id, packet);
-    }
-  });
-};
-
-/**
- * Dispatches a message for a closed client.
- *
- * @api private
- */
-
-Manager.prototype.onClientDispatch = function (id, packet) {
-  if (this.closed[id]) {
-    this.closed[id].push(packet);
-  }
-};
-
-/**
- * Receives a message for a client.
- *
- * @api private
- */
-
-Manager.prototype.onClientMessage = function (id, packet) {
-  if (this.namespaces[packet.endpoint]) {
-    this.namespaces[packet.endpoint].handlePacket(id, packet);
-  }
-};
-
-/**
- * Fired when a client disconnects (not triggered).
- *
- * @api private
- */
-
-Manager.prototype.onClientDisconnect = function (id, reason) {
-  for (var name in this.namespaces) {
-    if (this.namespaces.hasOwnProperty(name)) {
-      this.namespaces[name].handleDisconnect(id, reason, typeof this.roomClients[id] !== 'undefined' &&
-        typeof this.roomClients[id][name] !== 'undefined');
-    }
-  }
-
-  this.onDisconnect(id);
-};
-
-/**
- * Called when a client disconnects.
- *
- * @param text
- */
-
-Manager.prototype.onDisconnect = function (id, local) {
-  delete this.handshaken[id];
-
-  if (this.open[id]) {
-    delete this.open[id];
-  }
-
-  if (this.connected[id]) {
-    delete this.connected[id];
-  }
-
-  if (this.transports[id]) {
-    this.transports[id].discard();
-    delete this.transports[id];
-  }
-
-  if (this.closed[id]) {
-    delete this.closed[id];
-  }
-
-  if (this.roomClients[id]) {
-    for (var room in this.roomClients[id]) {
-      if (this.roomClients[id].hasOwnProperty(room)) {
-        this.onLeave(id, room);
-      }
-    }
-    delete this.roomClients[id]
-  }
-
-  this.store.destroyClient(id, this.get('client store expiration'));
-
-  this.store.unsubscribe('dispatch:' + id);
-
-  if (local) {
-    this.store.unsubscribe('message:' + id);
-    this.store.unsubscribe('disconnect:' + id);
-  }
-};
-
-/**
- * Handles an HTTP request.
- *
- * @api private
- */
-
-Manager.prototype.handleRequest = function (req, res) {
-  var data = this.checkRequest(req);
-
-  if (!data) {
-    for (var i = 0, l = this.oldListeners.length; i < l; i++) {
-      this.oldListeners[i].call(this.server, req, res);
-    }
-
-    return;
-  }
-
-  if (data.static || !data.transport && !data.protocol) {
-    if (data.static && this.enabled('browser client')) {
-      this.static.write(data.path, req, res);
-    } else {
-      res.writeHead(200);
-      res.end('Welcome to socket.io.');
-
-      this.log.info('unhandled socket.io url');
-    }
-
-    return;
-  }
-
-  if (data.protocol != protocol) {
-    res.writeHead(500);
-    res.end('Protocol version not supported.');
-
-    this.log.info('client protocol version unsupported');
-  } else {
-    if (data.id) {
-      this.handleHTTPRequest(data, req, res);
-    } else {
-      this.handleHandshake(data, req, res);
-    }
-  }
-};
-
-/**
- * Handles an HTTP Upgrade.
- *
- * @api private
- */
-
-Manager.prototype.handleUpgrade = function (req, socket, head) {
-  var data = this.checkRequest(req)
-    , self = this;
-
-  if (!data) {
-    if (this.enabled('destroy upgrade')) {
-      socket.end();
-      this.log.debug('destroying non-socket.io upgrade');
-    }
-
-    return;
-  }
-
-  req.head = head;
-  this.handleClient(data, req);
-  req.head = null;
-};
-
-/**
- * Handles a normal handshaken HTTP request (eg: long-polling)
- *
- * @api private
- */
-
-Manager.prototype.handleHTTPRequest = function (data, req, res) {
-  req.res = res;
-  this.handleClient(data, req);
-};
-
-/**
- * Intantiantes a new client.
- *
- * @api private
- */
-
-Manager.prototype.handleClient = function (data, req) {
-  var socket = req.socket
-    , store = this.store
-    , self = this;
-
-  // handle sync disconnect xhrs
-  if (undefined != data.query.disconnect) {
-    if (this.transports[data.id] && this.transports[data.id].open) {
-      this.transports[data.id].onForcedDisconnect();
-    } else {
-      this.store.publish('disconnect-force:' + data.id);
-    }
-    req.res.writeHead(200);
-    req.res.end();
-    return;
-  }
-
-  if (!~this.get('transports').indexOf(data.transport)) {
-    this.log.warn('unknown transport: "' + data.transport + '"');
-    req.connection.end();
-    return;
-  }
-
-  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) {
-        transport.payload(this.closed[data.id]);
-        this.closed[data.id] = [];
-      }
-
-      this.onOpen(data.id);
-      this.store.publish('open', data.id);
-      this.transports[data.id] = transport;
-    }
-
-    if (!this.connected[data.id]) {
-      this.onConnect(data.id);
-      this.store.publish('connect', data.id);
-
-      // flag as used
-      delete handshaken.issued;
-      this.onHandshake(data.id, handshaken);
-      this.store.publish('handshake', data.id, handshaken);
-
-      // initialize the socket for all namespaces
-      for (var i in this.namespaces) {
-        if (this.namespaces.hasOwnProperty(i)) {
-          var socket = this.namespaces[i].socket(data.id, true);
-
-          // echo back connect packet and fire connection event
-          if (i === '') {
-            this.namespaces[i].handlePacket(data.id, { type: 'connect' });
-          }
-        }
-      }
-
-      this.store.subscribe('message:' + data.id, function (packet) {
-        self.onClientMessage(data.id, packet);
-      });
-
-      this.store.subscribe('disconnect:' + data.id, function (reason) {
-        self.onClientDisconnect(data.id, reason);
-      });
-    }
-  } else {
-    if (transport.open) {
-      transport.error('client not handshaken', 'reconnect');
-    }
-
-    transport.discard();
-  }
-};
-
-/**
- * Generates a session id.
- *
- * @api private
- */
-
-Manager.prototype.generateId = function () {
-  var rand = new Buffer(15); // multiple of 3 for base64
-  if (!rand.writeInt32BE) {
-    return Math.abs(Math.random() * Math.random() * Date.now() | 0).toString()
-      + Math.abs(Math.random() * Math.random() * Date.now() | 0).toString();
-  }
-  this.sequenceNumber = (this.sequenceNumber + 1) | 0;
-  rand.writeInt32BE(this.sequenceNumber, 11);
-  if (crypto.randomBytes) {
-    crypto.randomBytes(12).copy(rand);
-  } else {
-    // not secure for node 0.4
-    [0, 4, 8].forEach(function(i) {
-      rand.writeInt32BE(Math.random() * Math.pow(2, 32) | 0, i);
-    });
-  }
-  return rand.toString('base64').replace(/\//g, '_').replace(/\+/g, '-');
-};
-
-/**
- * Handles a handshake request.
- *
- * @api private
- */
-
-Manager.prototype.handleHandshake = function (data, req, res) {
-  var self = this
-    , origin = req.headers.origin
-    , headers = {
-        'Content-Type': 'text/plain'
-    };
-
-  function writeErr (status, message) {
-    if (data.query.jsonp && jsonpolling_re.test(data.query.jsonp)) {
-      res.writeHead(200, { 'Content-Type': 'application/javascript' });
-      res.end('io.j[' + data.query.jsonp + '](new Error("' + message + '"));');
-    } else {
-      res.writeHead(status, headers);
-      res.end(message);
-    }
-  };
-
-  function error (err) {
-    writeErr(500, 'handshake error');
-    self.log.warn('handshake error ' + err);
-  };
-
-  if (!this.verifyOrigin(req)) {
-    writeErr(403, 'handshake bad origin');
-    return;
-  }
-
-  var handshakeData = this.handshakeData(data);
-
-  if (origin) {
-    // https://developer.mozilla.org/En/HTTP_Access_Control
-    headers['Access-Control-Allow-Origin'] = origin;
-    headers['Access-Control-Allow-Credentials'] = 'true';
-  }
-
-  this.authorize(handshakeData, function (err, authorized, newData) {
-    if (err) return error(err);
-
-    if (authorized) {
-      var id = self.generateId()
-        , hs = [
-              id
-            , self.enabled('heartbeats') ? self.get('heartbeat timeout') || '' : ''
-            , self.get('close timeout') || ''
-            , self.transports(data).join(',')
-          ].join(':');
-
-      if (data.query.jsonp && jsonpolling_re.test(data.query.jsonp)) {
-        hs = 'io.j[' + data.query.jsonp + '](' + JSON.stringify(hs) + ');';
-        res.writeHead(200, { 'Content-Type': 'application/javascript' });
-      } else {
-        res.writeHead(200, headers);
-      }
-
-      res.end(hs);
-
-      self.onHandshake(id, newData || handshakeData);
-      self.store.publish('handshake', id, newData || handshakeData);
-
-      self.log.info('handshake authorized', id);
-    } else {
-      writeErr(403, 'handshake unauthorized');
-      self.log.info('handshake unauthorized');
-    }
-  })
-};
-
-/**
- * Gets normalized handshake data
- *
- * @api private
- */
-
-Manager.prototype.handshakeData = function (data) {
-  var connection = data.request.connection
-    , connectionAddress
-    , date = new Date;
-
-  if (connection.remoteAddress) {
-    connectionAddress = {
-        address: connection.remoteAddress
-      , port: connection.remotePort
-    };
-  } else if (connection.socket && connection.socket.remoteAddress) {
-    connectionAddress = {
-        address: connection.socket.remoteAddress
-      , port: connection.socket.remotePort
-    };
-  }
-
-  return {
-      headers: data.headers
-    , address: connectionAddress
-    , time: date.toString()
-    , query: data.query
-    , url: data.request.url
-    , xdomain: !!data.request.headers.origin
-    , secure: data.request.connection.secure
-    , issued: +date
-  };
-};
-
-/**
- * Verifies the origin of a request.
- *
- * @api private
- */
-
-Manager.prototype.verifyOrigin = function (request) {
-  var origin = request.headers.origin || request.headers.referer
-    , origins = this.get('origins');
-
-  if (origin === 'null') origin = '*';
-
-  if (origins.indexOf('*:*') !== -1) {
-    return true;
-  }
-
-  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 + ':*') ||
-        ~origins.indexOf('*:' + parts.port);
-      if (!ok) this.log.warn('illegal origin: ' + origin);
-      return ok;
-    } catch (ex) {
-      this.log.warn('error parsing origin');
-    }
-  }
-  else {
-    this.log.warn('origin missing from handshake, yet required by config');
-  }
-  return false;
-};
-
-/**
- * Handles an incoming packet.
- *
- * @api private
- */
-
-Manager.prototype.handlePacket = function (sessid, packet) {
-  this.of(packet.endpoint || '').handlePacket(sessid, packet);
-};
-
-/**
- * Performs authentication.
- *
- * @param Object client request data
- * @api private
- */
-
-Manager.prototype.authorize = function (data, fn) {
-  if (this.get('authorization')) {
-    var self = this;
-
-    this.get('authorization').call(this, data, function (err, authorized) {
-      self.log.debug('client ' + authorized ? 'authorized' : 'unauthorized');
-      fn(err, authorized);
-    });
-  } else {
-    this.log.debug('client authorized');
-    fn(null, true);
-  }
-
-  return this;
-};
-
-/**
- * Retrieves the transports adviced to the user.
- *
- * @api private
- */
-
-Manager.prototype.transports = function (data) {
-  var transp = this.get('transports')
-    , ret = [];
-
-  for (var i = 0, l = transp.length; i < l; i++) {
-    var transport = transp[i];
-
-    if (transport) {
-      if (!transport.checkClient || transport.checkClient(data)) {
-        ret.push(transport);
-      }
-    }
-  }
-
-  return ret;
-};
-
-/**
- * Checks whether a request is a socket.io one.
- *
- * @return {Object} a client request data object or `false`
- * @api private
- */
-
-var regexp = /^\/([^\/]+)\/?([^\/]+)?\/?([^\/]+)?\/?$/
-
-Manager.prototype.checkRequest = function (req) {
-  var resource = this.get('resource');
-
-  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);
-
-    // client request data
-    var data = {
-        query: uri.query || {}
-      , headers: req.headers
-      , request: req
-      , path: path
-    };
-
-    if (pieces) {
-      data.protocol = Number(pieces[1]);
-      data.transport = pieces[2];
-      data.id = pieces[3];
-      data.static = !!this.static.has(path);
-    };
-
-    return data;
-  }
-
-  return false;
-};
-
-/**
- * Declares a socket namespace
- *
- * @api public
- */
-
-Manager.prototype.of = function (nsp) {
-  if (this.namespaces[nsp]) {
-    return this.namespaces[nsp];
-  }
-
-  return this.namespaces[nsp] = new SocketNamespace(this, nsp);
-};
-
-/**
- * Perform garbage collection on long living objects and properties that cannot
- * be removed automatically.
- *
- * @api private
- */
-
-Manager.prototype.garbageCollection = function () {
-  // clean up unused handshakes
-  var ids = Object.keys(this.handshaken)
-    , i = ids.length
-    , now = Date.now()
-    , handshake;
-
-  while (i--) {
-    handshake = this.handshaken[ids[i]];
-
-    if ('issued' in handshake && (now - handshake.issued) >= 3E4) {
-      this.onDisconnect(ids[i]);
-    }
-  }
-};

+ 0 - 355
app/node_modules/socket.io/lib/namespace.js

@@ -1,355 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var Socket = require('./socket')
-  , EventEmitter = process.EventEmitter
-  , parser = require('./parser')
-  , util = require('./util');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = SocketNamespace;
-
-/**
- * Constructor.
- *
- * @api public.
- */
-
-function SocketNamespace (mgr, name) {
-  this.manager = mgr;
-  this.name = name || '';
-  this.sockets = {};
-  this.auth = false;
-  this.setFlags();
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-SocketNamespace.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Copies emit since we override it.
- *
- * @api private
- */
-
-SocketNamespace.prototype.$emit = EventEmitter.prototype.emit;
-
-/**
- * Retrieves all clients as Socket instances as an array.
- *
- * @api public
- */
-
-SocketNamespace.prototype.clients = function (room) {
-  var room = this.name + (room !== undefined ?
-     '/' + room : '');
-
-  if (!this.manager.rooms[room]) {
-    return [];
-  }
-
-  return this.manager.rooms[room].map(function (id) {
-    return this.socket(id);
-  }, this);
-};
-
-/**
- * Access logger interface.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('log', function () {
-  return this.manager.log;
-});
-
-/**
- * Access store.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('store', function () {
-  return this.manager.store;
-});
-
-/**
- * JSON message flag.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('json', function () {
-  this.flags.json = true;
-  return this;
-});
-
-/**
- * Volatile message flag.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('volatile', function () {
-  this.flags.volatile = true;
-  return this;
-});
-
-/**
- * Overrides the room to relay messages to (flag).
- *
- * @api public
- */
-
-SocketNamespace.prototype.in = SocketNamespace.prototype.to = function (room) {
-  this.flags.endpoint = this.name + (room ? '/' + room : '');
-  return this;
-};
-
-/**
- * Adds a session id we should prevent relaying messages to (flag).
- *
- * @api public
- */
-
-SocketNamespace.prototype.except = function (id) {
-  this.flags.exceptions.push(id);
-  return this;
-};
-
-/**
- * Sets the default flags.
- *
- * @api private
- */
-
-SocketNamespace.prototype.setFlags = function () {
-  this.flags = {
-      endpoint: this.name
-    , exceptions: []
-  };
-  return this;
-};
-
-/**
- * Sends out a packet.
- *
- * @api private
- */
-
-SocketNamespace.prototype.packet = function (packet) {
-  packet.endpoint = this.name;
-
-  var store = this.store
-    , log = this.log
-    , volatile = this.flags.volatile
-    , exceptions = this.flags.exceptions
-    , packet = parser.encodePacket(packet);
-
-  this.manager.onDispatch(this.flags.endpoint, packet, volatile, exceptions);
-  this.store.publish('dispatch', this.flags.endpoint, packet, volatile, exceptions);
-
-  this.setFlags();
-
-  return this;
-};
-
-/**
- * Sends to everyone.
- *
- * @api public
- */
-
-SocketNamespace.prototype.send = function (data) {
-  return this.packet({
-      type: this.flags.json ? 'json' : 'message'
-    , data: data
-  });
-};
-
-/**
- * Emits to everyone (override).
- *
- * @api public
- */
-
-SocketNamespace.prototype.emit = function (name) {
-  if (name == 'newListener') {
-    return this.$emit.apply(this, arguments);
-  }
-
-  return this.packet({
-      type: 'event'
-    , name: name
-    , args: util.toArray(arguments).slice(1)
-  });
-};
-
-/**
- * Retrieves or creates a write-only socket for a client, unless specified.
- *
- * @param {Boolean} whether the socket will be readable when initialized
- * @api public
- */
-
-SocketNamespace.prototype.socket = function (sid, readable) {
-  if (!this.sockets[sid]) {
-    this.sockets[sid] = new Socket(this.manager, sid, this, readable);
-  }
-
-  return this.sockets[sid];
-};
-
-/**
- * Sets authorization for this namespace.
- *
- * @api public
- */
-
-SocketNamespace.prototype.authorization = function (fn) {
-  this.auth = fn;
-  return this;
-};
-
-/**
- * Called when a socket disconnects entirely.
- *
- * @api private
- */
-
-SocketNamespace.prototype.handleDisconnect = function (sid, reason, raiseOnDisconnect) {
-  if (this.sockets[sid] && this.sockets[sid].readable) {
-    if (raiseOnDisconnect) this.sockets[sid].onDisconnect(reason);
-    delete this.sockets[sid];
-  }
-};
-
-/**
- * Performs authentication.
- *
- * @param Object client request data
- * @api private
- */
-
-SocketNamespace.prototype.authorize = function (data, fn) {
-  if (this.auth) {
-    var self = this;
-
-    this.auth.call(this, data, function (err, authorized) {
-      self.log.debug('client ' +
-        (authorized ? '' : 'un') + 'authorized for ' + self.name);
-      fn(err, authorized);
-    });
-  } else {
-    this.log.debug('client authorized for ' + this.name);
-    fn(null, true);
-  }
-
-  return this;
-};
-
-/**
- * Handles a packet.
- *
- * @api private
- */
-
-SocketNamespace.prototype.handlePacket = function (sessid, packet) {
-  var socket = this.socket(sessid)
-    , dataAck = packet.ack == 'data'
-    , manager = this.manager
-    , self = this;
-
-  function ack () {
-    self.log.debug('sending data ack packet');
-    socket.packet({
-        type: 'ack'
-      , args: util.toArray(arguments)
-      , ackId: packet.id
-    });
-  };
-
-  function error (err) {
-    self.log.warn('handshake error ' + err + ' for ' + self.name);
-    socket.packet({ type: 'error', reason: err });
-  };
-
-  function connect () {
-    self.manager.onJoin(sessid, self.name);
-    self.store.publish('join', sessid, self.name);
-
-    // packet echo
-    socket.packet({ type: 'connect' });
-
-    // emit connection event
-    self.$emit('connection', socket);
-  };
-
-  switch (packet.type) {
-    case 'connect':
-      if (packet.endpoint == '') {
-        connect();
-      } else {
-        var handshakeData = manager.handshaken[sessid];
-
-        this.authorize(handshakeData, function (err, authorized, newData) {
-          if (err) return error(err);
-
-          if (authorized) {
-            manager.onHandshake(sessid, newData || handshakeData);
-            self.store.publish('handshake', sessid, newData || handshakeData);
-            connect();
-          } else {
-            error('unauthorized');
-          }
-        });
-      }
-      break;
-
-    case 'ack':
-      if (socket.acks[packet.ackId]) {
-        socket.acks[packet.ackId].apply(socket, packet.args);
-      } else {
-        this.log.info('unknown ack packet');
-      }
-      break;
-
-    case 'event':
-      // check if the emitted event is not blacklisted
-      if (-~manager.get('blacklist').indexOf(packet.name)) {
-        this.log.debug('ignoring blacklisted event `' + packet.name + '`');
-      } else {
-        var params = [packet.name].concat(packet.args);
-
-        if (dataAck) {
-          params.push(ack);
-        }
-
-        socket.$emit.apply(socket, params);
-      }
-      break;
-
-    case 'disconnect':
-      this.manager.onLeave(sessid, this.name);
-      this.store.publish('leave', sessid, this.name);
-
-      socket.$emit('disconnect', packet.reason || 'packet');
-      break;
-
-    case 'json':
-    case 'message':
-      var params = ['message', packet.data];
-
-      if (dataAck)
-        params.push(ack);
-
-      socket.$emit.apply(socket, params);
-  };
-};

+ 0 - 249
app/node_modules/socket.io/lib/parser.js

@@ -1,249 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-/**
- * Packet types.
- */
-
-var packets = exports.packets = {
-      'disconnect': 0
-    , 'connect': 1
-    , 'heartbeat': 2
-    , 'message': 3
-    , 'json': 4
-    , 'event': 5
-    , 'ack': 6
-    , 'error': 7
-    , 'noop': 8
-  }
-  , packetslist = Object.keys(packets);
-
-/**
- * Errors reasons.
- */
-
-var reasons = exports.reasons = {
-      'transport not supported': 0
-    , 'client not handshaken': 1
-    , 'unauthorized': 2
-  }
-  , reasonslist = Object.keys(reasons);
-
-/**
- * Errors advice.
- */
-
-var advice = exports.advice = {
-      'reconnect': 0
-  }
-  , advicelist = Object.keys(advice);
-
-/**
- * Encodes a packet.
- *
- * @api private
- */
-
-exports.encodePacket = function (packet) {
-  var type = packets[packet.type]
-    , id = packet.id || ''
-    , endpoint = packet.endpoint || ''
-    , ack = packet.ack
-    , data = null;
-
-  switch (packet.type) {
-    case 'message':
-      if (packet.data !== '')
-        data = packet.data;
-      break;
-
-    case 'event':
-      var ev = { name: packet.name };
-
-      if (packet.args && packet.args.length) {
-        ev.args = packet.args;
-      }
-
-      data = JSON.stringify(ev);
-      break;
-
-    case 'json':
-      data = JSON.stringify(packet.data);
-      break;
-
-    case 'ack':
-      data = packet.ackId
-        + (packet.args && packet.args.length
-            ? '+' + JSON.stringify(packet.args) : '');
-      break;
-
-    case 'connect':
-      if (packet.qs)
-        data = packet.qs;
-      break;
-
-     case 'error':
-      var reason = packet.reason ? reasons[packet.reason] : ''
-        , adv = packet.advice ? advice[packet.advice] : ''
-
-      if (reason !== '' || adv !== '')
-        data = reason + (adv !== '' ? ('+' + adv) : '')
-
-      break;
-  }
-
-  // construct packet with required fragments
-  var encoded = type + ':' + id + (ack == 'data' ? '+' : '') + ':' + endpoint;
-
-  // data fragment is optional
-  if (data !== null && data !== undefined)
-    encoded += ':' + data;
-
-  return encoded;
-};
-
-/**
- * Encodes multiple messages (payload).
- *
- * @param {Array} messages
- * @api private
- */
-
-exports.encodePayload = function (packets) {
-  var decoded = '';
-
-  if (packets.length == 1)
-    return packets[0];
-
-  for (var i = 0, l = packets.length; i < l; i++) {
-    var packet = packets[i];
-    decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]
-  }
-
-  return decoded;
-};
-
-/**
- * Decodes a packet
- *
- * @api private
- */
-
-var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/;
-
-/**
- * Wrap the JSON.parse in a seperate function the crankshaft optimizer will
- * only punish this function for the usage for try catch
- *
- * @api private
- */
-
-function parse (data) {
-  try { return JSON.parse(data) }
-  catch (e) { return false }
-}
-
-exports.decodePacket = function (data) {
-  var pieces = data.match(regexp);
-
-  if (!pieces) return {};
-
-  var id = pieces[2] || ''
-    , data = pieces[5] || ''
-    , packet = {
-          type: packetslist[pieces[1]]
-        , endpoint: pieces[4] || ''
-      };
-
-  // whether we need to acknowledge the packet
-  if (id) {
-    packet.id = id;
-    if (pieces[3])
-      packet.ack = 'data';
-    else
-      packet.ack = true;
-  }
-
-  // handle different packet types
-  switch (packet.type) {
-    case 'message':
-      packet.data = data || '';
-      break;
-
-    case 'event':
-      pieces = parse(data);
-      if (pieces) {
-        packet.name = pieces.name;
-        packet.args = pieces.args;
-      }
-
-      packet.args = packet.args || [];
-      break;
-
-    case 'json':
-      packet.data = parse(data);
-      break;
-
-    case 'connect':
-      packet.qs = data || '';
-      break;
-
-    case 'ack':
-      pieces = data.match(/^([0-9]+)(\+)?(.*)/);
-      if (pieces) {
-        packet.ackId = pieces[1];
-        packet.args = [];
-
-        if (pieces[3]) {
-          packet.args = parse(pieces[3]) || [];
-        }
-      }
-      break;
-
-    case 'error':
-      pieces = data.split('+');
-      packet.reason = reasonslist[pieces[0]] || '';
-      packet.advice = advicelist[pieces[1]] || '';
-  }
-
-  return packet;
-};
-
-/**
- * Decodes data payload. Detects multiple messages
- *
- * @return {Array} messages
- * @api public
- */
-
-exports.decodePayload = function (data) {
-  if (undefined == data || null == data) {
-    return [];
-  }
-
-  if (data[0] == '\ufffd') {
-    var ret = [];
-
-    for (var i = 1, length = ''; i < data.length; i++) {
-      if (data[i] == '\ufffd') {
-        ret.push(exports.decodePacket(data.substr(i + 1, length)));
-        i += Number(length) + 1;
-        length = '';
-      } else {
-        length += data[i];
-      }
-    }
-
-    return ret;
-  } else {
-    return [exports.decodePacket(data)];
-  }
-};

+ 0 - 143
app/node_modules/socket.io/lib/socket.io.js

@@ -1,143 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var client = require('socket.io-client');
-
-/**
- * Version.
- */
-
-exports.version = '0.9.16';
-
-/**
- * Supported protocol version.
- */
-
-exports.protocol = 1;
-
-/**
- * Client that we serve.
- */
-
-exports.clientVersion = client.version;
-
-/**
- * Attaches a manager
- *
- * @param {HTTPServer/Number} a HTTP/S server or a port number to listen on.
- * @param {Object} opts to be passed to Manager and/or http server
- * @param {Function} callback if a port is supplied
- * @api public
- */
-
-exports.listen = function (server, options, fn) {
-  if ('function' == typeof server) {
-    console.warn('Socket.IO\'s `listen()` method expects an `http.Server` instance\n'
-    + 'as its first parameter. Are you migrating from Express 2.x to 3.x?\n'
-    + 'If so, check out the "Socket.IO compatibility" section at:\n'
-    + 'https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x');
-  }
-
-  if ('function' == typeof options) {
-    fn = options;
-    options = {};
-  }
-
-  if ('undefined' == typeof server) {
-    // create a server that listens on port 80
-    server = 80;
-  }
-
-  if ('number' == typeof server) {
-    // if a port number is passed
-    var port = server;
-
-    if (options && options.key)
-      server = require('https').createServer(options);
-    else
-      server = require('http').createServer();
-
-    // default response
-    server.on('request', function (req, res) {
-      res.writeHead(200);
-      res.end('Welcome to socket.io.');
-    });
-
-    server.listen(port, fn);
-  }
-
-  // otherwise assume a http/s server
-  return new exports.Manager(server, options);
-};
-
-/**
- * Manager constructor.
- *
- * @api public
- */
-
-exports.Manager = require('./manager');
-
-/**
- * Transport constructor.
- *
- * @api public
- */
-
-exports.Transport = require('./transport');
-
-/**
- * Socket constructor.
- *
- * @api public
- */
-
-exports.Socket = require('./socket');
-
-/**
- * Static constructor.
- *
- * @api public
- */
-
-exports.Static = require('./static');
-
-/**
- * Store constructor.
- *
- * @api public
- */
-
-exports.Store = require('./store');
-
-/**
- * Memory Store constructor.
- *
- * @api public
- */
-
-exports.MemoryStore = require('./stores/memory');
-
-/**
- * Redis Store constructor.
- *
- * @api public
- */
-
-exports.RedisStore = require('./stores/redis');
-
-/**
- * Parser.
- *
- * @api public
- */
-
-exports.parser = require('./parser');

+ 0 - 369
app/node_modules/socket.io/lib/socket.js

@@ -1,369 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var parser = require('./parser')
-  , util = require('./util')
-  , EventEmitter = process.EventEmitter
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = Socket;
-
-/**
- * Default error event listener to prevent uncaught exceptions.
- */
-
-var defaultError = function () {};
-
-/**
- * Socket constructor.
- *
- * @param {Manager} manager instance
- * @param {String} session id
- * @param {Namespace} namespace the socket belongs to
- * @param {Boolean} whether the 
- * @api public
- */
-
-function Socket (manager, id, nsp, readable) {
-  this.id = id;
-  this.namespace = nsp;
-  this.manager = manager;
-  this.disconnected = false;
-  this.ackPackets = 0;
-  this.acks = {};
-  this.setFlags();
-  this.readable = readable;
-  this.store = this.manager.store.client(this.id);
-  this.on('error', defaultError);
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-Socket.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Accessor shortcut for the handshake data
- *
- * @api private
- */
-
-Socket.prototype.__defineGetter__('handshake', function () {
-  return this.manager.handshaken[this.id];
-});
-
-/**
- * Accessor shortcut for the transport type
- *
- * @api private
- */
-
-Socket.prototype.__defineGetter__('transport', function () {
-  return this.manager.transports[this.id].name;
-});
-
-/**
- * Accessor shortcut for the logger.
- *
- * @api private
- */
-
-Socket.prototype.__defineGetter__('log', function () {
-  return this.manager.log;
-});
-
-/**
- * JSON message flag.
- *
- * @api public
- */
-
-Socket.prototype.__defineGetter__('json', function () {
-  this.flags.json = true;
-  return this;
-});
-
-/**
- * Volatile message flag.
- *
- * @api public
- */
-
-Socket.prototype.__defineGetter__('volatile', function () {
-  this.flags.volatile = true;
-  return this;
-});
-
-/**
- * Broadcast message flag.
- *
- * @api public
- */
-
-Socket.prototype.__defineGetter__('broadcast', function () {
-  this.flags.broadcast = true;
-  return this;
-});
-
-/**
- * Overrides the room to broadcast messages to (flag)
- *
- * @api public
- */
-
-Socket.prototype.to = Socket.prototype.in = function (room) {
-  this.flags.room = room;
-  return this;
-};
-
-/**
- * Resets flags
- *
- * @api private
- */
-
-Socket.prototype.setFlags = function () {
-  this.flags = {
-      endpoint: this.namespace.name
-    , room: ''
-  };
-  return this;
-};
-
-/**
- * Triggered on disconnect
- *
- * @api private
- */
-
-Socket.prototype.onDisconnect = function (reason) {
-  if (!this.disconnected) {
-    this.$emit('disconnect', reason);
-    this.disconnected = true;
-  }
-};
-
-/**
- * Joins a user to a room.
- *
- * @api public
- */
-
-Socket.prototype.join = function (name, fn) {
-  var nsp = this.namespace.name
-    , name = (nsp + '/') + name;
-
-  this.manager.onJoin(this.id, name);
-  this.manager.store.publish('join', this.id, name);
-
-  if (fn) {
-    this.log.warn('Client#join callback is deprecated');
-    fn();
-  }
-
-  return this;
-};
-
-/**
- * Un-joins a user from a room.
- *
- * @api public
- */
-
-Socket.prototype.leave = function (name, fn) {
-  var nsp = this.namespace.name
-    , name = (nsp + '/') + name;
-
-  this.manager.onLeave(this.id, name);
-  this.manager.store.publish('leave', this.id, name);
-
-  if (fn) {
-    this.log.warn('Client#leave callback is deprecated');
-    fn();
-  }
-
-  return this;
-};
-
-/**
- * Transmits a packet.
- *
- * @api private
- */
-
-Socket.prototype.packet = function (packet) {
-  if (this.flags.broadcast) {
-    this.log.debug('broadcasting packet');
-    this.namespace.in(this.flags.room).except(this.id).packet(packet);
-  } else {
-    packet.endpoint = this.flags.endpoint;
-    packet = parser.encodePacket(packet);
-
-    this.dispatch(packet, this.flags.volatile);
-  }
-
-  this.setFlags();
-
-  return this;
-};
-
-/**
- * Dispatches a packet
- *
- * @api private
- */
-
-Socket.prototype.dispatch = function (packet, volatile) {
-  if (this.manager.transports[this.id] && this.manager.transports[this.id].open) {
-    this.manager.transports[this.id].onDispatch(packet, volatile);
-  } else {
-    if (!volatile) {
-      this.manager.onClientDispatch(this.id, packet, volatile);
-    }
-
-    this.manager.store.publish('dispatch:' + this.id, packet, volatile);
-  }
-};
-
-/**
- * Stores data for the client.
- *
- * @api public
- */
-
-Socket.prototype.set = function (key, value, fn) {
-  this.store.set(key, value, fn);
-  return this;
-};
-
-/**
- * Retrieves data for the client
- *
- * @api public
- */
-
-Socket.prototype.get = function (key, fn) {
-  this.store.get(key, fn);
-  return this;
-};
-
-/**
- * Checks data for the client
- *
- * @api public
- */
-
-Socket.prototype.has = function (key, fn) {
-  this.store.has(key, fn);
-  return this;
-};
-
-/**
- * Deletes data for the client
- *
- * @api public
- */
-
-Socket.prototype.del = function (key, fn) {
-  this.store.del(key, fn);
-  return this;
-};
-
-/**
- * Kicks client
- *
- * @api public
- */
-
-Socket.prototype.disconnect = function () {
-  if (!this.disconnected) {
-    this.log.info('booting client');
-
-    if ('' === this.namespace.name) {
-      if (this.manager.transports[this.id] && this.manager.transports[this.id].open) {
-        this.manager.transports[this.id].onForcedDisconnect();
-      } else {
-        this.manager.onClientDisconnect(this.id);
-        this.manager.store.publish('disconnect:' + this.id);
-      }
-    } else {
-      this.packet({type: 'disconnect'});
-      this.manager.onLeave(this.id, this.namespace.name);
-      this.$emit('disconnect', 'booted');
-    }
-
-  }
-
-  return this;
-};
-
-/**
- * Send a message.
- *
- * @api public
- */
-
-Socket.prototype.send = function (data, fn) {
-  var packet = {
-      type: this.flags.json ? 'json' : 'message'
-    , data: data
-  };
-
-  if (fn) {
-    packet.id = ++this.ackPackets;
-    packet.ack = true;
-    this.acks[packet.id] = fn;
-  }
-
-  return this.packet(packet);
-};
-
-/**
- * Original emit function.
- *
- * @api private
- */
-
-Socket.prototype.$emit = EventEmitter.prototype.emit;
-
-/**
- * Emit override for custom events.
- *
- * @api public
- */
-
-Socket.prototype.emit = function (ev) {
-  if (ev == 'newListener') {
-    return this.$emit.apply(this, arguments);
-  }
-
-  var args = util.toArray(arguments).slice(1)
-    , lastArg = args[args.length - 1]
-    , packet = {
-          type: 'event'
-        , name: ev
-      };
-
-  if ('function' == typeof lastArg) {
-    packet.id = ++this.ackPackets;
-    packet.ack = lastArg.length ? 'data' : true;
-    this.acks[packet.id] = lastArg;
-    args = args.slice(0, args.length - 1);
-  }
-
-  packet.args = args;
-
-  return this.packet(packet);
-};

+ 0 - 395
app/node_modules/socket.io/lib/static.js

@@ -1,395 +0,0 @@
-
-/*!
-* socket.io-node
-* Copyright(c) 2011 LearnBoost <[email protected]>
-* MIT Licensed
-*/
-
-/**
- * Module dependencies.
- */
-
-var client = require('socket.io-client')
-  , cp = require('child_process')
-  , fs = require('fs')
-  , util = require('./util');
-
-/**
- * File type details.
- *
- * @api private
- */
-
-var mime = {
-    js: {
-        type: 'application/javascript'
-      , encoding: 'utf8'
-      , gzip: true
-    }
-  , swf: {
-        type: 'application/x-shockwave-flash'
-      , encoding: 'binary'
-      , gzip: false
-    }
-};
-
-/**
- * Regexp for matching custom transport patterns. Users can configure their own
- * socket.io bundle based on the url structure. Different transport names are
- * concatinated using the `+` char. /socket.io/socket.io+websocket.js should
- * create a bundle that only contains support for the websocket.
- *
- * @api private
- */
-
-var bundle = /\+((?:\+)?[\w\-]+)*(?:\.v\d+\.\d+\.\d+)?(?:\.js)$/
-  , versioning = /\.v\d+\.\d+\.\d+(?:\.js)$/;
-
-/**
- * Export the constructor
- */
-
-exports = module.exports = Static;
-
-/**
- * Static constructor
- *
- * @api public
- */
-
-function Static (manager) {
-  this.manager = manager;
-  this.cache = {};
-  this.paths = {};
-
-  this.init();
-}
-
-/**
- * Initialize the Static by adding default file paths.
- *
- * @api public
- */
-
-Static.prototype.init = function () {
-  /**
-   * Generates a unique id based the supplied transports array
-   *
-   * @param {Array} transports The array with transport types
-   * @api private
-   */
-  function id (transports) {
-    var id = transports.join('').split('').map(function (char) {
-      return ('' + char.charCodeAt(0)).split('').pop();
-    }).reduce(function (char, id) {
-      return char +id;
-    });
-
-    return client.version + ':' + id;
-  }
-
-  /**
-   * Generates a socket.io-client file based on the supplied transports.
-   *
-   * @param {Array} transports The array with transport types
-   * @param {Function} callback Callback for the static.write
-   * @api private
-   */
-
-  function build (transports, callback) {
-    client.builder(transports, {
-          minify: self.manager.enabled('browser client minification')
-      }, function (err, content) {
-        callback(err, content ? new Buffer(content) : null, id(transports));
-      }
-    );
-  }
-
-  var self = this;
-
-  // add our default static files
-  this.add('/static/flashsocket/WebSocketMain.swf', {
-      file: client.dist + '/WebSocketMain.swf'
-  });
-
-  this.add('/static/flashsocket/WebSocketMainInsecure.swf', {
-      file: client.dist + '/WebSocketMainInsecure.swf'
-  });
-
-  // generates dedicated build based on the available transports
-  this.add('/socket.io.js', function (path, callback) {
-    build(self.manager.get('transports'), callback);
-  });
-
-  this.add('/socket.io.v', { mime: mime.js }, function (path, callback) {
-    build(self.manager.get('transports'), callback);
-  });
-
-  // allow custom builds based on url paths
-  this.add('/socket.io+', { mime: mime.js }, function (path, callback) {
-    var available = self.manager.get('transports')
-      , matches = path.match(bundle)
-      , transports = [];
-
-    if (!matches) return callback('No valid transports');
-
-    // make sure they valid transports
-    matches[0].split('.')[0].split('+').slice(1).forEach(function (transport) {
-      if (!!~available.indexOf(transport)) {
-        transports.push(transport);
-      }
-    });
-
-    if (!transports.length) return callback('No valid transports');
-    build(transports, callback);
-  });
-
-  // clear cache when transports change
-  this.manager.on('set:transports', function (key, value) {
-    delete self.cache['/socket.io.js'];
-    Object.keys(self.cache).forEach(function (key) {
-      if (bundle.test(key)) {
-        delete self.cache[key];
-      }
-    });
-  });
-};
-
-/**
- * Gzip compress buffers.
- *
- * @param {Buffer} data The buffer that needs gzip compression
- * @param {Function} callback
- * @api public
- */
-
-Static.prototype.gzip = function (data, callback) {
-  var gzip = cp.spawn('gzip', ['-9', '-c', '-f', '-n'])
-    , encoding = Buffer.isBuffer(data) ? 'binary' : 'utf8'
-    , buffer = []
-    , err;
-
-  gzip.stdout.on('data', function (data) {
-    buffer.push(data);
-  });
-
-  gzip.stderr.on('data', function (data) {
-    err = data +'';
-    buffer.length = 0;
-  });
-
-  gzip.on('close', function () {
-    if (err) return callback(err);
-
-    var size = 0
-      , index = 0
-      , i = buffer.length
-      , content;
-
-    while (i--) {
-      size += buffer[i].length;
-    }
-
-    content = new Buffer(size);
-    i = buffer.length;
-
-    buffer.forEach(function (buffer) {
-      var length = buffer.length;
-
-      buffer.copy(content, index, 0, length);
-      index += length;
-    });
-
-    buffer.length = 0;
-    callback(null, content);
-  });
-
-  gzip.stdin.end(data, encoding);
-};
-
-/**
- * Is the path a static file?
- *
- * @param {String} path The path that needs to be checked
- * @api public
- */
-
-Static.prototype.has = function (path) {
-  // fast case
-  if (this.paths[path]) return this.paths[path];
-
-  var keys = Object.keys(this.paths)
-    , i = keys.length;
- 
-  while (i--) {
-    if (-~path.indexOf(keys[i])) return this.paths[keys[i]];
-  }
-
-  return false;
-};
-
-/**
- * Add new paths new paths that can be served using the static provider.
- *
- * @param {String} path The path to respond to
- * @param {Options} options Options for writing out the response
- * @param {Function} [callback] Optional callback if no options.file is
- * supplied this would be called instead.
- * @api public
- */
-
-Static.prototype.add = function (path, options, callback) {
-  var extension = /(?:\.(\w{1,4}))$/.exec(path);
-
-  if (!callback && typeof options == 'function') {
-    callback = options;
-    options = {};
-  }
-
-  options.mime = options.mime || (extension ? mime[extension[1]] : false);
-
-  if (callback) options.callback = callback;
-  if (!(options.file || options.callback) || !options.mime) return false;
-
-  this.paths[path] = options;
-
-  return true;
-};
-
-/**
- * Writes a static response.
- *
- * @param {String} path The path for the static content
- * @param {HTTPRequest} req The request object
- * @param {HTTPResponse} res The response object
- * @api public
- */
-
-Static.prototype.write = function (path, req, res) {
-  /**
-   * Write a response without throwing errors because can throw error if the
-   * response is no longer writable etc.
-   *
-   * @api private
-   */
-
-  function write (status, headers, content, encoding) {
-    try {
-      res.writeHead(status, headers || undefined);
-
-      // only write content if it's not a HEAD request and we actually have
-      // some content to write (304's doesn't have content).
-      res.end(
-          req.method !== 'HEAD' && content ? content : ''
-        , encoding || undefined
-      );
-    } catch (e) {}
-  }
-
-  /**
-   * Answers requests depending on the request properties and the reply object.
-   *
-   * @param {Object} reply The details and content to reply the response with
-   * @api private
-   */
-
-  function answer (reply) {
-    var cached = req.headers['if-none-match'] === reply.etag;
-    if (cached && self.manager.enabled('browser client etag')) {
-      return write(304);
-    }
-
-    var accept = req.headers['accept-encoding'] || ''
-      , gzip = !!~accept.toLowerCase().indexOf('gzip')
-      , mime = reply.mime
-      , versioned = reply.versioned
-      , headers = {
-          'Content-Type': mime.type
-      };
-
-    // check if we can add a etag
-    if (self.manager.enabled('browser client etag') && reply.etag && !versioned) {
-      headers['Etag'] = reply.etag;
-    }
-
-    // see if we need to set Expire headers because the path is versioned
-    if (versioned) {
-      var expires = self.manager.get('browser client expires');
-      headers['Cache-Control'] = 'private, x-gzip-ok="", max-age=' + expires;
-      headers['Date'] = new Date().toUTCString();
-      headers['Expires'] = new Date(Date.now() + (expires * 1000)).toUTCString();
-    }
-
-    if (gzip && reply.gzip) {
-      headers['Content-Length'] = reply.gzip.length;
-      headers['Content-Encoding'] = 'gzip';
-      headers['Vary'] = 'Accept-Encoding';
-      write(200, headers, reply.gzip.content, mime.encoding);
-    } else {
-      headers['Content-Length'] = reply.length;
-      write(200, headers, reply.content, mime.encoding);
-    }
-
-    self.manager.log.debug('served static content ' + path);
-  }
-
-  var self = this
-    , details;
-
-  // most common case first
-  if (this.manager.enabled('browser client cache') && this.cache[path]) {
-    return answer(this.cache[path]);
-  } else if (this.manager.get('browser client handler')) {
-    return this.manager.get('browser client handler').call(this, req, res);
-  } else if ((details = this.has(path))) {
-    /**
-     * A small helper function that will let us deal with fs and dynamic files
-     *
-     * @param {Object} err Optional error
-     * @param {Buffer} content The data
-     * @api private
-     */
-
-    function ready (err, content, etag) {
-      if (err) {
-        self.manager.log.warn('Unable to serve file. ' + (err.message || err));
-        return write(500, null, 'Error serving static ' + path);
-      }
-
-      // store the result in the cache
-      var reply = self.cache[path] = {
-            content: content
-          , length: content.length
-          , mime: details.mime
-          , etag: etag || client.version
-          , versioned: versioning.test(path)
-        };
-
-      // check if gzip is enabled
-      if (details.mime.gzip && self.manager.enabled('browser client gzip')) {
-        self.gzip(content, function (err, content) {
-          if (!err) {
-            reply.gzip = {
-                content: content
-              , length: content.length
-            }
-          }
-
-          answer(reply);
-        });
-      } else {
-        answer(reply);
-      }
-    }
-
-    if (details.file) {
-      fs.readFile(details.file, ready);
-    } else if(details.callback) {
-      details.callback.call(this, path, ready);
-    } else {
-      write(404, null, 'File handle not found');
-    }
-  } else {
-    write(404, null, 'File not found');
-  }
-};

+ 0 - 98
app/node_modules/socket.io/lib/store.js

@@ -1,98 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Expose the constructor.
- */
-
-exports = module.exports = Store;
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = process.EventEmitter;
-
-/**
- * Store interface
- *
- * @api public
- */
-
-function Store (options) {
-  this.options = options;
-  this.clients = {};
-};
-
-/**
- * Inherit from EventEmitter.
- */
-
-Store.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Initializes a client store
- *
- * @param {String} id
- * @api public
- */
-
-Store.prototype.client = function (id) {
-  if (!this.clients[id]) {
-    this.clients[id] = new (this.constructor.Client)(this, id);
-  }
-
-  return this.clients[id];
-};
-
-/**
- * Destroys a client
- *
- * @api {String} sid
- * @param {Number} number of seconds to expire client data
- * @api private
- */
-
-Store.prototype.destroyClient = function (id, expiration) {
-  if (this.clients[id]) {
-    this.clients[id].destroy(expiration);
-    delete this.clients[id];
-  }
-
-  return this;
-};
-
-/**
- * Destroys the store
- *
- * @param {Number} number of seconds to expire client data
- * @api private
- */
-
-Store.prototype.destroy = function (clientExpiration) {
-  var keys = Object.keys(this.clients)
-    , count = keys.length;
-
-  for (var i = 0, l = count; i < l; i++) {
-    this.destroyClient(keys[i], clientExpiration);
-  }
-
-  this.clients = {};
-
-  return this;
-};
-
-/**
- * Client.
- *
- * @api public
- */
-
-Store.Client = function (store, id) {
-  this.store = store;
-  this.id = id;
-};

+ 0 - 143
app/node_modules/socket.io/lib/stores/memory.js

@@ -1,143 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var crypto = require('crypto')
-  , Store = require('../store');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = Memory;
-Memory.Client = Client;
-
-/**
- * Memory store
- *
- * @api public
- */
-
-function Memory (opts) {
-  Store.call(this, opts);
-};
-
-/**
- * Inherits from Store.
- */
-
-Memory.prototype.__proto__ = Store.prototype;
-
-/**
- * Publishes a message.
- *
- * @api private
- */
-
-Memory.prototype.publish = function () { };
-
-/**
- * Subscribes to a channel
- *
- * @api private
- */
-
-Memory.prototype.subscribe = function () { };
-
-/**
- * Unsubscribes
- *
- * @api private
- */
-
-Memory.prototype.unsubscribe = function () { };
-
-/**
- * Client constructor
- *
- * @api private
- */
-
-function Client () {
-  Store.Client.apply(this, arguments);
-  this.data = {};
-};
-
-/**
- * Inherits from Store.Client
- */
-
-Client.prototype.__proto__ = Store.Client;
-
-/**
- * Gets a key
- *
- * @api public
- */
-
-Client.prototype.get = function (key, fn) {
-  fn(null, this.data[key] === undefined ? null : this.data[key]);
-  return this;
-};
-
-/**
- * Sets a key
- *
- * @api public
- */
-
-Client.prototype.set = function (key, value, fn) {
-  this.data[key] = value;
-  fn && fn(null);
-  return this;
-};
-
-/**
- * Has a key
- *
- * @api public
- */
-
-Client.prototype.has = function (key, fn) {
-  fn(null, key in this.data);
-};
-
-/**
- * Deletes a key
- *
- * @api public
- */
-
-Client.prototype.del = function (key, fn) {
-  delete this.data[key];
-  fn && fn(null);
-  return this;
-};
-
-/**
- * Destroys the client.
- *
- * @param {Number} number of seconds to expire data
- * @api private
- */
-
-Client.prototype.destroy = function (expiration) {
-  if ('number' != typeof expiration) {
-    this.data = {};
-  } else {
-    var self = this;
-
-    setTimeout(function () {
-      self.data = {};
-    }, expiration * 1000);
-  }
-
-  return this;
-};

+ 0 - 269
app/node_modules/socket.io/lib/stores/redis.js

@@ -1,269 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var crypto = require('crypto')
-  , Store = require('../store')
-  , assert = require('assert');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = Redis;
-Redis.Client = Client;
-
-/**
- * Redis store.
- * Options:
- *     - nodeId (fn) gets an id that uniquely identifies this node
- *     - redis (fn) redis constructor, defaults to redis
- *     - redisPub (object) options to pass to the pub redis client
- *     - redisSub (object) options to pass to the sub redis client
- *     - redisClient (object) options to pass to the general redis client
- *     - pack (fn) custom packing, defaults to JSON or msgpack if installed
- *     - unpack (fn) custom packing, defaults to JSON or msgpack if installed
- *
- * @api public
- */
-
-function Redis (opts) {
-  opts = opts || {};
-
-  // node id to uniquely identify this node
-  var nodeId = opts.nodeId || function () {
-    // by default, we generate a random id 
-    return Math.abs(Math.random() * Math.random() * Date.now() | 0);
-  };
-
-  this.nodeId = nodeId();
-
-  // packing / unpacking mechanism
-  if (opts.pack) {
-    this.pack = opts.pack;
-    this.unpack = opts.unpack;
-  } else {
-    try {
-      var msgpack = require('msgpack');
-      this.pack = msgpack.pack;
-      this.unpack = msgpack.unpack;
-    } catch (e) {
-      this.pack = JSON.stringify;
-      this.unpack = JSON.parse;
-    }
-  }
-
-  var redis = opts.redis || require('redis')
-    , RedisClient = redis.RedisClient;
-
-  // initialize a pubsub client and a regular client
-  if (opts.redisPub instanceof RedisClient) {
-    this.pub = opts.redisPub;
-  } else {
-    opts.redisPub || (opts.redisPub = {});
-    this.pub = redis.createClient(opts.redisPub.port, opts.redisPub.host, opts.redisPub);
-  }
-  if (opts.redisSub instanceof RedisClient) {
-    this.sub = opts.redisSub;
-  } else {
-    opts.redisSub || (opts.redisSub = {});
-    this.sub = redis.createClient(opts.redisSub.port, opts.redisSub.host, opts.redisSub);
-  }
-  if (opts.redisClient instanceof RedisClient) {
-    this.cmd = opts.redisClient;
-  } else {
-    opts.redisClient || (opts.redisClient = {});
-    this.cmd = redis.createClient(opts.redisClient.port, opts.redisClient.host, opts.redisClient);
-  }
-
-  Store.call(this, opts);
-
-  this.sub.setMaxListeners(0);
-  this.setMaxListeners(0);
-};
-
-/**
- * Inherits from Store.
- */
-
-Redis.prototype.__proto__ = Store.prototype;
-
-/**
- * Publishes a message.
- *
- * @api private
- */
-
-Redis.prototype.publish = function (name) {
-  var args = Array.prototype.slice.call(arguments, 1);
-  this.pub.publish(name, this.pack({ nodeId: this.nodeId, args: args }));
-  this.emit.apply(this, ['publish', name].concat(args));
-};
-
-/**
- * Subscribes to a channel
- *
- * @api private
- */
-
-Redis.prototype.subscribe = function (name, consumer, fn) {
-  this.sub.subscribe(name);
-
-  if (consumer || fn) {
-    var self = this;
-
-    self.sub.on('subscribe', function subscribe (ch) {
-      if (name == ch) {
-        function message (ch, msg) {
-          if (name == ch) {
-            msg = self.unpack(msg);
-
-            // we check that the message consumed wasnt emitted by this node
-            if (self.nodeId != msg.nodeId) {
-              consumer.apply(null, msg.args);
-            }
-          }
-        };
-
-        self.sub.on('message', message);
-
-        self.on('unsubscribe', function unsubscribe (ch) {
-          if (name == ch) {
-            self.sub.removeListener('message', message);
-            self.removeListener('unsubscribe', unsubscribe);
-          }
-        });
-
-        self.sub.removeListener('subscribe', subscribe);
-
-        fn && fn();
-      }
-    });
-  }
-
-  this.emit('subscribe', name, consumer, fn);
-};
-
-/**
- * Unsubscribes
- *
- * @api private
- */
-
-Redis.prototype.unsubscribe = function (name, fn) {
-  this.sub.unsubscribe(name);
-
-  if (fn) {
-    var client = this.sub;
-
-    client.on('unsubscribe', function unsubscribe (ch) {
-      if (name == ch) {
-        fn();
-        client.removeListener('unsubscribe', unsubscribe);
-      }
-    });
-  }
-
-  this.emit('unsubscribe', name, fn);
-};
-
-/**
- * Destroys the store
- *
- * @api public
- */
-
-Redis.prototype.destroy = function () {
-  Store.prototype.destroy.call(this);
-
-  this.pub.end();
-  this.sub.end();
-  this.cmd.end();
-};
-
-/**
- * Client constructor
- *
- * @api private
- */
-
-function Client (store, id) {
-  Store.Client.call(this, store, id);
-};
-
-/**
- * Inherits from Store.Client
- */
-
-Client.prototype.__proto__ = Store.Client;
-
-/**
- * Redis hash get
- *
- * @api private
- */
-
-Client.prototype.get = function (key, fn) {
-  this.store.cmd.hget(this.id, key, fn);
-  return this;
-};
-
-/**
- * Redis hash set
- *
- * @api private
- */
-
-Client.prototype.set = function (key, value, fn) {
-  this.store.cmd.hset(this.id, key, value, fn);
-  return this;
-};
-
-/**
- * Redis hash del
- *
- * @api private
- */
-
-Client.prototype.del = function (key, fn) {
-  this.store.cmd.hdel(this.id, key, fn);
-  return this;
-};
-
-/**
- * Redis hash has
- *
- * @api private
- */
-
-Client.prototype.has = function (key, fn) {
-  this.store.cmd.hexists(this.id, key, function (err, has) {
-    if (err) return fn(err);
-    fn(null, !!has);
-  });
-  return this;
-};
-
-/**
- * Destroys client
- *
- * @param {Number} number of seconds to expire data
- * @api private
- */
-
-Client.prototype.destroy = function (expiration) {
-  if ('number' != typeof expiration) {
-    this.store.cmd.del(this.id);
-  } else {
-    this.store.cmd.expire(this.id, expiration);
-  }
-
-  return this;
-};

+ 0 - 534
app/node_modules/socket.io/lib/transport.js

@@ -1,534 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var parser = require('./parser');
-
-/**
- * Expose the constructor.
- */
-
-exports = module.exports = Transport;
-
-/**
- * Transport constructor.
- *
- * @api public
- */
-
-function Transport (mng, data, req) {
-  this.manager = mng;
-  this.id = data.id;
-  this.disconnected = false;
-  this.drained = true;
-  this.handleRequest(req);
-};
-
-/**
- * Access the logger.
- *
- * @api public
- */
-
-Transport.prototype.__defineGetter__('log', function () {
-  return this.manager.log;
-});
-
-/**
- * Access the store.
- *
- * @api public
- */
-
-Transport.prototype.__defineGetter__('store', function () {
-  return this.manager.store;
-});
-
-/**
- * Handles a request when it's set.
- *
- * @api private
- */
-
-Transport.prototype.handleRequest = function (req) {
-  this.log.debug('setting request', req.method, req.url);
-  this.req = req;
-
-  if (req.method == 'GET') {
-    this.socket = req.socket;
-    this.open = true;
-    this.drained = true;
-    this.setHeartbeatInterval();
-
-    this.setHandlers();
-    this.onSocketConnect();
-  }
-};
-
-/**
- * Called when a connection is first set.
- *
- * @api private
- */
-
-Transport.prototype.onSocketConnect = function () { };
-
-/**
- * Sets transport handlers
- *
- * @api private
- */
-
-Transport.prototype.setHandlers = function () {
-  var self = this;
-
-  // we need to do this in a pub/sub way since the client can POST the message
-  // over a different socket (ie: different Transport instance)
-  this.store.subscribe('heartbeat-clear:' + this.id, function () {
-    self.onHeartbeatClear();
-  });
-
-  this.store.subscribe('disconnect-force:' + this.id, function () {
-    self.onForcedDisconnect();
-  });
-
-  this.store.subscribe('dispatch:' + this.id, function (packet, volatile) {
-    self.onDispatch(packet, volatile);
-  });
-
-  this.bound = {
-      end: this.onSocketEnd.bind(this)
-    , close: this.onSocketClose.bind(this)
-    , error: this.onSocketError.bind(this)
-    , drain: this.onSocketDrain.bind(this)
-  };
-
-  this.socket.on('end', this.bound.end);
-  this.socket.on('close', this.bound.close);
-  this.socket.on('error', this.bound.error);
-  this.socket.on('drain', this.bound.drain);
-
-  this.handlersSet = true;
-};
-
-/**
- * Removes transport handlers
- *
- * @api private
- */
-
-Transport.prototype.clearHandlers = function () {
-  if (this.handlersSet) {
-    this.store.unsubscribe('disconnect-force:' + this.id);
-    this.store.unsubscribe('heartbeat-clear:' + this.id);
-    this.store.unsubscribe('dispatch:' + this.id);
-
-    this.socket.removeListener('end', this.bound.end);
-    this.socket.removeListener('close', this.bound.close);
-    this.socket.removeListener('error', this.bound.error);
-    this.socket.removeListener('drain', this.bound.drain);
-  }
-};
-
-/**
- * Called when the connection dies
- *
- * @api private
- */
-
-Transport.prototype.onSocketEnd = function () {
-  this.end('socket end');
-};
-
-/**
- * Called when the connection dies
- *
- * @api private
- */
-
-Transport.prototype.onSocketClose = function (error) {
-  this.end(error ? 'socket error' : 'socket close');
-};
-
-/**
- * Called when the connection has an error.
- *
- * @api private
- */
-
-Transport.prototype.onSocketError = function (err) {
-  if (this.open) {
-    this.socket.destroy();
-    this.onClose();
-  }
-
-  this.log.info('socket error '  + err.stack);
-};
-
-/**
- * Called when the connection is drained.
- *
- * @api private
- */
-
-Transport.prototype.onSocketDrain = function () {
-  this.drained = true;
-};
-
-/**
- * Called upon receiving a heartbeat packet.
- *
- * @api private
- */
-
-Transport.prototype.onHeartbeatClear = function () {
-  this.clearHeartbeatTimeout();
-  this.setHeartbeatInterval();
-};
-
-/**
- * Called upon a forced disconnection.
- *
- * @api private
- */
-
-Transport.prototype.onForcedDisconnect = function () {
-  if (!this.disconnected) {
-    this.log.info('transport end by forced client disconnection');
-    if (this.open) {
-      this.packet({ type: 'disconnect' });
-    }
-    this.end('booted');
-  }
-};
-
-/**
- * Dispatches a packet.
- *
- * @api private
- */
-
-Transport.prototype.onDispatch = function (packet, volatile) {
-  if (volatile) {
-    this.writeVolatile(packet);
-  } else {
-    this.write(packet);
-  }
-};
-
-/**
- * Sets the close timeout.
- */
-
-Transport.prototype.setCloseTimeout = function () {
-  if (!this.closeTimeout) {
-    var self = this;
-
-    this.closeTimeout = setTimeout(function () {
-      self.log.debug('fired close timeout for client', self.id);
-      self.closeTimeout = null;
-      self.end('close timeout');
-    }, this.manager.get('close timeout') * 1000);
-
-    this.log.debug('set close timeout for client', this.id);
-  }
-};
-
-/**
- * Clears the close timeout.
- */
-
-Transport.prototype.clearCloseTimeout = function () {
-  if (this.closeTimeout) {
-    clearTimeout(this.closeTimeout);
-    this.closeTimeout = null;
-
-    this.log.debug('cleared close timeout for client', this.id);
-  }
-};
-
-/**
- * Sets the heartbeat timeout
- */
-
-Transport.prototype.setHeartbeatTimeout = function () {
-  if (!this.heartbeatTimeout && this.manager.enabled('heartbeats')) {
-    var self = this;
-
-    this.heartbeatTimeout = setTimeout(function () {
-      self.log.debug('fired heartbeat timeout for client', self.id);
-      self.heartbeatTimeout = null;
-      self.end('heartbeat timeout');
-    }, this.manager.get('heartbeat timeout') * 1000);
-
-    this.log.debug('set heartbeat timeout for client', this.id);
-  }
-};
-
-/**
- * Clears the heartbeat timeout
- *
- * @param text
- */
-
-Transport.prototype.clearHeartbeatTimeout = function () {
-  if (this.heartbeatTimeout && this.manager.enabled('heartbeats')) {
-    clearTimeout(this.heartbeatTimeout);
-    this.heartbeatTimeout = null;
-    this.log.debug('cleared heartbeat timeout for client', this.id);
-  }
-};
-
-/**
- * Sets the heartbeat interval. To be called when a connection opens and when
- * a heartbeat is received.
- *
- * @api private
- */
-
-Transport.prototype.setHeartbeatInterval = function () {
-  if (!this.heartbeatInterval && this.manager.enabled('heartbeats')) {
-    var self = this;
-
-    this.heartbeatInterval = setTimeout(function () {
-      self.heartbeat();
-      self.heartbeatInterval = null;
-    }, this.manager.get('heartbeat interval') * 1000);
-
-    this.log.debug('set heartbeat interval for client', this.id);
-  }
-};
-
-/**
- * Clears all timeouts.
- *
- * @api private
- */
-
-Transport.prototype.clearTimeouts = function () {
-  this.clearCloseTimeout();
-  this.clearHeartbeatTimeout();
-  this.clearHeartbeatInterval();
-};
-
-/**
- * Sends a heartbeat
- *
- * @api private
- */
-
-Transport.prototype.heartbeat = function () {
-  if (this.open) {
-    this.log.debug('emitting heartbeat for client', this.id);
-    this.packet({ type: 'heartbeat' });
-    this.setHeartbeatTimeout();
-  }
-
-  return this;
-};
-
-/**
- * Handles a message.
- *
- * @param {Object} packet object
- * @api private
- */
-
-Transport.prototype.onMessage = function (packet) {
-  var current = this.manager.transports[this.id];
-
-  if ('heartbeat' == packet.type) {
-    this.log.debug('got heartbeat packet');
-
-    if (current && current.open) {
-      current.onHeartbeatClear();
-    } else {
-      this.store.publish('heartbeat-clear:' + this.id);
-    }
-  } else {
-    if ('disconnect' == packet.type && packet.endpoint == '') {
-      this.log.debug('got disconnection packet');
-
-      if (current) {
-        current.onForcedDisconnect();
-      } else {
-        this.store.publish('disconnect-force:' + this.id);
-      }
-
-      return;
-    }
-
-    if (packet.id && packet.ack != 'data') {
-      this.log.debug('acknowledging packet automatically');
-
-      var ack = parser.encodePacket({
-          type: 'ack'
-        , ackId: packet.id
-        , endpoint: packet.endpoint || ''
-      });
-
-      if (current && current.open) {
-        current.onDispatch(ack);
-      } else {
-        this.manager.onClientDispatch(this.id, ack);
-        this.store.publish('dispatch:' + this.id, ack);
-      }
-    }
-
-    // handle packet locally or publish it
-    if (current) {
-      this.manager.onClientMessage(this.id, packet);
-    } else {
-      this.store.publish('message:' + this.id, packet);
-    }
-  }
-};
-
-/**
- * Clears the heartbeat interval
- *
- * @api private
- */
-
-Transport.prototype.clearHeartbeatInterval = function () {
-  if (this.heartbeatInterval && this.manager.enabled('heartbeats')) {
-    clearTimeout(this.heartbeatInterval);
-    this.heartbeatInterval = null;
-    this.log.debug('cleared heartbeat interval for client', this.id);
-  }
-};
-
-/**
- * Finishes the connection and makes sure client doesn't reopen
- *
- * @api private
- */
-
-Transport.prototype.disconnect = function (reason) {
-  this.packet({ type: 'disconnect' });
-  this.end(reason);
-
-  return this;
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-Transport.prototype.close = function () {
-  if (this.open) {
-    this.doClose();
-    this.onClose();
-  }
-};
-
-/**
- * Called upon a connection close.
- *
- * @api private
- */
-
-Transport.prototype.onClose = function () {
-  if (this.open) {
-    this.setCloseTimeout();
-    this.clearHandlers();
-    this.open = false;
-    this.manager.onClose(this.id);
-    this.store.publish('close', this.id);
-  }
-};
-
-/**
- * Cleans up the connection, considers the client disconnected.
- *
- * @api private
- */
-
-Transport.prototype.end = function (reason) {
-  if (!this.disconnected) {
-    this.log.info('transport end (' + reason + ')');
-
-    var local = this.manager.transports[this.id];
-
-    this.close();
-    this.clearTimeouts();
-    this.disconnected = true;
-
-    if (local) {
-      this.manager.onClientDisconnect(this.id, reason, true);
-    } else {
-      this.store.publish('disconnect:' + this.id, reason);
-    }
-  }
-};
-
-/**
- * Signals that the transport should pause and buffer data.
- *
- * @api public
- */
-
-Transport.prototype.discard = function () {
-  this.log.debug('discarding transport');
-  this.discarded = true;
-  this.clearTimeouts();
-  this.clearHandlers();
-
-  return this;
-};
-
-/**
- * Writes an error packet with the specified reason and advice.
- *
- * @param {Number} advice
- * @param {Number} reason
- * @api public
- */
-
-Transport.prototype.error = function (reason, advice) {
-  this.packet({
-      type: 'error'
-    , reason: reason
-    , advice: advice
-  });
-
-  this.log.warn(reason, advice ? ('client should ' + advice) : '');
-  this.end('error');
-};
-
-/**
- * Write a packet.
- *
- * @api public
- */
-
-Transport.prototype.packet = function (obj) {
-  return this.write(parser.encodePacket(obj));
-};
-
-/**
- * Writes a volatile message.
- *
- * @api private
- */
-
-Transport.prototype.writeVolatile = function (msg) {
-  if (this.open) {
-    if (this.drained) {
-      this.write(msg);
-    } else {
-      this.log.debug('ignoring volatile packet, buffer not drained');
-    }
-  } else {
-    this.log.debug('ignoring volatile packet, transport not open');
-  }
-};

+ 0 - 129
app/node_modules/socket.io/lib/transports/flashsocket.js

@@ -1,129 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-var WebSocket = require('./websocket');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = FlashSocket;
-
-/**
- * The FlashSocket transport is just a proxy
- * for WebSocket connections.
- *
- * @api public
- */
- 
-function FlashSocket (mng, data, req) {
-  return WebSocket.call(this, mng, data, req);
-}
-
-/**
- * Inherits from WebSocket.
- */
-
-FlashSocket.prototype.__proto__ = WebSocket.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-FlashSocket.prototype.name = 'flashsocket';
-
-/**
- * Listens for new configuration changes of the Manager
- * this way we can enable and disable the flash server.
- *
- * @param {Manager} Manager instance.
- * @api private
- */
-
-
-FlashSocket.init = function (manager) {
-  var server;
-  function create () {
-
-    // Drop out immediately if the user has
-    // disabled the flash policy server
-    if (!manager.get('flash policy server')) {
-      return;
-    }
-
-    server = require('policyfile').createServer({ 
-      log: function(msg){
-        manager.log.info(msg);
-      }
-    }, manager.get('origins'));
-
-    server.on('close', function (e) {
-      server = null;
-    });
-
-    server.listen(manager.get('flash policy port'), manager.server);
-
-    manager.flashPolicyServer = server;
-  }
-
-  // listen for origin changes, so we can update the server
-  manager.on('set:origins', function (value, key) {
-    if (!server) return;
-
-    // update the origins and compile a new response buffer
-    server.origins = Array.isArray(value) ? value : [value];
-    server.compile();
-  });
-
-  // destory the server and create a new server
-  manager.on('set:flash policy port', function (value, key) {
-    var transports = manager.get('transports');
-    if (~transports.indexOf('flashsocket')) {
-      if (server) {
-        if (server.port === value) return;
-        // destroy the server and rebuild it on a new port
-        try {
-          server.close();
-        }
-        catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ }
-      }
-      create();
-    }
-  });
-
-  // create or destroy the server
-  manager.on('set:flash policy server', function (value, key) {
-    var transports = manager.get('transports');
-    if (~transports.indexOf('flashsocket')) {
-      if (server && !value) {
-        // destroy the server
-        try {
-          server.close();
-        }
-        catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ }
-      }
-    } else if (!server && value) {
-      // create the server
-      create();
-    }
-  });
-
-  // only start the server
-  manager.on('set:transports', function (value, key){
-    if (!server && ~manager.get('transports').indexOf('flashsocket')) {
-      create();
-    }
-  });
-  // check if we need to initialize at start
-  if (~manager.get('transports').indexOf('flashsocket')){
-    create();
-  }
-};

+ 0 - 83
app/node_modules/socket.io/lib/transports/htmlfile.js

@@ -1,83 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPTransport = require('./http');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = HTMLFile;
-
-/**
- * HTMLFile transport constructor.
- *
- * @api public
- */
-
-function HTMLFile (mng, data, req) {
-  HTTPTransport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-HTMLFile.prototype.__proto__ = HTTPTransport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-HTMLFile.prototype.name = 'htmlfile';
-
-/**
- * Handles the request.
- *
- * @api private
- */
-
-HTMLFile.prototype.handleRequest = function (req) {
-  HTTPTransport.prototype.handleRequest.call(this, req);
-
-  if (req.method == 'GET') {
-    req.res.writeHead(200, {
-        'Content-Type': 'text/html; charset=UTF-8'
-      , 'Connection': 'keep-alive'
-      , 'Transfer-Encoding': 'chunked'
-    });
-
-    req.res.write(
-        '<html><body>'
-      + '<script>var _ = function (msg) { parent.s._(msg, document); };</script>'
-      + new Array(174).join(' ')
-    );
-  }
-};
-
-/**
- * Performs the write.
- *
- * @api private
- */
-
-HTMLFile.prototype.write = function (data) {
-  // escape all forward slashes. see GH-1251
-  data = '<script>_(' + JSON.stringify(data).replace(/\//g, '\\/') + ');</script>';
-
-  if (this.response.write(data)) {
-    this.drained = true;
-  }
-
-  this.log.debug(this.name + ' writing', data);
-};

+ 0 - 147
app/node_modules/socket.io/lib/transports/http-polling.js

@@ -1,147 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPTransport = require('./http');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = HTTPPolling;
-
-/**
- * HTTP polling constructor.
- *
- * @api public.
- */
-
-function HTTPPolling (mng, data, req) {
-  HTTPTransport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from HTTPTransport.
- *
- * @api public.
- */
-
-HTTPPolling.prototype.__proto__ = HTTPTransport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-HTTPPolling.prototype.name = 'httppolling';
-
-/**
- * Override setHandlers
- *
- * @api private
- */
-
-HTTPPolling.prototype.setHandlers = function () {
-  HTTPTransport.prototype.setHandlers.call(this);
-  this.socket.removeListener('end', this.bound.end);
-  this.socket.removeListener('close', this.bound.close);
-};
-
-/**
- * Removes heartbeat timeouts for polling.
- */
-
-HTTPPolling.prototype.setHeartbeatInterval = function () {
-  return this;
-};
-
-/**
- * Handles a request
- *
- * @api private
- */
-
-HTTPPolling.prototype.handleRequest = function (req) {
-  HTTPTransport.prototype.handleRequest.call(this, req);
-
-  if (req.method == 'GET') {
-    var self = this;
-
-    this.pollTimeout = setTimeout(function () {
-      self.packet({ type: 'noop' });
-      self.log.debug(self.name + ' closed due to exceeded duration');
-    }, this.manager.get('polling duration') * 1000);
-
-    this.log.debug('setting poll timeout');
-  }
-};
-
-/**
- * Clears polling timeout
- *
- * @api private
- */
-
-HTTPPolling.prototype.clearPollTimeout = function () {
-  if (this.pollTimeout) {
-    clearTimeout(this.pollTimeout);
-    this.pollTimeout = null;
-    this.log.debug('clearing poll timeout');
-  }
-
-  return this;
-};
-
-/**
- * Override clear timeouts to clear the poll timeout
- *
- * @api private
- */
-
-HTTPPolling.prototype.clearTimeouts = function () {
-  HTTPTransport.prototype.clearTimeouts.call(this);
-
-  this.clearPollTimeout();
-};
-
-/**
- * doWrite to clear poll timeout
- *
- * @api private
- */
-
-HTTPPolling.prototype.doWrite = function () {
-  this.clearPollTimeout();
-};
-
-/**
- * Performs a write.
- *
- * @api private.
- */
-
-HTTPPolling.prototype.write = function (data, close) {
-  this.doWrite(data);
-  this.response.end();
-  this.onClose();
-};
-
-/**
- * Override end.
- *
- * @api private
- */
-
-HTTPPolling.prototype.end = function (reason) {
-  this.clearPollTimeout();
-  return HTTPTransport.prototype.end.call(this, reason);
-};
-

+ 0 - 121
app/node_modules/socket.io/lib/transports/http.js

@@ -1,121 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var Transport = require('../transport')
-  , parser = require('../parser')
-  , qs = require('querystring');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = HTTPTransport;
-
-/**
- * HTTP interface constructor. For all non-websocket transports.
- *
- * @api public
- */
-
-function HTTPTransport (mng, data, req) {
-  Transport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-HTTPTransport.prototype.__proto__ = Transport.prototype;
-
-/**
- * Handles a request.
- *
- * @api private
- */
-
-HTTPTransport.prototype.handleRequest = function (req) {
-
-  // Always set the response in case an error is returned to the client
-  this.response = req.res;
-
-  if (req.method == 'POST') {
-    var buffer = ''
-      , res = req.res
-      , origin = req.headers.origin
-      , headers = { 'Content-Length': 1, 'Content-Type': 'text/plain; charset=UTF-8' }
-      , self = this;
-
-    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 () {
-      res.writeHead(200, headers);
-      res.end('1');
-
-      self.onData(self.postEncoded ? qs.parse(buffer).d : buffer);
-    });
-
-    // prevent memory leaks for uncompleted requests
-    req.on('close', function () {
-      buffer = '';
-      self.onClose();
-    });
-
-    if (origin) {
-      // https://developer.mozilla.org/En/HTTP_Access_Control
-      headers['Access-Control-Allow-Origin'] = origin;
-      headers['Access-Control-Allow-Credentials'] = 'true';
-    }
-  } else {
-    Transport.prototype.handleRequest.call(this, req);
-  }
-};
-
-/**
- * Handles data payload.
- *
- * @api private
- */
-
-HTTPTransport.prototype.onData = function (data) {
-  var messages = parser.decodePayload(data);
-  this.log.debug(this.name + ' received data packet', data);
-
-  for (var i = 0, l = messages.length; i < l; i++) {
-    this.onMessage(messages[i]);
-  }
-};
-
-/**
- * Closes the request-response cycle
- *
- * @api private
- */
-
-HTTPTransport.prototype.doClose = function () {
-  this.response.end();
-};
-
-/**
- * Writes a payload of messages
- *
- * @api private
- */
-
-HTTPTransport.prototype.payload = function (msgs) {
-  this.write(parser.encodePayload(msgs));
-};

+ 0 - 12
app/node_modules/socket.io/lib/transports/index.js

@@ -1,12 +0,0 @@
-
-/**
- * Export transports.
- */
-
-module.exports = {
-    websocket: require('./websocket')
-  , flashsocket: require('./flashsocket')
-  , htmlfile: require('./htmlfile')
-  , 'xhr-polling': require('./xhr-polling')
-  , 'jsonp-polling': require('./jsonp-polling')
-};

+ 0 - 97
app/node_modules/socket.io/lib/transports/jsonp-polling.js

@@ -1,97 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPPolling = require('./http-polling');
-var jsonpolling_re = /^\d+$/
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = JSONPPolling;
-
-/**
- * JSON-P polling transport.
- *
- * @api public
- */
-
-function JSONPPolling (mng, data, req) {
-  HTTPPolling.call(this, mng, data, req);
-
-  this.head = 'io.j[0](';
-  this.foot = ');';
-
-  if (data.query.i && jsonpolling_re.test(data.query.i)) {
-    this.head = 'io.j[' + data.query.i + '](';
-  }
-};
-
-/**
- * Inherits from Transport.
- */
-
-JSONPPolling.prototype.__proto__ = HTTPPolling.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-JSONPPolling.prototype.name = 'jsonppolling';
-
-/**
- * Make sure POST are decoded.
- */
-
-JSONPPolling.prototype.postEncoded = true;
-
-/**
- * Handles incoming data.
- * Due to a bug in \n handling by browsers, we expect a JSONified string.
- *
- * @api private
- */
-
-JSONPPolling.prototype.onData = function (data) {
-  try {
-    data = JSON.parse(data);
-  } catch (e) {
-    this.error('parse', 'reconnect');
-    return;
-  }
-
-  HTTPPolling.prototype.onData.call(this, data);
-};
-
-/**
- * Performs the write.
- *
- * @api private
- */
-
-JSONPPolling.prototype.doWrite = function (data) {
-  HTTPPolling.prototype.doWrite.call(this);
-
-  var data = data === undefined
-      ? '' : this.head + JSON.stringify(data) + this.foot;
-
-  this.response.writeHead(200, {
-      'Content-Type': 'text/javascript; charset=UTF-8'
-    , 'Content-Length': Buffer.byteLength(data)
-    , 'Connection': 'Keep-Alive'
-    , 'X-XSS-Protection': '0'
-  });
-
-  this.response.write(data);
-  this.log.debug(this.name + ' writing', data);
-};

+ 0 - 36
app/node_modules/socket.io/lib/transports/websocket.js

@@ -1,36 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var protocolVersions = require('./websocket/');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = WebSocket;
-
-/**
- * HTTP interface constructor. Interface compatible with all transports that
- * depend on request-response cycles.
- *
- * @api public
- */
-
-function WebSocket (mng, data, req) {
-  var transport
-    , version = req.headers['sec-websocket-version'];
-  if (typeof version !== 'undefined' && typeof protocolVersions[version] !== 'undefined') {
-    transport = new protocolVersions[version](mng, data, req);
-  }
-  else transport = new protocolVersions['default'](mng, data, req);
-  if (typeof this.name !== 'undefined') transport.name = this.name;
-  return transport;
-};

+ 0 - 362
app/node_modules/socket.io/lib/transports/websocket/default.js

@@ -1,362 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var Transport = require('../../transport')
-  , EventEmitter = process.EventEmitter
-  , crypto = require('crypto')
-  , parser = require('../../parser');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = WebSocket;
-
-/**
- * HTTP interface constructor. Interface compatible with all transports that
- * depend on request-response cycles.
- *
- * @api public
- */
-
-function WebSocket (mng, data, req) {
-  // parser
-  var self = this;
-
-  this.parser = new Parser();
-  this.parser.on('data', function (packet) {
-    self.log.debug(self.name + ' received data packet', packet);
-    self.onMessage(parser.decodePacket(packet));
-  });
-  this.parser.on('close', function () {
-    self.end();
-  });
-  this.parser.on('error', function () {
-    self.end();
-  });
-
-  Transport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-WebSocket.prototype.__proto__ = Transport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-WebSocket.prototype.name = 'websocket';
-
-/**
- * Websocket draft version
- *
- * @api public
- */
-
-WebSocket.prototype.protocolVersion = 'hixie-76';
-
-/**
- * Called when the socket connects.
- *
- * @api private
- */
-
-WebSocket.prototype.onSocketConnect = function () {
-  var self = this;
-
-  this.socket.setNoDelay(true);
-
-  this.buffer = true;
-  this.buffered = [];
-
-  if (this.req.headers.upgrade !== 'WebSocket') {
-    this.log.warn(this.name + ' connection invalid');
-    this.end();
-    return;
-  }
-
-  var origin = this.req.headers['origin']
-  , waitingForNonce = false;
-  if(this.manager.settings['match origin protocol']){
-    location = (origin.indexOf('https')>-1 ? 'wss' : 'ws') + '://' + this.req.headers.host + this.req.url;
-  }else if(this.socket.encrypted){
-    location = 'wss://' + this.req.headers.host + this.req.url;
-  }else{
-    location = 'ws://' + this.req.headers.host + this.req.url;
-  }
-
-  if (this.req.headers['sec-websocket-key1']) {
-    // If we don't have the nonce yet, wait for it (HAProxy compatibility).
-    if (! (this.req.head && this.req.head.length >= 8)) {
-      waitingForNonce = true;
-    }
-
-    var headers = [
-        'HTTP/1.1 101 WebSocket Protocol Handshake'
-      , 'Upgrade: WebSocket'
-      , 'Connection: Upgrade'
-      , 'Sec-WebSocket-Origin: ' + origin
-      , 'Sec-WebSocket-Location: ' + location
-    ];
-
-    if (this.req.headers['sec-websocket-protocol']){
-      headers.push('Sec-WebSocket-Protocol: '
-          + this.req.headers['sec-websocket-protocol']);
-    }
-  } else {
-    var headers = [
-        'HTTP/1.1 101 Web Socket Protocol Handshake'
-      , 'Upgrade: WebSocket'
-      , 'Connection: Upgrade'
-      , 'WebSocket-Origin: ' + origin
-      , 'WebSocket-Location: ' + location
-    ];
-  }
-
-  try {
-    this.socket.write(headers.concat('', '').join('\r\n'));
-    this.socket.setTimeout(0);
-    this.socket.setNoDelay(true);
-    this.socket.setEncoding('utf8');
-  } catch (e) {
-    this.end();
-    return;
-  }
-
-  if (waitingForNonce) {
-    this.socket.setEncoding('binary');
-  } else if (this.proveReception(headers)) {
-    self.flush();
-  }
-
-  var headBuffer = '';
-
-  this.socket.on('data', function (data) {
-    if (waitingForNonce) {
-      headBuffer += data;
-
-      if (headBuffer.length < 8) {
-        return;
-      }
-
-      // Restore the connection to utf8 encoding after receiving the nonce
-      self.socket.setEncoding('utf8');
-      waitingForNonce = false;
-
-      // Stuff the nonce into the location where it's expected to be
-      self.req.head = headBuffer.substr(0, 8);
-      headBuffer = '';
-
-      if (self.proveReception(headers)) {
-        self.flush();
-      }
-
-      return;
-    }
-
-    self.parser.add(data);
-  });
-};
-
-/**
- * Writes to the socket.
- *
- * @api private
- */
-
-WebSocket.prototype.write = function (data) {
-  if (this.open) {
-    this.drained = false;
-
-    if (this.buffer) {
-      this.buffered.push(data);
-      return this;
-    }
-
-    var length = Buffer.byteLength(data)
-      , buffer = new Buffer(2 + length);
-
-    buffer.write('\x00', 'binary');
-    buffer.write(data, 1, 'utf8');
-    buffer.write('\xff', 1 + length, 'binary');
-
-    try {
-      if (this.socket.write(buffer)) {
-        this.drained = true;
-      }
-    } catch (e) {
-      this.end();
-    }
-
-    this.log.debug(this.name + ' writing', data);
-  }
-};
-
-/**
- * Flushes the internal buffer
- *
- * @api private
- */
-
-WebSocket.prototype.flush = function () {
-  this.buffer = false;
-
-  for (var i = 0, l = this.buffered.length; i < l; i++) {
-    this.write(this.buffered.splice(0, 1)[0]);
-  }
-};
-
-/**
- * Finishes the handshake.
- *
- * @api private
- */
-
-WebSocket.prototype.proveReception = function (headers) {
-  var self = this
-    , k1 = this.req.headers['sec-websocket-key1']
-    , k2 = this.req.headers['sec-websocket-key2'];
-
-  if (k1 && k2){
-    var md5 = crypto.createHash('md5');
-
-    [k1, k2].forEach(function (k) {
-      var n = parseInt(k.replace(/[^\d]/g, ''))
-        , spaces = k.replace(/[^ ]/g, '').length;
-
-      if (spaces === 0 || n % spaces !== 0){
-        self.log.warn('Invalid ' + self.name + ' key: "' + k + '".');
-        self.end();
-        return false;
-      }
-
-      n /= spaces;
-
-      md5.update(String.fromCharCode(
-        n >> 24 & 0xFF,
-        n >> 16 & 0xFF,
-        n >> 8  & 0xFF,
-        n       & 0xFF));
-    });
-
-    md5.update(this.req.head.toString('binary'));
-
-    try {
-      this.socket.write(md5.digest('binary'), 'binary');
-    } catch (e) {
-      this.end();
-    }
-  }
-
-  return true;
-};
-
-/**
- * Writes a payload.
- *
- * @api private
- */
-
-WebSocket.prototype.payload = function (msgs) {
-  for (var i = 0, l = msgs.length; i < l; i++) {
-    this.write(msgs[i]);
-  }
-
-  return this;
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-WebSocket.prototype.doClose = function () {
-  this.socket.end();
-};
-
-/**
- * WebSocket parser
- *
- * @api public
- */
-
-function Parser () {
-  this.buffer = '';
-  this.i = 0;
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-Parser.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Adds data to the buffer.
- *
- * @api public
- */
-
-Parser.prototype.add = function (data) {
-  this.buffer += data;
-  this.parse();
-};
-
-/**
- * Parses the buffer.
- *
- * @api private
- */
-
-Parser.prototype.parse = function () {
-  for (var i = this.i, chr, l = this.buffer.length; i < l; i++){
-    chr = this.buffer[i];
-
-    if (this.buffer.length == 2 && this.buffer[1] == '\u0000') {
-      this.emit('close');
-      this.buffer = '';
-      this.i = 0;
-      return;
-    }
-
-    if (i === 0){
-      if (chr != '\u0000')
-        this.error('Bad framing. Expected null byte as first frame');
-      else
-        continue;
-    }
-
-    if (chr == '\ufffd'){
-      this.emit('data', this.buffer.substr(1, i - 1));
-      this.buffer = this.buffer.substr(i + 1);
-      this.i = 0;
-      return this.parse();
-    }
-  }
-};
-
-/**
- * Handles an error
- *
- * @api private
- */
-
-Parser.prototype.error = function (reason) {
-  this.buffer = '';
-  this.i = 0;
-  this.emit('error', reason);
-  return this;
-};

+ 0 - 622
app/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js

@@ -1,622 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
- 
-/**
- * Module requirements.
- */
-
-var Transport = require('../../transport')
-  , EventEmitter = process.EventEmitter
-  , crypto = require('crypto')
-  , url = require('url')
-  , parser = require('../../parser')
-  , util = require('../../util');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = WebSocket;
-exports.Parser = Parser;
-
-/**
- * HTTP interface constructor. Interface compatible with all transports that
- * depend on request-response cycles.
- *
- * @api public
- */
-
-function WebSocket (mng, data, req) {
-  // parser
-  var self = this;
-
-  this.manager = mng;
-  this.parser = new Parser();
-  this.parser.on('data', function (packet) {
-    self.onMessage(parser.decodePacket(packet));
-  });
-  this.parser.on('ping', function () {
-    // version 8 ping => pong
-    try {
-      self.socket.write('\u008a\u0000');
-    }
-    catch (e) {
-      self.end();
-      return;
-    }
-  });
-  this.parser.on('close', function () {
-    self.end();
-  });
-  this.parser.on('error', function (reason) {
-    self.log.warn(self.name + ' parser error: ' + reason);
-    self.end();
-  });
-
-  Transport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-WebSocket.prototype.__proto__ = Transport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-WebSocket.prototype.name = 'websocket';
-
-/**
- * Websocket draft version
- *
- * @api public
- */
-
-WebSocket.prototype.protocolVersion = '07-12';
-
-/**
- * Called when the socket connects.
- *
- * @api private
- */
-
-WebSocket.prototype.onSocketConnect = function () {
-  var self = this;
-
-  if (typeof this.req.headers.upgrade === 'undefined' || 
-      this.req.headers.upgrade.toLowerCase() !== 'websocket') {
-    this.log.warn(this.name + ' connection invalid');
-    this.end();
-    return;
-  }
-
-  var origin = this.req.headers['sec-websocket-origin']
-    , 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)) {
-    this.log.warn(this.name + ' connection invalid: origin mismatch');
-    this.end();
-    return;    
-  }
-  
-  if (!this.req.headers['sec-websocket-key']) {
-    this.log.warn(this.name + ' connection invalid: received no key');
-    this.end();
-    return;
-  }
-    
-  // calc key
-  var key = this.req.headers['sec-websocket-key'];  
-  var shasum = crypto.createHash('sha1');  
-  shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");  
-  key = shasum.digest('base64');
-
-  var headers = [
-      'HTTP/1.1 101 Switching Protocols'
-    , 'Upgrade: websocket'
-    , 'Connection: Upgrade'
-    , 'Sec-WebSocket-Accept: ' + key
-  ];
-
-  try {
-    this.socket.write(headers.concat('', '').join('\r\n'));
-    this.socket.setTimeout(0);
-    this.socket.setNoDelay(true);
-  } catch (e) {
-    this.end();
-    return;
-  }
-
-  this.socket.on('data', function (data) {
-    self.parser.add(data);
-  });
-};
-
-/**
- * Verifies the origin of a request.
- *
- * @api private
- */
-
-WebSocket.prototype.verifyOrigin = function (origin) {
-  var origins = this.manager.get('origins');
-
-  if (origin === 'null') origin = '*';
-
-  if (origins.indexOf('*:*') !== -1) {
-    return true;
-  }
-
-  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 + ':*') ||
-        ~origins.indexOf('*:' + parts.port);
-      if (!ok) this.log.warn('illegal origin: ' + origin);
-      return ok;
-    } catch (ex) {
-      this.log.warn('error parsing origin');
-    }
-  }
-  else {
-    this.log.warn('origin missing from websocket call, yet required by config');        
-  }
-  return false;
-};
-
-/**
- * Writes to the socket.
- *
- * @api private
- */
-
-WebSocket.prototype.write = function (data) {
-  if (this.open) {
-    var buf = this.frame(0x81, data);
-    try {
-      this.socket.write(buf, 'binary');
-    }
-    catch (e) {
-      this.end();
-      return;
-    }
-    this.log.debug(this.name + ' writing', data);
-  }
-};
-
-/**
- * Writes a payload.
- *
- * @api private
- */
-
-WebSocket.prototype.payload = function (msgs) {
-  for (var i = 0, l = msgs.length; i < l; i++) {
-    this.write(msgs[i]);
-  }
-
-  return this;
-};
-
-/**
- * Frame server-to-client output as a text packet.
- *
- * @api private
- */
-
-WebSocket.prototype.frame = function (opcode, str) {
-  var dataBuffer = new Buffer(str)
-    , dataLength = dataBuffer.length
-    , startOffset = 2
-    , secondByte = dataLength;
-  if (dataLength > 65536) {
-    startOffset = 10;
-    secondByte = 127;
-  }
-  else if (dataLength > 125) {
-    startOffset = 4;
-    secondByte = 126;
-  }
-  var outputBuffer = new Buffer(dataLength + startOffset);
-  outputBuffer[0] = opcode;
-  outputBuffer[1] = secondByte;
-  dataBuffer.copy(outputBuffer, startOffset);
-  switch (secondByte) {
-  case 126:
-    outputBuffer[2] = dataLength >>> 8;
-    outputBuffer[3] = dataLength % 256;
-    break;
-  case 127:
-    var l = dataLength;
-    for (var i = 1; i <= 8; ++i) {
-      outputBuffer[startOffset - i] = l & 0xff;
-      l >>>= 8;
-    }
-  }
-  return outputBuffer;
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-WebSocket.prototype.doClose = function () {
-  this.socket.end();
-};
-
-/**
- * WebSocket parser
- *
- * @api public
- */
- 
-function Parser () {
-  this.state = {
-    activeFragmentedOperation: null,
-    lastFragment: false,
-    masked: false,
-    opcode: 0
-  };
-  this.overflow = null;
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  this.currentMessage = '';
-
-  var self = this;  
-  this.opcodeHandlers = {
-    // text
-    '1': function(data) {
-      var finish = function(mask, data) {
-        self.currentMessage += self.unmask(mask, data);
-        if (self.state.lastFragment) {
-          self.emit('data', self.currentMessage);
-          self.currentMessage = '';
-        }
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          if (util.unpack(data.slice(0, 4)) != 0) {
-            self.error('packets with length spanning more than 32 bit is currently not supported');
-            return;
-          }
-          var lengthBytes = data.slice(4); // note: cap to 32 bit length
-          expectData(util.unpack(data));
-        });
-      }      
-    },
-    // binary
-    '2': function(data) {
-      var finish = function(mask, data) {
-        if (typeof self.currentMessage == 'string') self.currentMessage = []; // build a buffer list
-        self.currentMessage.push(self.unmask(mask, data, true));
-        if (self.state.lastFragment) {
-          self.emit('binary', self.concatBuffers(self.currentMessage));
-          self.currentMessage = '';
-        }
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          if (util.unpack(data.slice(0, 4)) != 0) {
-            self.error('packets with length spanning more than 32 bit is currently not supported');
-            return;
-          }
-          var lengthBytes = data.slice(4); // note: cap to 32 bit length
-          expectData(util.unpack(data));
-        });
-      }      
-    },
-    // close
-    '8': function(data) {
-      self.emit('close');
-      self.reset();
-    },
-    // ping
-    '9': function(data) {
-      if (self.state.lastFragment == false) {
-        self.error('fragmented ping is not supported');
-        return;
-      }
-      
-      var finish = function(mask, data) {
-        self.emit('ping', self.unmask(mask, data));
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength == 0) {
-        finish(null, null);        
-      }
-      else if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          expectData(util.unpack(data));
-        });
-      }      
-    }
-  }
-
-  this.expect('Opcode', 2, this.processPacket);  
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-Parser.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Add new data to the parser.
- *
- * @api public
- */
-
-Parser.prototype.add = function(data) {
-  if (this.expectBuffer == null) {
-    this.addToOverflow(data);
-    return;
-  }
-  var toRead = Math.min(data.length, this.expectBuffer.length - this.expectOffset);
-  data.copy(this.expectBuffer, this.expectOffset, 0, toRead);
-  this.expectOffset += toRead;
-  if (toRead < data.length) {
-    // at this point the overflow buffer shouldn't at all exist
-    this.overflow = new Buffer(data.length - toRead);
-    data.copy(this.overflow, 0, toRead, toRead + this.overflow.length);
-  }
-  if (this.expectOffset == this.expectBuffer.length) {
-    var bufferForHandler = this.expectBuffer;
-    this.expectBuffer = null;
-    this.expectOffset = 0;
-    this.expectHandler.call(this, bufferForHandler);
-  }
-}
-
-/**
- * Adds a piece of data to the overflow.
- *
- * @api private
- */
-
-Parser.prototype.addToOverflow = function(data) {
-  if (this.overflow == null) this.overflow = data;
-  else {
-    var prevOverflow = this.overflow;
-    this.overflow = new Buffer(this.overflow.length + data.length);
-    prevOverflow.copy(this.overflow, 0);
-    data.copy(this.overflow, prevOverflow.length);
-  }  
-}
-
-/**
- * Waits for a certain amount of bytes to be available, then fires a callback.
- *
- * @api private
- */
-
-Parser.prototype.expect = function(what, length, handler) {
-  this.expectBuffer = new Buffer(length);
-  this.expectOffset = 0;
-  this.expectHandler = handler;
-  if (this.overflow != null) {
-    var toOverflow = this.overflow;
-    this.overflow = null;
-    this.add(toOverflow);
-  }
-}
-
-/**
- * Start processing a new packet.
- *
- * @api private
- */
-
-Parser.prototype.processPacket = function (data) {
-  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;
-  if (opcode == 0) { 
-    // continuation frame
-    this.state.opcode = this.state.activeFragmentedOperation;
-    if (!(this.state.opcode == 1 || this.state.opcode == 2)) {
-      this.error('continuation frame cannot follow current opcode')
-      return;
-    }
-  }
-  else {    
-    this.state.opcode = opcode;
-    if (this.state.lastFragment === false) {
-        this.state.activeFragmentedOperation = opcode;
-    }
-  }
-  var handler = this.opcodeHandlers[this.state.opcode];
-  if (typeof handler == 'undefined') this.error('no handler for opcode ' + this.state.opcode);
-  else handler(data);
-}
-
-/**
- * Endprocessing a packet.
- *
- * @api private
- */
-
-Parser.prototype.endPacket = function() {
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  if (this.state.lastFragment && this.state.opcode == this.state.activeFragmentedOperation) {
-    // end current fragmented operation
-    this.state.activeFragmentedOperation = null;
-  }
-  this.state.lastFragment = false;
-  this.state.opcode = this.state.activeFragmentedOperation != null ? this.state.activeFragmentedOperation : 0;
-  this.state.masked = false;
-  this.expect('Opcode', 2, this.processPacket);  
-}
-
-/**
- * Reset the parser state.
- *
- * @api private
- */
-
-Parser.prototype.reset = function() {
-  this.state = {
-    activeFragmentedOperation: null,
-    lastFragment: false,
-    masked: false,
-    opcode: 0
-  };
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  this.overflow = null;
-  this.currentMessage = '';
-}
-
-/**
- * Unmask received data.
- *
- * @api private
- */
-
-Parser.prototype.unmask = function (mask, buf, binary) {
-  if (mask != null) {
-    for (var i = 0, ll = buf.length; i < ll; i++) {
-      buf[i] ^= mask[i % 4];
-    }    
-  }
-  if (binary) return buf;
-  return buf != null ? buf.toString('utf8') : '';
-}
-
-/**
- * Concatenates a list of buffers.
- *
- * @api private
- */
-
-Parser.prototype.concatBuffers = function(buffers) {
-  var length = 0;
-  for (var i = 0, l = buffers.length; i < l; ++i) {
-    length += buffers[i].length;
-  }
-  var mergedBuffer = new Buffer(length);
-  var offset = 0;
-  for (var i = 0, l = buffers.length; i < l; ++i) {
-    buffers[i].copy(mergedBuffer, offset);
-    offset += buffers[i].length;
-  }
-  return mergedBuffer;
-}
-
-/**
- * Handles an error
- *
- * @api private
- */
-
-Parser.prototype.error = function (reason) {
-  this.reset();
-  this.emit('error', reason);
-  return this;
-};

+ 0 - 622
app/node_modules/socket.io/lib/transports/websocket/hybi-16.js

@@ -1,622 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
- 
-/**
- * Module requirements.
- */
-
-var Transport = require('../../transport')
-  , EventEmitter = process.EventEmitter
-  , crypto = require('crypto')
-  , url = require('url')
-  , parser = require('../../parser')
-  , util = require('../../util');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = WebSocket;
-exports.Parser = Parser;
-
-/**
- * HTTP interface constructor. Interface compatible with all transports that
- * depend on request-response cycles.
- *
- * @api public
- */
-
-function WebSocket (mng, data, req) {
-  // parser
-  var self = this;
-
-  this.manager = mng;
-  this.parser = new Parser();
-  this.parser.on('data', function (packet) {
-    self.onMessage(parser.decodePacket(packet));
-  });
-  this.parser.on('ping', function () {
-    // version 8 ping => pong
-    try {
-      self.socket.write('\u008a\u0000');
-    }
-    catch (e) {
-      self.end();
-      return;
-    }
-  });
-  this.parser.on('close', function () {
-    self.end();
-  });
-  this.parser.on('error', function (reason) {
-    self.log.warn(self.name + ' parser error: ' + reason);
-    self.end();
-  });
-
-  Transport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-WebSocket.prototype.__proto__ = Transport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-WebSocket.prototype.name = 'websocket';
-
-/**
- * Websocket draft version
- *
- * @api public
- */
-
-WebSocket.prototype.protocolVersion = '16';
-
-/**
- * Called when the socket connects.
- *
- * @api private
- */
-
-WebSocket.prototype.onSocketConnect = function () {
-  var self = this;
-
-  if (typeof this.req.headers.upgrade === 'undefined' || 
-      this.req.headers.upgrade.toLowerCase() !== 'websocket') {
-    this.log.warn(this.name + ' connection invalid');
-    this.end();
-    return;
-  }
-
-  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;
-  
-  if (!this.verifyOrigin(origin)) {
-    this.log.warn(this.name + ' connection invalid: origin mismatch');
-    this.end();
-    return;    
-  }
-  
-  if (!this.req.headers['sec-websocket-key']) {
-    this.log.warn(this.name + ' connection invalid: received no key');
-    this.end();
-    return;
-  }
-    
-  // calc key
-  var key = this.req.headers['sec-websocket-key'];  
-  var shasum = crypto.createHash('sha1');  
-  shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");  
-  key = shasum.digest('base64');
-
-  var headers = [
-      'HTTP/1.1 101 Switching Protocols'
-    , 'Upgrade: websocket'
-    , 'Connection: Upgrade'
-    , 'Sec-WebSocket-Accept: ' + key
-  ];
-
-  try {
-    this.socket.write(headers.concat('', '').join('\r\n'));
-    this.socket.setTimeout(0);
-    this.socket.setNoDelay(true);
-  } catch (e) {
-    this.end();
-    return;
-  }
-
-  this.socket.on('data', function (data) {
-    self.parser.add(data);
-  });
-};
-
-/**
- * Verifies the origin of a request.
- *
- * @api private
- */
-
-WebSocket.prototype.verifyOrigin = function (origin) {
-  var origins = this.manager.get('origins');
-
-  if (origin === 'null') origin = '*';
-
-  if (origins.indexOf('*:*') !== -1) {
-    return true;
-  }
-
-  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 + ':*') ||
-        ~origins.indexOf('*:' + parts.port);
-      if (!ok) this.log.warn('illegal origin: ' + origin);
-      return ok;
-    } catch (ex) {
-      this.log.warn('error parsing origin');
-    }
-  }
-  else {
-    this.log.warn('origin missing from websocket call, yet required by config');        
-  }
-  return false;
-};
-
-/**
- * Writes to the socket.
- *
- * @api private
- */
-
-WebSocket.prototype.write = function (data) {
-  if (this.open) {
-    var buf = this.frame(0x81, data);
-    try {
-      this.socket.write(buf, 'binary');
-    }
-    catch (e) {
-      this.end();
-      return;
-    }
-    this.log.debug(this.name + ' writing', data);
-  }
-};
-
-/**
- * Writes a payload.
- *
- * @api private
- */
-
-WebSocket.prototype.payload = function (msgs) {
-  for (var i = 0, l = msgs.length; i < l; i++) {
-    this.write(msgs[i]);
-  }
-
-  return this;
-};
-
-/**
- * Frame server-to-client output as a text packet.
- *
- * @api private
- */
-
-WebSocket.prototype.frame = function (opcode, str) {
-  var dataBuffer = new Buffer(str)
-    , dataLength = dataBuffer.length
-    , startOffset = 2
-    , secondByte = dataLength;
-  if (dataLength > 65536) {
-    startOffset = 10;
-    secondByte = 127;
-  }
-  else if (dataLength > 125) {
-    startOffset = 4;
-    secondByte = 126;
-  }
-  var outputBuffer = new Buffer(dataLength + startOffset);
-  outputBuffer[0] = opcode;
-  outputBuffer[1] = secondByte;
-  dataBuffer.copy(outputBuffer, startOffset);
-  switch (secondByte) {
-  case 126:
-    outputBuffer[2] = dataLength >>> 8;
-    outputBuffer[3] = dataLength % 256;
-    break;
-  case 127:
-    var l = dataLength;
-    for (var i = 1; i <= 8; ++i) {
-      outputBuffer[startOffset - i] = l & 0xff;
-      l >>>= 8;
-    }
-  }
-  return outputBuffer;
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-WebSocket.prototype.doClose = function () {
-  this.socket.end();
-};
-
-/**
- * WebSocket parser
- *
- * @api public
- */
- 
-function Parser () {
-  this.state = {
-    activeFragmentedOperation: null,
-    lastFragment: false,
-    masked: false,
-    opcode: 0
-  };
-  this.overflow = null;
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  this.currentMessage = '';
-
-  var self = this;  
-  this.opcodeHandlers = {
-    // text
-    '1': function(data) {
-      var finish = function(mask, data) {
-        self.currentMessage += self.unmask(mask, data);
-        if (self.state.lastFragment) {
-          self.emit('data', self.currentMessage);
-          self.currentMessage = '';
-        }
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          if (util.unpack(data.slice(0, 4)) != 0) {
-            self.error('packets with length spanning more than 32 bit is currently not supported');
-            return;
-          }
-          var lengthBytes = data.slice(4); // note: cap to 32 bit length
-          expectData(util.unpack(data));
-        });
-      }      
-    },
-    // binary
-    '2': function(data) {
-      var finish = function(mask, data) {
-        if (typeof self.currentMessage == 'string') self.currentMessage = []; // build a buffer list
-        self.currentMessage.push(self.unmask(mask, data, true));
-        if (self.state.lastFragment) {
-          self.emit('binary', self.concatBuffers(self.currentMessage));
-          self.currentMessage = '';
-        }
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          if (util.unpack(data.slice(0, 4)) != 0) {
-            self.error('packets with length spanning more than 32 bit is currently not supported');
-            return;
-          }
-          var lengthBytes = data.slice(4); // note: cap to 32 bit length
-          expectData(util.unpack(data));
-        });
-      }      
-    },
-    // close
-    '8': function(data) {
-      self.emit('close');
-      self.reset();
-    },
-    // ping
-    '9': function(data) {
-      if (self.state.lastFragment == false) {
-        self.error('fragmented ping is not supported');
-        return;
-      }
-      
-      var finish = function(mask, data) {
-        self.emit('ping', self.unmask(mask, data));
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength == 0) {
-        finish(null, null);        
-      }
-      else if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          expectData(util.unpack(data));
-        });
-      }      
-    }
-  }
-
-  this.expect('Opcode', 2, this.processPacket);  
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-Parser.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Add new data to the parser.
- *
- * @api public
- */
-
-Parser.prototype.add = function(data) {
-  if (this.expectBuffer == null) {
-    this.addToOverflow(data);
-    return;
-  }
-  var toRead = Math.min(data.length, this.expectBuffer.length - this.expectOffset);
-  data.copy(this.expectBuffer, this.expectOffset, 0, toRead);
-  this.expectOffset += toRead;
-  if (toRead < data.length) {
-    // at this point the overflow buffer shouldn't at all exist
-    this.overflow = new Buffer(data.length - toRead);
-    data.copy(this.overflow, 0, toRead, toRead + this.overflow.length);
-  }
-  if (this.expectOffset == this.expectBuffer.length) {
-    var bufferForHandler = this.expectBuffer;
-    this.expectBuffer = null;
-    this.expectOffset = 0;
-    this.expectHandler.call(this, bufferForHandler);
-  }
-}
-
-/**
- * Adds a piece of data to the overflow.
- *
- * @api private
- */
-
-Parser.prototype.addToOverflow = function(data) {
-  if (this.overflow == null) this.overflow = data;
-  else {
-    var prevOverflow = this.overflow;
-    this.overflow = new Buffer(this.overflow.length + data.length);
-    prevOverflow.copy(this.overflow, 0);
-    data.copy(this.overflow, prevOverflow.length);
-  }  
-}
-
-/**
- * Waits for a certain amount of bytes to be available, then fires a callback.
- *
- * @api private
- */
-
-Parser.prototype.expect = function(what, length, handler) {
-  this.expectBuffer = new Buffer(length);
-  this.expectOffset = 0;
-  this.expectHandler = handler;
-  if (this.overflow != null) {
-    var toOverflow = this.overflow;
-    this.overflow = null;
-    this.add(toOverflow);
-  }
-}
-
-/**
- * Start processing a new packet.
- *
- * @api private
- */
-
-Parser.prototype.processPacket = function (data) {
-  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;
-  if (opcode == 0) { 
-    // continuation frame
-    this.state.opcode = this.state.activeFragmentedOperation;
-    if (!(this.state.opcode == 1 || this.state.opcode == 2)) {
-      this.error('continuation frame cannot follow current opcode')
-      return;
-    }
-  }
-  else {    
-    this.state.opcode = opcode;
-    if (this.state.lastFragment === false) {
-        this.state.activeFragmentedOperation = opcode;
-    }
-  }
-  var handler = this.opcodeHandlers[this.state.opcode];
-  if (typeof handler == 'undefined') this.error('no handler for opcode ' + this.state.opcode);
-  else handler(data);
-}
-
-/**
- * Endprocessing a packet.
- *
- * @api private
- */
-
-Parser.prototype.endPacket = function() {
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  if (this.state.lastFragment && this.state.opcode == this.state.activeFragmentedOperation) {
-    // end current fragmented operation
-    this.state.activeFragmentedOperation = null;
-  }
-  this.state.lastFragment = false;
-  this.state.opcode = this.state.activeFragmentedOperation != null ? this.state.activeFragmentedOperation : 0;
-  this.state.masked = false;
-  this.expect('Opcode', 2, this.processPacket);  
-}
-
-/**
- * Reset the parser state.
- *
- * @api private
- */
-
-Parser.prototype.reset = function() {
-  this.state = {
-    activeFragmentedOperation: null,
-    lastFragment: false,
-    masked: false,
-    opcode: 0
-  };
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  this.overflow = null;
-  this.currentMessage = '';
-}
-
-/**
- * Unmask received data.
- *
- * @api private
- */
-
-Parser.prototype.unmask = function (mask, buf, binary) {
-  if (mask != null) {
-    for (var i = 0, ll = buf.length; i < ll; i++) {
-      buf[i] ^= mask[i % 4];
-    }    
-  }
-  if (binary) return buf;
-  return buf != null ? buf.toString('utf8') : '';
-}
-
-/**
- * Concatenates a list of buffers.
- *
- * @api private
- */
-
-Parser.prototype.concatBuffers = function(buffers) {
-  var length = 0;
-  for (var i = 0, l = buffers.length; i < l; ++i) {
-    length += buffers[i].length;
-  }
-  var mergedBuffer = new Buffer(length);
-  var offset = 0;
-  for (var i = 0, l = buffers.length; i < l; ++i) {
-    buffers[i].copy(mergedBuffer, offset);
-    offset += buffers[i].length;
-  }
-  return mergedBuffer;
-}
-
-/**
- * Handles an error
- *
- * @api private
- */
-
-Parser.prototype.error = function (reason) {
-  this.reset();
-  this.emit('error', reason);
-  return this;
-};

+ 0 - 11
app/node_modules/socket.io/lib/transports/websocket/index.js

@@ -1,11 +0,0 @@
-
-/**
- * Export websocket versions.
- */
-
-module.exports = {
-  7: require('./hybi-07-12'),
-  8: require('./hybi-07-12'),
-  13: require('./hybi-16'),
-  default: require('./default')
-};

+ 0 - 69
app/node_modules/socket.io/lib/transports/xhr-polling.js

@@ -1,69 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPPolling = require('./http-polling');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = XHRPolling;
-
-/**
- * Ajax polling transport.
- *
- * @api public
- */
-
-function XHRPolling (mng, data, req) {
-  HTTPPolling.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-XHRPolling.prototype.__proto__ = HTTPPolling.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-XHRPolling.prototype.name = 'xhr-polling';
-
-/**
- * Frames data prior to write.
- *
- * @api private
- */
-
-XHRPolling.prototype.doWrite = function (data) {
-  HTTPPolling.prototype.doWrite.call(this);
-
-  var origin = this.req.headers.origin
-    , headers = {
-          'Content-Type': 'text/plain; charset=UTF-8'
-        , 'Content-Length': data === undefined ? 0 : Buffer.byteLength(data)
-        , 'Connection': 'Keep-Alive'
-      };
-
-  if (origin) {
-    // https://developer.mozilla.org/En/HTTP_Access_Control
-    headers['Access-Control-Allow-Origin'] = origin;
-    headers['Access-Control-Allow-Credentials'] = 'true';
-  }
-
-  this.response.writeHead(200, headers);
-  this.response.write(data);
-  this.log.debug(this.name + ' writing', data);
-};

+ 0 - 50
app/node_modules/socket.io/lib/util.js

@@ -1,50 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <[email protected]>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-/**
- * Converts an enumerable to an array.
- *
- * @api public
- */
-
-exports.toArray = function (enu) {
-  var arr = [];
-
-  for (var i = 0, l = enu.length; i < l; i++)
-    arr.push(enu[i]);
-
-  return arr;
-};
-
-/**
- * Unpacks a buffer to a number.
- *
- * @api public
- */
-
-exports.unpack = function (buffer) {
-  var n = 0;
-  for (var i = 0; i < buffer.length; ++i) {
-    n = (i == 0) ? buffer[i] : (n * 256) + buffer[i];
-  }
-  return n;
-}
-
-/**
- * Left pads a string.
- *
- * @api public
- */
-
-exports.padl = function (s,n,c) { 
-  return new Array(1 + n - s.length).join(c) + s;
-}
-

+ 0 - 3
app/node_modules/socket.io/node_modules/base64id/.npmignore

@@ -1,3 +0,0 @@
-support
-test
-examples

+ 0 - 18
app/node_modules/socket.io/node_modules/base64id/README.md

@@ -1,18 +0,0 @@
-base64id
-========
-
-Node.js module that generates a base64 id.
-
-Uses crypto.randomBytes when available, falls back to unsafe methods for node.js <= 0.4.
-
-To increase performance, random bytes are buffered to minimize the number of synchronous calls to crypto.randomBytes.
-
-## Installation
-
-   $ npm install mongoose
-
-## Usage
-
-   var base64id = require('base64id');
-
-   var id = base64id.generateId();

+ 0 - 103
app/node_modules/socket.io/node_modules/base64id/lib/base64id.js

@@ -1,103 +0,0 @@
-/*!
- * base64id v0.1.0
- */
-
-/**
- * Module dependencies
- */
-
-var crypto = require('crypto');
-
-/**
- * Constructor
- */
-
-var Base64Id = function() { };
-
-/**
- * Get random bytes
- *
- * Uses a buffer if available, falls back to crypto.randomBytes
- */
-
-Base64Id.prototype.getRandomBytes = function(bytes) {
-
-  var BUFFER_SIZE = 4096
-  var self = this;  
-  
-  bytes = bytes || 12;
-
-  if (bytes > BUFFER_SIZE) {
-    return crypto.randomBytes(bytes);
-  }
-  
-  var bytesInBuffer = parseInt(BUFFER_SIZE/bytes);
-  var threshold = parseInt(bytesInBuffer*0.85);
-
-  if (!threshold) {
-    return crypto.randomBytes(bytes);
-  }
-
-  if (this.bytesBufferIndex == null) {
-     this.bytesBufferIndex = -1;
-  }
-
-  if (this.bytesBufferIndex == bytesInBuffer) {
-    this.bytesBuffer = null;
-    this.bytesBufferIndex = -1;
-  }
-
-  // No buffered bytes available or index above threshold
-  if (this.bytesBufferIndex == -1 || this.bytesBufferIndex > threshold) {
-     
-    if (!this.isGeneratingBytes) {
-      this.isGeneratingBytes = true;
-      crypto.randomBytes(BUFFER_SIZE, function(err, bytes) {
-        self.bytesBuffer = bytes;
-        self.bytesBufferIndex = 0;
-        self.isGeneratingBytes = false;
-      }); 
-    }
-    
-    // Fall back to sync call when no buffered bytes are available
-    if (this.bytesBufferIndex == -1) {
-      return crypto.randomBytes(bytes);
-    }
-  }
-  
-  var result = this.bytesBuffer.slice(bytes*this.bytesBufferIndex, bytes*(this.bytesBufferIndex+1)); 
-  this.bytesBufferIndex++; 
-  
-  return result;
-}
-
-/**
- * Generates a base64 id
- *
- * (Original version from socket.io <http://socket.io>)
- */
-
-Base64Id.prototype.generateId = function () {
-  var rand = new Buffer(15); // multiple of 3 for base64
-  if (!rand.writeInt32BE) {
-    return Math.abs(Math.random() * Math.random() * Date.now() | 0).toString()
-      + Math.abs(Math.random() * Math.random() * Date.now() | 0).toString();
-  }
-  this.sequenceNumber = (this.sequenceNumber + 1) | 0;
-  rand.writeInt32BE(this.sequenceNumber, 11);
-  if (crypto.randomBytes) {
-    this.getRandomBytes(12).copy(rand);
-  } else {
-    // not secure for node 0.4
-    [0, 4, 8].forEach(function(i) {
-      rand.writeInt32BE(Math.random() * Math.pow(2, 32) | 0, i);
-    });
-  }
-  return rand.toString('base64').replace(/\//g, '_').replace(/\+/g, '-');
-};
-
-/**
- * Export
- */
-
-exports = module.exports = new Base64Id();

+ 0 - 28
app/node_modules/socket.io/node_modules/base64id/package.json

@@ -1,28 +0,0 @@
-{
-  "name": "base64id",
-  "version": "0.1.0",
-  "description": "Generates a base64 id",
-  "author": {
-    "name": "Kristian Faeldt",
-    "email": "[email protected]"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/faeldt/base64id.git"
-  },
-  "main": "./lib/base64id.js",
-  "engines": {
-    "node": ">= 0.4.0"
-  },
-  "readme": "base64id\n========\n\nNode.js module that generates a base64 id.\n\nUses crypto.randomBytes when available, falls back to unsafe methods for node.js <= 0.4.\n\nTo increase performance, random bytes are buffered to minimize the number of synchronous calls to crypto.randomBytes.\n\n## Installation\n\n   $ npm install mongoose\n\n## Usage\n\n   var base64id = require('base64id');\n\n   var id = base64id.generateId();\n",
-  "readmeFilename": "README.md",
-  "bugs": {
-    "url": "https://github.com/faeldt/base64id/issues"
-  },
-  "_id": "[email protected]",
-  "dist": {
-    "shasum": "a3ad91c8f7b3cc47297d360102042a2f25dfa5fa"
-  },
-  "_from": "[email protected]",
-  "_resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz"
-}

+ 0 - 1
app/node_modules/socket.io/node_modules/policyfile/.npmignore

@@ -1 +0,0 @@
-node_modules

+ 0 - 19
app/node_modules/socket.io/node_modules/policyfile/LICENSE

@@ -1,19 +0,0 @@
-Copyright (c) 2011 Arnout Kazemier,3rd-Eden
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 7
app/node_modules/socket.io/node_modules/policyfile/Makefile

@@ -1,7 +0,0 @@
-doc:
-	dox --title "FlashPolicyFileServer" lib/* > doc/index.html
-
-test:
-	expresso -I lib $(TESTFLAGS) tests/*.test.js
-
-.PHONY: test doc

+ 0 - 98
app/node_modules/socket.io/node_modules/policyfile/README.md

@@ -1,98 +0,0 @@
-## LOL, WUT?
-It basically allows you to allow or disallow Flash Player sockets from accessing your site.
-
-## Installation
-
-```bash
-npm install policyfile
-```
-## Usage
-
-The server is based on the regular and know `net` and `http` server patterns. So it you can just listen
-for all the events that a `net` based server emits etc. But there is one extra event, the `connect_failed`
-event. This event is triggered when we are unable to listen on the supplied port number.
-
-### createServer
-Creates a new server instance and accepts 2 optional arguments:
-
--  `options` **Object** Options to configure the server instance
-    -  `log` **Boolean** Enable logging to STDOUT and STDERR (defaults to true)
--  `origins` **Array** An Array of origins that are allowed by the server (defaults to *:*)
-
-```js
-var pf = require('policyfile');
-pf.createServer();
-pf.listen();
-```
-
-#### server.listen
-Start listening on the server and it takes 3 optional arguments
-
--  `port` **Number** On which port number should we listen? (defaults to 843, which is the first port number the FlashPlayer checks)
--  `server` **Server** A http server, if we are unable to accept requests or run the server we can also answer the policy requests inline over the supplied HTTP server.
--  `callback` **Function** A callback function that is called when listening to the server was successful.
-
-```js
-var pf = require('policyfile');
-pf.createServer();
-pf.listen(1337, function(){
-  console.log(':3 yay')
-});
-```
-
-Changing port numbers can be handy if you do not want to run your server as root and have port 843 forward to a non root port number (aka a number above 1024).
-
-```js
-var pf = require('policyfile')
-  , http = require('http');
-
-server = http.createServer(function(q,r){r.writeHead(200);r.end('hello world')});
-server.listen(80);
-
-pf.createServer();
-pf.listen(1337, server, function(){
-  console.log(':3 yay')
-});
-```
-
-Support for serving inline requests over a existing HTTP connection as the FlashPlayer will first check port 843, but if it's unable to get a response there it will send a policy file request over port 80, which is usually your http server.
-
-#### server.add
-Adds more origins to the policy file you can add as many arguments as you like.
-
-```js
-var pf = require('policyfile');
-pf.createServer(['google.com:80']);
-pf.listen();
-pf.add('blog.3rd-Eden.com:80', 'blog.3rd-Eden.com:8080'); // now has 3 origins
-```
-
-#### server.add
-Adds more origins to the policy file you can add as many arguments as you like.
-
-```js
-var pf = require('policyfile');
-pf.createServer(['blog.3rd-Eden.com:80', 'blog.3rd-Eden.com:8080']);
-pf.listen();
-pf.remove('blog.3rd-Eden.com:8080'); // only contains the :80 version now
-```
-
-#### server.close
-Shuts down the server
-
-```js
-var pf = require('policyfile');
-pf.createServer();
-pf.listen();
-pf.close(); // OH NVM.
-```
-
-## API
-http://3rd-eden.com/FlashPolicyFileServer/
-
-## Examples
-See https://github.com/3rd-Eden/FlashPolicyFileServer/tree/master/examples for examples
-
-## Licence
-
-MIT see LICENSE file in the repository

+ 0 - 375
app/node_modules/socket.io/node_modules/policyfile/doc/index.html

@@ -1,375 +0,0 @@
-<html>
-	<head>
-		<title>FlashPolicyFileServer</title>
-		<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
-		<style>body {
-    margin: 0;
-    padding: 0;
-    font: 14px/1.5 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
-    color: #252519;
-}
-a {
-    color: #252519;
-}
-a:hover {
-    text-decoration: underline;
-    color: #19469D;
-}
-p {
-    margin: 12px 0;
-}
-h1, h2, h3 {
-    margin: 0;
-    padding: 0;
-}
-table#source {
-    width: 100%;
-    border-collapse: collapse;
-}
-table#source td:first-child {
-    padding: 30px 40px 30px 40px;
-    vertical-align: top;
-}
-table#source td:first-child,
-table#source td:first-child pre {
-    width: 450px;
-}
-table#source td:last-child {
-    padding: 30px 0 30px 40px;
-    border-left: 1px solid #E5E5EE;
-    background: #F5F5FF;
-}
-table#source tr {
-    border-bottom: 1px solid #E5E5EE;
-}
-table#source tr.filename {
-    padding-top: 40px;
-    border-top: 1px solid #E5E5EE;
-}
-table#source tr.filename td:first-child {
-    text-transform: capitalize;
-}
-table#source tr.filename td:last-child {
-    font-size: 12px;
-}
-table#source tr.filename h2 {
-    margin: 0;
-    padding: 0;
-    cursor: pointer;
-}
-table#source tr.code h1,
-table#source tr.code h2,
-table#source tr.code h3 {
-    margin-top: 30px;
-    font-family: "Lucida Grande", "Helvetica Nueue", Arial, sans-serif;
-    font-size: 18px;
-}
-table#source tr.code h2 {
-    font-size: 16px;
-}
-table#source tr.code h3 {
-    font-size: 14px;
-}
-table#source tr.code ul {
-    margin: 15px 0 15px 35px;
-    padding: 0;
-}
-table#source tr.code ul li {
-    margin: 0;
-    padding: 1px 0;
-}
-table#source tr.code ul li p {
-    margin: 0;
-    padding: 0;
-}
-table#source tr.code td:first-child pre {
-    padding: 20px;
-}
-#ribbon {
-    position: fixed;
-    top: 0;
-    right: 0;
-}
-code .string { color: #219161; }
-code .regexp { color: #219161; }
-code .keyword { color: #954121; }
-code .number { color: #19469D; }
-code .comment { color: #bbb; }
-code .this { color: #19469D; }</style>
-		<script>
-			$(function(){
-				$('tr.code').hide();
-				$('tr.filename').toggle(function(){
-					$(this).nextUntil('.filename').fadeIn();
-				}, function(){
-					$(this).nextUntil('.filename').fadeOut();
-				});
-			});
-		</script>
-	</head>
-	<body>
-<table id="source"><tbody><tr><td><h1>FlashPolicyFileServer</h1></td><td></td></tr><tr class="filename"><td><h2 id="lib/server.js"><a href="#">server</a></h2></td><td>lib/server.js</td></tr><tr class="code">
-<td class="docs">
-<p>Module dependencies and cached references.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">slice</span> = <span class="class">Array</span>.<span class="variable">prototype</span>.<span class="variable">slice</span>
-  , <span class="variable">net</span> = <span class="variable">require</span>(<span class="string">'net'</span>);</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>The server that does the Policy File severing</p>
-
-<h2>Options</h2>
-
-<ul><li><code>log</code>  false or a function that can output log information, defaults to console.log?</li></ul>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Object</em>  options Options to customize the servers functionality.</p></li><li><p><strong>param</strong>: <em>Array</em>  origins The origins that are allowed on this server, defaults to <code>*:*</code>.</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="class">Server</span>(<span class="variable">options</span>, <span class="variable">origins</span>){
-  <span class="keyword">var</span> <span class="variable">me</span> = <span class="this">this</span>;
-  
-  <span class="this">this</span>.<span class="variable">origins</span> = <span class="variable">origins</span> || [<span class="string">'*:*'</span>];
-  <span class="this">this</span>.<span class="variable">port</span> = <span class="number integer">843</span>;
-  <span class="this">this</span>.<span class="variable">log</span> = <span class="variable">console</span>.<span class="variable">log</span>;
-  
-  <span class="comment">// merge `this` with the options</span>
-  <span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">options</span>).<span class="variable">forEach</span>(<span class="keyword">function</span>(<span class="variable">key</span>){
-    <span class="variable">me</span>[<span class="variable">key</span>] &<span class="variable">amp</span>;&<span class="variable">amp</span>; (<span class="variable">me</span>[<span class="variable">key</span>] = <span class="variable">options</span>[<span class="variable">key</span>])
-  });
-  
-  <span class="comment">// create the net server</span>
-  <span class="this">this</span>.<span class="variable">socket</span> = <span class="variable">net</span>.<span class="variable">createServer</span>(<span class="keyword">function</span> <span class="variable">createServer</span>(<span class="variable">socket</span>){
-    <span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'error'</span>, <span class="keyword">function</span> <span class="variable">socketError</span>(){ <span class="variable">me</span>.<span class="variable">responder</span>.<span class="variable">call</span>(<span class="variable">me</span>, <span class="variable">socket</span>) });
-    <span class="variable">me</span>.<span class="variable">responder</span>.<span class="variable">call</span>(<span class="variable">me</span>, <span class="variable">socket</span>);
-  });
-  
-  <span class="comment">// Listen for errors as the port might be blocked because we do not have root priv.</span>
-  <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'error'</span>, <span class="keyword">function</span> <span class="variable">serverError</span>(<span class="variable">err</span>){
-    <span class="comment">// Special and common case error handling</span>
-    <span class="keyword">if</span> (<span class="variable">err</span>.<span class="variable">errno</span> == <span class="number integer">13</span>){
-      <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(
-        <span class="string">'Unable to listen to port `'</span> + <span class="variable">me</span>.<span class="variable">port</span> + <span class="string">'` as your Node.js instance does not have root privileges. '</span> +
-        (
-          <span class="variable">me</span>.<span class="variable">server</span>
-          ? <span class="string">'The Flash Policy file will now be served inline over the supplied HTTP server, Flash Policy files request will suffer.'</span>
-          : <span class="string">'No fallback server supplied.'</span>
-        )
-      );
-      
-      <span class="variable">me</span>.<span class="variable">socket</span>.<span class="variable">removeAllListeners</span>();
-      <span class="keyword">delete</span> <span class="variable">me</span>.<span class="variable">socket</span>;
-
-      <span class="variable">me</span>.<span class="variable">emit</span>(<span class="string">'connect_failed'</span>, <span class="variable">err</span>);
-    } <span class="keyword">else</span> {
-      <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(<span class="string">'FlashPolicyFileServer received a error event:\n'</span> + (<span class="variable">err</span>.<span class="variable">message</span> ? <span class="variable">err</span>.<span class="variable">message</span> : <span class="variable">err</span>));
-    }
-  });
-  
-  <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'timeout'</span>, <span class="keyword">function</span> <span class="variable">serverTimeout</span>(){});
-  <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'close'</span>, <span class="keyword">function</span> <span class="variable">serverClosed</span>(<span class="variable">err</span>){
-    <span class="variable">err</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(<span class="string">'Server closing due to an error: \n'</span> + (<span class="variable">err</span>.<span class="variable">message</span> ? <span class="variable">err</span>.<span class="variable">message</span> : <span class="variable">err</span>));
-    
-    <span class="keyword">if</span> (<span class="variable">me</span>.<span class="variable">server</span>){
-      <span class="comment">// not online anymore</span>
-      <span class="keyword">delete</span> <span class="variable">me</span>.<span class="variable">server</span>.<span class="variable">online</span>;
-      
-      <span class="comment">// Remove the inline policy listener if we close down</span>
-      <span class="comment">// but only when the server was `online` (see listen prototype)</span>
-      <span class="keyword">if</span>( <span class="variable">me</span>.<span class="variable">server</span>[<span class="string">'@'</span>] &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">server</span>.<span class="variable">online</span>){
-        <span class="variable">me</span>.<span class="variable">server</span>.<span class="variable">removeListener</span>(<span class="string">'connection'</span>, <span class="variable">me</span>.<span class="variable">server</span>[<span class="string">'@'</span>]);
-      }
-    }
-    <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(<span class="string">'Shutting down FlashPolicyFileServer'</span>);
-  });
-  
-  <span class="comment">// Compile the initial `buffer`</span>
-  <span class="this">this</span>.<span class="variable">compile</span>();
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Start listening for requests</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Number</em>  port The port number it should be listening to.</p></li><li><p><strong>param</strong>: <em>Server</em>  server A HTTP server instance, this will be used to listen for inline requests</p></li><li><p><strong>param</strong>: <em>Function</em>  cb The callback needs to be called once server is ready</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">listen</span> = <span class="keyword">function</span> <span class="variable">listen</span>(<span class="variable">port</span>, <span class="variable">server</span>, <span class="variable">cb</span>){
-  <span class="keyword">var</span> <span class="variable">me</span> = <span class="this">this</span>
-    , <span class="variable">args</span> = <span class="variable">slice</span>.<span class="variable">call</span>(<span class="variable">arguments</span>, <span class="number integer">0</span>)
-    , <span class="variable">callback</span>;
-  
-  <span class="comment">// assign the correct vars, for flexible arguments</span>
-  <span class="variable">args</span>.<span class="variable">forEach</span>(<span class="keyword">function</span> <span class="variable">args</span>(<span class="variable">arg</span>){
-    <span class="keyword">var</span> <span class="variable">type</span> = <span class="keyword">typeof</span> <span class="variable">arg</span>;
-    
-    <span class="keyword">if</span> (<span class="variable">type</span> === <span class="string">'number'</span>) <span class="variable">me</span>.<span class="variable">port</span> = <span class="variable">arg</span>;
-    <span class="keyword">if</span> (<span class="variable">type</span> === <span class="string">'function'</span>) <span class="variable">callback</span> = <span class="variable">arg</span>;
-    <span class="keyword">if</span> (<span class="variable">type</span> === <span class="string">'object'</span>) <span class="variable">me</span>.<span class="variable">server</span> = <span class="variable">arg</span>;
-  });
-  
-  <span class="keyword">if</span> (<span class="this">this</span>.<span class="variable">server</span>){
-    
-    <span class="comment">// no one in their right mind would ever create a `@` prototype, so Im just gonna store</span>
-    <span class="comment">// my function on the server, so I can remove it later again once the server(s) closes</span>
-    <span class="this">this</span>.<span class="variable">server</span>[<span class="string">'@'</span>] = <span class="keyword">function</span> <span class="variable">connection</span>(<span class="variable">socket</span>){
-      <span class="variable">socket</span>.<span class="variable">once</span>(<span class="string">'data'</span>, <span class="keyword">function</span> <span class="variable">requestData</span>(<span class="variable">data</span>){
-        <span class="comment">// if it's a Flash policy request, and we can write to the </span>
-        <span class="keyword">if</span> (
-             <span class="variable">data</span>
-          &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">data</span>[<span class="number integer">0</span>] === <span class="number integer">60</span>
-          &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">data</span>.<span class="variable">toString</span>() === <span class="string">'&lt;policy-file-request/&gt;\0'</span>
-          &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">socket</span>
-          &<span class="variable">amp</span>;&<span class="variable">amp</span>; (<span class="variable">socket</span>.<span class="variable">readyState</span> === <span class="string">'open'</span> || <span class="variable">socket</span>.<span class="variable">readyState</span> === <span class="string">'writeOnly'</span>)
-        ){
-          <span class="comment">// send the buffer</span>
-          <span class="variable">socket</span>.<span class="variable">end</span>(<span class="variable">me</span>.<span class="variable">buffer</span>);
-        }
-      });
-    };
-    <span class="comment">// attach it</span>
-    <span class="this">this</span>.<span class="variable">server</span>.<span class="variable">on</span>(<span class="string">'connection'</span>, <span class="this">this</span>.<span class="variable">server</span>[<span class="string">'@'</span>]);
-  }
-  
-  <span class="comment">// We add a callback method, so we can set a flag for when the server is `enabled` or `online`.</span>
-  <span class="comment">// this flag is needed because if a error occurs and the we cannot boot up the server the</span>
-  <span class="comment">// fallback functionality should not be removed during the `close` event</span>
-  <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">listen</span>(<span class="this">this</span>.<span class="variable">port</span>, <span class="keyword">function</span> <span class="variable">serverListening</span>(){
-   <span class="variable">me</span>.<span class="variable">socket</span>.<span class="variable">online</span> = <span class="variable">true</span>;
-   
-   <span class="keyword">if</span> (<span class="variable">callback</span>) <span class="variable">callback</span>(), <span class="variable">callback</span> = <span class="variable">undefined</span>;
-   
-  });
-  
-  <span class="keyword">return</span> <span class="this">this</span>;
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Adds a new origin to the Flash Policy File.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Arguments</em>  The origins that need to be added.</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">add</span> = <span class="keyword">function</span> <span class="variable">add</span>(){
-  <span class="keyword">var</span> <span class="variable">args</span> = <span class="variable">slice</span>.<span class="variable">call</span>(<span class="variable">arguments</span>, <span class="number integer">0</span>)
-    , <span class="variable">i</span> = <span class="variable">args</span>.<span class="variable">length</span>;
-  
-  <span class="comment">// flag duplicates</span>
-  <span class="keyword">while</span> (<span class="variable">i</span>--){
-    <span class="keyword">if</span> (<span class="this">this</span>.<span class="variable">origins</span>.<span class="variable">indexOf</span>(<span class="variable">args</span>[<span class="variable">i</span>]) &<span class="variable">gt</span>;= <span class="number integer">0</span>){
-      <span class="variable">args</span>[<span class="variable">i</span>] = <span class="keyword">null</span>;
-    }
-  }
-  
-  <span class="comment">// Add all the arguments to the array</span>
-  <span class="comment">// but first we want to remove all `falsy` values from the args</span>
-  <span class="class">Array</span>.<span class="variable">prototype</span>.<span class="variable">push</span>.<span class="variable">apply</span>(
-    <span class="this">this</span>.<span class="variable">origins</span>
-  , <span class="variable">args</span>.<span class="variable">filter</span>(<span class="keyword">function</span>(<span class="variable">value</span>){ <span class="keyword">return</span> !!<span class="variable">value</span> })
-  );
-  
-  <span class="this">this</span>.<span class="variable">compile</span>();
-  <span class="keyword">return</span> <span class="this">this</span>;
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Removes a origin from the Flash Policy File.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  origin The origin that needs to be removed from the server</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">remove</span> = <span class="keyword">function</span> <span class="variable">remove</span>(<span class="variable">origin</span>){
-  <span class="keyword">var</span> <span class="variable">position</span> = <span class="this">this</span>.<span class="variable">origins</span>.<span class="variable">indexOf</span>(<span class="variable">origin</span>);
-  
-  <span class="comment">// only remove and recompile if we have a match</span>
-  <span class="keyword">if</span> (<span class="variable">position</span> &<span class="variable">gt</span>; <span class="number integer">0</span>){
-    <span class="this">this</span>.<span class="variable">origins</span>.<span class="variable">splice</span>(<span class="variable">position</span>,<span class="number integer">1</span>);
-    <span class="this">this</span>.<span class="variable">compile</span>();
-  }
-  
-  <span class="keyword">return</span> <span class="this">this</span>;
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Closes and cleans up the server</p>
-
-<ul><li><p><strong>api</strong>: <em>public</em></p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">close</span> = <span class="keyword">function</span> <span class="variable">close</span>(){
-  <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">removeAllListeners</span>();
-  <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">close</span>();
-  
-  <span class="keyword">return</span> <span class="this">this</span>;
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Proxy the event listener requests to the created Net server
- </p>
-</td>
-<td class="code">
-<pre><code><span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">process</span>.<span class="class">EventEmitter</span>.<span class="variable">prototype</span>).<span class="variable">forEach</span>(<span class="keyword">function</span> <span class="variable">proxy</span>(<span class="variable">key</span>){
-  <span class="class">Server</span>.<span class="variable">prototype</span>[<span class="variable">key</span>] = <span class="class">Server</span>.<span class="variable">prototype</span>[<span class="variable">key</span>] || <span class="keyword">function</span> (){
-    <span class="keyword">if</span> (<span class="this">this</span>.<span class="variable">socket</span>) <span class="this">this</span>.<span class="variable">socket</span>[<span class="variable">key</span>].<span class="variable">apply</span>(<span class="this">this</span>.<span class="variable">socket</span>, <span class="variable">arguments</span>);
-    <span class="keyword">return</span> <span class="this">this</span>;
-  };
-});</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Creates a new server instance.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Object</em>  options A options object to override the default config</p></li><li><p><strong>param</strong>: <em>Array</em>  origins The origins that should be allowed by the server</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">exports</span>.<span class="variable">createServer</span> = <span class="keyword">function</span> <span class="variable">createServer</span>(<span class="variable">options</span>, <span class="variable">origins</span>){
-  <span class="variable">origins</span> = <span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">origins</span>) ? <span class="variable">origins</span> : (<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">options</span>) ? <span class="variable">options</span> : <span class="variable">false</span>);
-  <span class="variable">options</span> = !<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">options</span>) &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">options</span> ? <span class="variable">options</span> : {};
-  
-  <span class="keyword">return</span> <span class="keyword">new</span> <span class="class">Server</span>(<span class="variable">options</span>, <span class="variable">origins</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Provide a hook to the original server, so it can be extended if needed.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="variable">exports</span>.<span class="class">Server</span> = <span class="class">Server</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Module version
- </p>
-</td>
-<td class="code">
-<pre><code><span class="variable">exports</span>.<span class="variable">version</span> = <span class="string">'0.0.2'</span>;
-</code></pre>
-</td>
-</tr>	</body>
-</html></tbody></table>

+ 0 - 8
app/node_modules/socket.io/node_modules/policyfile/examples/basic.fallback.js

@@ -1,8 +0,0 @@
-var http = require('http')
-  , fspfs = require('../');
-
-var server = http.createServer(function(q,r){ r.writeHead(200); r.end(':3') }) 
-  , flash = fspfs.createServer();
-
-server.listen(8080);
-flash.listen(8081,server);

+ 0 - 5
app/node_modules/socket.io/node_modules/policyfile/examples/basic.js

@@ -1,5 +0,0 @@
-var http = require('http')
-  , fspfs = require('../');
-
-var flash = fspfs.createServer();
-flash.listen();

+ 0 - 1
app/node_modules/socket.io/node_modules/policyfile/index.js

@@ -1 +0,0 @@
-module.exports = require('./lib/server.js');

+ 0 - 289
app/node_modules/socket.io/node_modules/policyfile/lib/server.js

@@ -1,289 +0,0 @@
-/**
- * Module dependencies and cached references.
- */
-
-var slice = Array.prototype.slice
-  , net = require('net');
-
-/**
- * The server that does the Policy File severing
- *
- * Options:
- *   - `log`  false or a function that can output log information, defaults to console.log?
- *
- * @param {Object} options Options to customize the servers functionality.
- * @param {Array} origins The origins that are allowed on this server, defaults to `*:*`.
- * @api public
- */
-
-function Server (options, origins) {
-  var me = this;
-
-  this.origins = origins || ['*:*'];
-  this.port = 843;
-  this.log = console.log;
-
-  // merge `this` with the options
-  Object.keys(options).forEach(function (key) {
-    me[key] && (me[key] = options[key])
-  });
-
-  // create the net server
-  this.socket = net.createServer(function createServer (socket) {
-    socket.on('error', function socketError () { 
-      me.responder.call(me, socket);
-    });
-
-    me.responder.call(me, socket);
-  });
-
-  // Listen for errors as the port might be blocked because we do not have root priv.
-  this.socket.on('error', function serverError (err) {
-    // Special and common case error handling
-    if (err.errno == 13) {
-      me.log && me.log(
-        'Unable to listen to port `' + me.port + '` as your Node.js instance does not have root privileges. ' +
-        (
-          me.server
-          ? 'The Flash Policy File requests will only be served inline over the supplied HTTP server. Inline serving is slower than a dedicated server instance.'
-          : 'No fallback server supplied, we will be unable to answer Flash Policy File requests.'
-        )
-      );
-
-      me.emit('connect_failed', err);
-      me.socket.removeAllListeners();
-      delete me.socket;
-    } else {
-      me.log && me.log('FlashPolicyFileServer received an error event:\n' + (err.message ? err.message : err));
-    }
-  });
-
-  this.socket.on('timeout', function serverTimeout () {});
-  this.socket.on('close', function serverClosed (err) {
-    err && me.log && me.log('Server closing due to an error: \n' + (err.message ? err.message : err));
-
-    if (me.server) {
-      // Remove the inline policy listener if we close down
-      // but only when the server was `online` (see listen prototype)
-      if (me.server['@'] && me.server.online) {
-        me.server.removeListener('connection', me.server['@']);
-      }
-
-      // not online anymore
-      delete me.server.online;
-    }
-  });
-
-  // Compile the initial `buffer`
-  this.compile();
-}
-
-/**
- * Start listening for requests
- *
- * @param {Number} port The port number it should be listening to.
- * @param {Server} server A HTTP server instance, this will be used to listen for inline requests
- * @param {Function} cb The callback needs to be called once server is ready
- * @api public
- */
-
-Server.prototype.listen = function listen (port, server, cb){
-  var me = this
-    , args = slice.call(arguments, 0)
-    , callback;
- 
-  // assign the correct vars, for flexible arguments
-  args.forEach(function args (arg){
-    var type = typeof arg;
-
-    if (type === 'number') me.port = arg;
-    if (type === 'function') callback = arg;
-    if (type === 'object') me.server = arg;
-  });
-
-  if (this.server) {
-
-    // no one in their right mind would ever create a `@` prototype, so Im just gonna store
-    // my function on the server, so I can remove it later again once the server(s) closes
-    this.server['@'] = function connection (socket) {
-      socket.once('data', function requestData (data) {
-        // if it's a Flash policy request, and we can write to the 
-        if (
-             data
-          && data[0] === 60
-          && data.toString() === '<policy-file-request/>\0'
-          && socket
-          && (socket.readyState === 'open' || socket.readyState === 'writeOnly')
-        ){
-          // send the buffer
-          try {
-            socket.end(me.buffer);
-          } catch (e) {}
-        }
-      });
-    };
-
-    // attach it
-    this.server.on('connection', this.server['@']);
-  }
-
-  // We add a callback method, so we can set a flag for when the server is `enabled` or `online`.
-  // this flag is needed because if a error occurs and the we cannot boot up the server the
-  // fallback functionality should not be removed during the `close` event
-  this.port >= 0 && this.socket.listen(this.port, function serverListening () {
-    me.socket.online = true;
-    if (callback) {
-      callback.call(me);
-      callback = undefined;
-    }
-  });
-
-  return this;
-};
-
-/**
- * Responds to socket connects and writes the compile policy file.
- *
- * @param {net.Socket} socket The socket that needs to receive the message
- * @api private
- */
-
-Server.prototype.responder = function responder (socket){
-  if (socket && socket.readyState == 'open' && socket.end) {
-    try {
-      socket.end(this.buffer);
-    } catch (e) {}
-  }
-};
-
-/**
- * Compiles the supplied origins to a Flash Policy File format and stores it in a Node.js Buffer
- * this way it can be send over the wire without any performance loss.
- *
- * @api private
- */
-
-Server.prototype.compile = function compile (){
-  var xml = [
-        '<?xml version="1.0"?>'
-      , '<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">'
-      , '<cross-domain-policy>'
-    ];
-
-  // add the allow access element
-  this.origins.forEach(function origin (origin){
-    var parts = origin.split(':');
-    xml.push('<allow-access-from domain="' + parts[0] + '" to-ports="'+ parts[1] +'"/>');
-  });
-
-  xml.push('</cross-domain-policy>');
-
-  // store the result in a buffer so we don't have to re-generate it all the time
-  this.buffer = new Buffer(xml.join(''), 'utf8');
-
-  return this;
-};
-
-/**
- * Adds a new origin to the Flash Policy File.
- *
- * @param {Arguments} The origins that need to be added.
- * @api public
- */
-
-Server.prototype.add = function add(){
-  var args = slice.call(arguments, 0)
-    , i = args.length;
-
-  // flag duplicates
-  while (i--) {
-    if (this.origins.indexOf(args[i]) >= 0){
-      args[i] = null;
-    }
-  }
-
-  // Add all the arguments to the array
-  // but first we want to remove all `falsy` values from the args
-  Array.prototype.push.apply(
-    this.origins
-  , args.filter(function filter (value) {
-      return !!value;
-    })
-  );
-
-  this.compile();
-  return this;
-};
-
-/**
- * Removes a origin from the Flash Policy File.
- *
- * @param {String} origin The origin that needs to be removed from the server
- * @api public
- */
-
-Server.prototype.remove = function remove (origin){
-  var position = this.origins.indexOf(origin);
-
-  // only remove and recompile if we have a match
-  if (position > 0) {
-    this.origins.splice(position,1);
-    this.compile();
-  }
-
-  return this;
-};
-
-/**
- * Closes and cleans up the server
- *
- * @api public
- */
-
-Server.prototype.close = function close () {
-  this.socket.removeAllListeners();
-  this.socket.close();
-
-  return this;
-};
-
-/**
- * Proxy the event listener requests to the created Net server
- */
-
-Object.keys(process.EventEmitter.prototype).forEach(function proxy (key){
-  Server.prototype[key] = Server.prototype[key] || function () {
-    if (this.socket) {
-      this.socket[key].apply(this.socket, arguments);
-    }
-
-    return this;
-  };
-});
-
-/**
- * Creates a new server instance.
- *
- * @param {Object} options A options object to override the default config
- * @param {Array} origins The origins that should be allowed by the server
- * @api public
- */
-
-exports.createServer = function createServer(options, origins){
-  origins = Array.isArray(origins) ? origins : (Array.isArray(options) ? options : false);
-  options = !Array.isArray(options) && options ? options : {};
-
-  return new Server(options, origins);
-};
-
-/**
- * Provide a hook to the original server, so it can be extended if needed.
- */
-
-exports.Server = Server;
-
-/**
- * Module version
- */
-
-exports.version = '0.0.4';

File diff suppressed because it is too large
+ 0 - 39
app/node_modules/socket.io/node_modules/policyfile/package.json


+ 0 - 21
app/node_modules/socket.io/node_modules/policyfile/tests/ssl/ssl.crt

@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDXTCCAkWgAwIBAgIJAMUSOvlaeyQHMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
-aWRnaXRzIFB0eSBMdGQwHhcNMTAxMTE2MDkzMjQ5WhcNMTMxMTE1MDkzMjQ5WjBF
-MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
-ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAz+LXZOjcQCJq3+ZKUFabj71oo/ex/XsBcFqtBThjjTw9CVEVwfPQQp4X
-wtPiB204vnYXwQ1/R2NdTQqCZu47l79LssL/u2a5Y9+0NEU3nQA5qdt+1FAE0c5o
-exPimXOrR3GWfKz7PmZ2O0117IeCUUXPG5U8umhDe/4mDF4ZNJiKc404WthquTqg
-S7rLQZHhZ6D0EnGnOkzlmxJMYPNHSOY1/6ivdNUUcC87awNEA3lgfhy25IyBK3QJ
-c+aYKNTbt70Lery3bu2wWLFGtmNiGlQTS4JsxImRsECTI727ObS7/FWAQsqW+COL
-0Sa5BuMFrFIpjPrEe0ih7vRRbdmXRwIDAQABo1AwTjAdBgNVHQ4EFgQUDnV4d6mD
-tOnluLoCjkUHTX/n4agwHwYDVR0jBBgwFoAUDnV4d6mDtOnluLoCjkUHTX/n4agw
-DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAFwV4MQfTo+qMv9JMiyno
-IEiqfOz4RgtmBqRnXUffcjS2dhc7/z+FPZnM79Kej8eLHoVfxCyWRHFlzm93vEdv
-wxOCrD13EDOi08OOZfxWyIlCa6Bg8cMAKqQzd2OvQOWqlRWBTThBJIhWflU33izX
-Qn5GdmYqhfpc+9ZHHGhvXNydtRQkdxVK2dZNzLBvBlLlRmtoClU7xm3A+/5dddeP
-AQHEPtyFlUw49VYtZ3ru6KqPms7MKvcRhYLsy9rwSfuuniMlx4d0bDR7TOkw0QQS
-A0N8MGQRQpzl4mw4jLzyM5d5QtuGBh2P6hPGa0YQxtI3RPT/p6ENzzBiAKXiSfzo
-xw==
------END CERTIFICATE-----

+ 0 - 27
app/node_modules/socket.io/node_modules/policyfile/tests/ssl/ssl.private.key

@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAz+LXZOjcQCJq3+ZKUFabj71oo/ex/XsBcFqtBThjjTw9CVEV
-wfPQQp4XwtPiB204vnYXwQ1/R2NdTQqCZu47l79LssL/u2a5Y9+0NEU3nQA5qdt+
-1FAE0c5oexPimXOrR3GWfKz7PmZ2O0117IeCUUXPG5U8umhDe/4mDF4ZNJiKc404
-WthquTqgS7rLQZHhZ6D0EnGnOkzlmxJMYPNHSOY1/6ivdNUUcC87awNEA3lgfhy2
-5IyBK3QJc+aYKNTbt70Lery3bu2wWLFGtmNiGlQTS4JsxImRsECTI727ObS7/FWA
-QsqW+COL0Sa5BuMFrFIpjPrEe0ih7vRRbdmXRwIDAQABAoIBAGe4+9VqZfJN+dsq
-8Osyuz01uQ8OmC0sAWTIqUlQgENIyf9rCJsUBlYmwR5BT6Z69XP6QhHdpSK+TiAR
-XUz0EqG9HYzcxHIBaACP7j6iRoQ8R4kbbiWKo0z3WqQGIOqFjvD/mKEuQdE5mEYw
-eOUCG6BnX1WY2Yr8WKd2AA/tp0/Y4d8z04u9eodMpSTbHTzYMJb5SbBN1vo6FY7q
-8zSuO0BMzXlAxUsCwHsk1GQHFr8Oh3zIR7bQGtMBouI+6Lhh7sjFYsfxJboqMTBV
-IKaA216M6ggHG7MU1/jeKcMGDmEfqQLQoyWp29rMK6TklUgipME2L3UD7vTyAVzz
-xbVOpZkCgYEA8CXW4sZBBrSSrLR5SB+Ubu9qNTggLowOsC/kVKB2WJ4+xooc5HQo
-mFhq1v/WxPQoWIxdYsfg2odlL+JclK5Qcy6vXmRSdAQ5lK9gBDKxZSYc3NwAw2HA
-zyHCTK+I0n8PBYQ+yGcrxu0WqTGnlLW+Otk4CejO34WlgHwbH9bbY5UCgYEA3ZvT
-C4+OoMHXlmICSt29zUrYiL33IWsR3/MaONxTEDuvgkOSXXQOl/8Ebd6Nu+3WbsSN
-bjiPC/JyL1YCVmijdvFpl4gjtgvfJifs4G+QHvO6YfsYoVANk4u6g6rUuBIOwNK4
-RwYxwDc0oysp+g7tPxoSgDHReEVKJNzGBe9NGGsCgYEA4O4QP4gCEA3B9BF2J5+s
-n9uPVxmiyvZUK6Iv8zP4pThTBBMIzNIf09G9AHPQ7djikU2nioY8jXKTzC3xGTHM
-GJZ5m6fLsu7iH+nDvSreDSeNkTBfZqGAvoGYQ8uGE+L+ZuRfCcXYsxIOT5s6o4c3
-Dle2rVFpsuKzCY00urW796ECgYBn3go75+xEwrYGQSer6WR1nTgCV29GVYXKPooy
-zmmMOT1Yw80NSkEw0pFD4cTyqVYREsTrPU0mn1sPfrOXxnGfZSVFpcR/Je9QVfQ7
-eW7GYxwfom335aqHVj10SxRqteP+UoWWnHujCPz94VRKZMakBddYCIGSan+G6YdS
-7sdmwwKBgBc2qj0wvGXDF2kCLwSGfWoMf8CS1+5fIiUIdT1e/+7MfDdbmLMIFVjF
-QKS3zVViXCbrG5SY6wS9hxoc57f6E2A8vcaX6zy2xkZlGHQCpWRtEM5R01OWJQaH
-HsHMmQZGUQVoDm1oRkDhrTFK4K3ukc3rAxzeTZ96utOQN8/KJsTv
------END RSA PRIVATE KEY-----

+ 0 - 231
app/node_modules/socket.io/node_modules/policyfile/tests/unit.test.js

@@ -1,231 +0,0 @@
-var fspfs = require('../')
-  , fs = require('fs')
-  , http = require('http')
-  , https = require('https')
-  , net = require('net')
-  , should = require('should')
-  , assert = require('assert');
-
-module.exports = {
-  // Library version should be Semver compatible
-  'Library version': function(){
-     fspfs.version.should.match(/^\d+\.\d+\.\d+$/);
-  }
-
-  // Creating a server instace should not cause any problems
-  // either using the new Server or createServer method.
-, 'Create Server instance': function(){
-    var server = fspfs.createServer()
-      , server2 = new fspfs.Server({log:false}, ['blog.3rd-Eden.com:1337']);
-    
-    // server 2 options test
-    server2.log.should.be.false;
-    server2.origins.length.should.equal(1);
-    server2.origins[0].should.equal('blog.3rd-Eden.com:1337');
-    
-    // server defaults
-    (typeof server.log).should.be.equal('function');
-    server.origins.length.should.equal(1);
-    server.origins[0].should.equal('*:*');
-    
-    // instance checking, sanity check
-    assert.ok(server instanceof fspfs.Server);
-    assert.ok(!!server.buffer);
-    
-    // more options testing
-    server = fspfs.createServer(['blog.3rd-Eden.com:80']);
-    server.origins.length.should.equal(1);
-    server.origins[0].should.equal('blog.3rd-Eden.com:80');
-    
-    server = fspfs.createServer({log:false},['blog.3rd-Eden.com:80']);
-    server.log.should.be.false;
-    server.origins.length.should.equal(1);
-    server.origins[0].should.equal('blog.3rd-Eden.com:80');
-    
-  }
-
-, 'Add origin': function(){
-    var server = fspfs.createServer();
-    server.add('google.com:80', 'blog.3rd-Eden.com:1337');
-    
-    server.origins.length.should.equal(3);
-    server.origins.indexOf('google.com:80').should.be.above(0);
-    
-    // don't allow duplicates
-    server.add('google.com:80', 'google.com:80');
-    
-    var i = server.origins.length
-      , count = 0;
-    
-    while(i--){
-      if (server.origins[i] === 'google.com:80'){
-        count++;
-      }
-    }
-    
-    count.should.equal(1);
-  }
-
-, 'Remove origin': function(){
-    var server = fspfs.createServer();
-    server.add('google.com:80', 'blog.3rd-Eden.com:1337');
-    server.origins.length.should.equal(3);
-    
-    server.remove('google.com:80');
-    server.origins.length.should.equal(2);
-    server.origins.indexOf('google.com:80').should.equal(-1);
-  }
-
-, 'Buffer': function(){
-    var server = fspfs.createServer();
-    
-    Buffer.isBuffer(server.buffer).should.be.true;
-    server.buffer.toString().indexOf('to-ports="*"').should.be.above(0);
-    server.buffer.toString().indexOf('domain="*"').should.be.above(0);
-    server.buffer.toString().indexOf('domain="google.com"').should.equal(-1);
-    
-    // The buffers should be rebuild when new origins are added
-    server.add('google.com:80');
-    server.buffer.toString().indexOf('to-ports="80"').should.be.above(0);
-    server.buffer.toString().indexOf('domain="google.com"').should.be.above(0);
-    
-    server.remove('google.com:80');
-    server.buffer.toString().indexOf('to-ports="80"').should.equal(-1);
-    server.buffer.toString().indexOf('domain="google.com"').should.equal(-1);
-  }
-
-, 'Responder': function(){
-    var server = fspfs.createServer()
-      , calls = 0
-      // dummy socket to emulate a `real` socket
-      , dummySocket = {
-          readyState: 'open'
-        , end: function(buffer){
-          calls++;
-          Buffer.isBuffer(buffer).should.be.true;
-          buffer.toString().should.equal(server.buffer.toString());
-        }
-      };
-    
-    server.responder(dummySocket);
-    calls.should.equal(1);
-  }
-
-, 'Event proxy': function(){
-    var server = fspfs.createServer()
-      , calls = 0;
-    
-    Object.keys(process.EventEmitter.prototype).forEach(function proxy(key){
-      assert.ok(!!server[key] && typeof server[key] === 'function');
-    });
-    
-    // test if it works by calling a none default event
-    server.on('pew', function(){
-      calls++;
-    });
-    
-    server.emit('pew');
-    calls.should.equal(1);
-  }
-
-, 'inline response http': function(){
-    var port = 1335
-      , httpserver = http.createServer(function(q,r){r.writeHead(200);r.end(':3')})
-      , server = fspfs.createServer();
-    
-    httpserver.listen(port, function(){
-      server.listen(port + 1, httpserver, function(){
-        var client = net.createConnection(port);
-        client.write('<policy-file-request/>\0');
-        client.on('error', function(err){
-          assert.ok(!err, err)
-        });
-        client.on('data', function(data){
-        
-          var response = data.toString();
-          console.log(response);
-          
-          response.indexOf('to-ports="*"').should.be.above(0);
-          response.indexOf('domain="*"').should.be.above(0);
-          response.indexOf('domain="google.com"').should.equal(-1);
-          
-          // clean up
-          client.destroy();
-          server.close();
-          httpserver.close();
-        });
-      });
-    });
-  }
-
-, 'server response': function(){
-    var port = 1340
-      , server = fspfs.createServer();
-      
-    server.listen(port, function(){
-      var client = net.createConnection(port);
-      client.write('<policy-file-request/>\0');
-      client.on('error', function(err){
-        assert.ok(!err, err)
-      });
-      client.on('data', function(data){
-      
-        var response = data.toString();
-        
-        response.indexOf('to-ports="*"').should.be.above(0);
-        response.indexOf('domain="*"').should.be.above(0);
-        response.indexOf('domain="google.com"').should.equal(-1);
-        
-        // clean up
-        client.destroy();
-        server.close();
-      });
-    });
-  }
-
-, 'inline response https': function(){
-    var port = 1345
-      , ssl = {
-          key: fs.readFileSync(__dirname + '/ssl/ssl.private.key').toString()
-        , cert: fs.readFileSync(__dirname + '/ssl/ssl.crt').toString()
-        }
-      , httpserver = https.createServer(ssl, function(q,r){r.writeHead(200);r.end(':3')})
-      , server = fspfs.createServer();
-    
-    httpserver.listen(port, function(){
-      server.listen(port + 1, httpserver, function(){
-        var client = net.createConnection(port);
-        client.write('<policy-file-request/>\0');
-        client.on('error', function(err){
-          assert.ok(!err, err)
-        });
-        client.on('data', function(data){
-        
-          var response = data.toString();
-          
-          response.indexOf('to-ports="*"').should.be.above(0);
-          response.indexOf('domain="*"').should.be.above(0);
-          response.indexOf('domain="google.com"').should.equal(-1);
-          
-          // clean up
-          client.destroy();
-          server.close();
-          httpserver.close();
-        });
-      });
-    });
-  }
-
-, 'connect_failed': function(){
-    var server = fspfs.createServer();
-    
-    server.on('connect_failed', function(){
-      assert.ok(true);
-    });
-    
-    server.listen(function(){
-      assert.ok(false, 'Run this test without root access');
-      server.close();
-    });
-  }
-};

+ 0 - 1
app/node_modules/socket.io/node_modules/redis/.npmignore

@@ -1 +0,0 @@
-node_modules

+ 0 - 691
app/node_modules/socket.io/node_modules/redis/README.md

@@ -1,691 +0,0 @@
-redis - a node.js redis client
-===========================
-
-This is a complete Redis client for node.js.  It supports all Redis commands, including many recently added commands like EVAL from
-experimental Redis server branches.
-
-
-Install with:
-
-    npm install redis
-
-Pieter Noordhuis has provided a binding to the official `hiredis` C library, which is non-blocking and fast.  To use `hiredis`, do:
-
-    npm install hiredis redis
-
-If `hiredis` is installed, `node_redis` will use it by default.  Otherwise, a pure JavaScript parser will be used.
-
-If you use `hiredis`, be sure to rebuild it whenever you upgrade your version of node.  There are mysterious failures that can
-happen between node and native code modules after a node upgrade.
-
-
-## Usage
-
-Simple example, included as `examples/simple.js`:
-
-```js
-    var redis = require("redis"),
-        client = redis.createClient();
-
-    // if you'd like to select database 3, instead of 0 (default), call
-    // client.select(3, function() { /* ... */ });
-
-    client.on("error", function (err) {
-        console.log("Error " + err);
-    });
-
-    client.set("string key", "string val", redis.print);
-    client.hset("hash key", "hashtest 1", "some value", redis.print);
-    client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
-    client.hkeys("hash key", function (err, replies) {
-        console.log(replies.length + " replies:");
-        replies.forEach(function (reply, i) {
-            console.log("    " + i + ": " + reply);
-        });
-        client.quit();
-    });
-```
-
-This will display:
-
-    mjr:~/work/node_redis (master)$ node example.js
-    Reply: OK
-    Reply: 0
-    Reply: 0
-    2 replies:
-        0: hashtest 1
-        1: hashtest 2
-    mjr:~/work/node_redis (master)$
-
-
-## Performance
-
-Here are typical results of `multi_bench.js` which is similar to `redis-benchmark` from the Redis distribution.
-It uses 50 concurrent connections with no pipelining.
-
-JavaScript parser:
-
-    PING: 20000 ops 42283.30 ops/sec 0/5/1.182
-    SET: 20000 ops 32948.93 ops/sec 1/7/1.515
-    GET: 20000 ops 28694.40 ops/sec 0/9/1.740
-    INCR: 20000 ops 39370.08 ops/sec 0/8/1.269
-    LPUSH: 20000 ops 36429.87 ops/sec 0/8/1.370
-    LRANGE (10 elements): 20000 ops 9891.20 ops/sec 1/9/5.048
-    LRANGE (100 elements): 20000 ops 1384.56 ops/sec 10/91/36.072
-
-hiredis parser:
-
-    PING: 20000 ops 46189.38 ops/sec 1/4/1.082
-    SET: 20000 ops 41237.11 ops/sec 0/6/1.210
-    GET: 20000 ops 39682.54 ops/sec 1/7/1.257
-    INCR: 20000 ops 40080.16 ops/sec 0/8/1.242
-    LPUSH: 20000 ops 41152.26 ops/sec 0/3/1.212
-    LRANGE (10 elements): 20000 ops 36563.07 ops/sec 1/8/1.363
-    LRANGE (100 elements): 20000 ops 21834.06 ops/sec 0/9/2.287
-
-The performance of `node_redis` improves dramatically with pipelining, which happens automatically in most normal programs.
-
-
-### Sending Commands
-
-Each Redis command is exposed as a function on the `client` object.
-All functions take either an `args` Array plus optional `callback` Function or
-a variable number of individual arguments followed by an optional callback.
-Here is an example of passing an array of arguments and a callback:
-
-    client.mset(["test keys 1", "test val 1", "test keys 2", "test val 2"], function (err, res) {});
-
-Here is that same call in the second style:
-
-    client.mset("test keys 1", "test val 1", "test keys 2", "test val 2", function (err, res) {});
-
-Note that in either form the `callback` is optional:
-
-    client.set("some key", "some val");
-    client.set(["some other key", "some val"]);
-
-If the key is missing, reply will be null (probably):
-
-    client.get("missingkey", function(err, reply) {
-        // reply is null when the key is missing
-        console.log(reply);
-    });
-
-For a list of Redis commands, see [Redis Command Reference](http://redis.io/commands)
-
-The commands can be specified in uppercase or lowercase for convenience.  `client.get()` is the same as `client.GET()`.
-
-Minimal parsing is done on the replies.  Commands that return a single line reply return JavaScript Strings,
-integer replies return JavaScript Numbers, "bulk" replies return node Buffers, and "multi bulk" replies return a
-JavaScript Array of node Buffers.  `HGETALL` returns an Object with Buffers keyed by the hash keys.
-
-# API
-
-## Connection Events
-
-`client` will emit some events about the state of the connection to the Redis server.
-
-### "ready"
-
-`client` will emit `ready` a connection is established to the Redis server and the server reports
-that it is ready to receive commands.  Commands issued before the `ready` event are queued,
-then replayed just before this event is emitted.
-
-### "connect"
-
-`client` will emit `connect` at the same time as it emits `ready` unless `client.options.no_ready_check`
-is set.  If this options is set, `connect` will be emitted when the stream is connected, and then
-you are free to try to send commands.
-
-### "error"
-
-`client` will emit `error` when encountering an error connecting to the Redis server.
-
-Note that "error" is a special event type in node.  If there are no listeners for an
-"error" event, node will exit.  This is usually what you want, but it can lead to some
-cryptic error messages like this:
-
-    mjr:~/work/node_redis (master)$ node example.js
-
-    node.js:50
-        throw e;
-        ^
-    Error: ECONNREFUSED, Connection refused
-        at IOWatcher.callback (net:870:22)
-        at node.js:607:9
-
-Not very useful in diagnosing the problem, but if your program isn't ready to handle this,
-it is probably the right thing to just exit.
-
-`client` will also emit `error` if an exception is thrown inside of `node_redis` for whatever reason.
-It would be nice to distinguish these two cases.
-
-### "end"
-
-`client` will emit `end` when an established Redis server connection has closed.
-
-### "drain"
-
-`client` will emit `drain` when the TCP connection to the Redis server has been buffering, but is now
-writable.  This event can be used to stream commands in to Redis and adapt to backpressure.  Right now,
-you need to check `client.command_queue.length` to decide when to reduce your send rate.  Then you can
-resume sending when you get `drain`.
-
-### "idle"
-
-`client` will emit `idle` when there are no outstanding commands that are awaiting a response.
-
-## redis.createClient(port, host, options)
-
-Create a new client connection.  `port` defaults to `6379` and `host` defaults
-to `127.0.0.1`.  If you have `redis-server` running on the same computer as node, then the defaults for
-port and host are probably fine.  `options` in an object with the following possible properties:
-
-* `parser`: which Redis protocol reply parser to use.  Defaults to `hiredis` if that module is installed.
-This may also be set to `javascript`.
-* `return_buffers`: defaults to `false`.  If set to `true`, then all replies will be sent to callbacks as node Buffer
-objects instead of JavaScript Strings.
-* `detect_buffers`: default to `false`. If set to `true`, then replies will be sent to callbacks as node Buffer objects
-if any of the input arguments to the original command were Buffer objects.
-This option lets you switch between Buffers and Strings on a per-command basis, whereas `return_buffers` applies to
-every command on a client.
-* `socket_nodelay`: defaults to `true`. Whether to call setNoDelay() on the TCP stream, which disables the
-Nagle algorithm on the underlying socket.  Setting this option to `false` can result in additional throughput at the
-cost of more latency.  Most applications will want this set to `true`.
-* `no_ready_check`: defaults to `false`. When a connection is established to the Redis server, the server might still
-be loading the database from disk.  While loading, the server not respond to any commands.  To work around this,
-`node_redis` has a "ready check" which sends the `INFO` command to the server.  The response from the `INFO` command
-indicates whether the server is ready for more commands.  When ready, `node_redis` emits a `ready` event.
-Setting `no_ready_check` to `true` will inhibit this check.
-* `enable_offline_queue`: defaults to `true`. By default, if there is no active
-connection to the redis server, commands are added to a queue and are executed
-once the connection has been established. Setting `enable_offline_queue` to
-`false` will disable this feature and the callback will be execute immediately
-with an error, or an error will be thrown if no callback is specified.
-
-```js
-    var redis = require("redis"),
-        client = redis.createClient(null, null, {detect_buffers: true});
-
-    client.set("foo_rand000000000000", "OK");
-
-    // This will return a JavaScript String
-    client.get("foo_rand000000000000", function (err, reply) {
-        console.log(reply.toString()); // Will print `OK`
-    });
-
-    // This will return a Buffer since original key is specified as a Buffer
-    client.get(new Buffer("foo_rand000000000000"), function (err, reply) {
-        console.log(reply.toString()); // Will print `<Buffer 4f 4b>`
-    });
-    client.end();
-```
-
-`createClient()` returns a `RedisClient` object that is named `client` in all of the examples here.
-
-## client.auth(password, callback)
-
-When connecting to Redis servers that require authentication, the `AUTH` command must be sent as the
-first command after connecting.  This can be tricky to coordinate with reconnections, the ready check,
-etc.  To make this easier, `client.auth()` stashes `password` and will send it after each connection,
-including reconnections.  `callback` is invoked only once, after the response to the very first
-`AUTH` command sent.
-NOTE: Your call to `client.auth()` should not be inside the ready handler. If
-you are doing this wrong, `client` will emit an error that looks
-something like this `Error: Ready check failed: ERR operation not permitted`.
-
-## client.end()
-
-Forcibly close the connection to the Redis server.  Note that this does not wait until all replies have been parsed.
-If you want to exit cleanly, call `client.quit()` to send the `QUIT` command after you have handled all replies.
-
-This example closes the connection to the Redis server before the replies have been read.  You probably don't
-want to do this:
-
-```js
-    var redis = require("redis"),
-        client = redis.createClient();
-
-    client.set("foo_rand000000000000", "some fantastic value");
-    client.get("foo_rand000000000000", function (err, reply) {
-        console.log(reply.toString());
-    });
-    client.end();
-```
-
-`client.end()` is useful for timeout cases where something is stuck or taking too long and you want
-to start over.
-
-## Friendlier hash commands
-
-Most Redis commands take a single String or an Array of Strings as arguments, and replies are sent back as a single String or an Array of Strings.
-When dealing with hash values, there are a couple of useful exceptions to this.
-
-### client.hgetall(hash)
-
-The reply from an HGETALL command will be converted into a JavaScript Object by `node_redis`.  That way you can interact
-with the responses using JavaScript syntax.
-
-Example:
-
-    client.hmset("hosts", "mjr", "1", "another", "23", "home", "1234");
-    client.hgetall("hosts", function (err, obj) {
-        console.dir(obj);
-    });
-
-Output:
-
-    { mjr: '1', another: '23', home: '1234' }
-
-### client.hmset(hash, obj, [callback])
-
-Multiple values in a hash can be set by supplying an object:
-
-    client.HMSET(key2, {
-        "0123456789": "abcdefghij", // NOTE: the key and value must both be strings
-        "some manner of key": "a type of value"
-    });
-
-The properties and values of this Object will be set as keys and values in the Redis hash.
-
-### client.hmset(hash, key1, val1, ... keyn, valn, [callback])
-
-Multiple values may also be set by supplying a list:
-
-    client.HMSET(key1, "0123456789", "abcdefghij", "some manner of key", "a type of value");
-
-
-## Publish / Subscribe
-
-Here is a simple example of the API for publish / subscribe.  This program opens two
-client connections, subscribes to a channel on one of them, and publishes to that
-channel on the other:
-
-```js
-    var redis = require("redis"),
-        client1 = redis.createClient(), client2 = redis.createClient(),
-        msg_count = 0;
-
-    client1.on("subscribe", function (channel, count) {
-        client2.publish("a nice channel", "I am sending a message.");
-        client2.publish("a nice channel", "I am sending a second message.");
-        client2.publish("a nice channel", "I am sending my last message.");
-    });
-
-    client1.on("message", function (channel, message) {
-        console.log("client1 channel " + channel + ": " + message);
-        msg_count += 1;
-        if (msg_count === 3) {
-            client1.unsubscribe();
-            client1.end();
-            client2.end();
-        }
-    });
-
-    client1.incr("did a thing");
-    client1.subscribe("a nice channel");
-```
-
-When a client issues a `SUBSCRIBE` or `PSUBSCRIBE`, that connection is put into "pub/sub" mode.
-At that point, only commands that modify the subscription set are valid.  When the subscription
-set is empty, the connection is put back into regular mode.
-
-If you need to send regular commands to Redis while in pub/sub mode, just open another connection.
-
-## Pub / Sub Events
-
-If a client has subscriptions active, it may emit these events:
-
-### "message" (channel, message)
-
-Client will emit `message` for every message received that matches an active subscription.
-Listeners are passed the channel name as `channel` and the message Buffer as `message`.
-
-### "pmessage" (pattern, channel, message)
-
-Client will emit `pmessage` for every message received that matches an active subscription pattern.
-Listeners are passed the original pattern used with `PSUBSCRIBE` as `pattern`, the sending channel
-name as `channel`, and the message Buffer as `message`.
-
-### "subscribe" (channel, count)
-
-Client will emit `subscribe` in response to a `SUBSCRIBE` command.  Listeners are passed the
-channel name as `channel` and the new count of subscriptions for this client as `count`.
-
-### "psubscribe" (pattern, count)
-
-Client will emit `psubscribe` in response to a `PSUBSCRIBE` command.  Listeners are passed the
-original pattern as `pattern`, and the new count of subscriptions for this client as `count`.
-
-### "unsubscribe" (channel, count)
-
-Client will emit `unsubscribe` in response to a `UNSUBSCRIBE` command.  Listeners are passed the
-channel name as `channel` and the new count of subscriptions for this client as `count`.  When
-`count` is 0, this client has left pub/sub mode and no more pub/sub events will be emitted.
-
-### "punsubscribe" (pattern, count)
-
-Client will emit `punsubscribe` in response to a `PUNSUBSCRIBE` command.  Listeners are passed the
-channel name as `channel` and the new count of subscriptions for this client as `count`.  When
-`count` is 0, this client has left pub/sub mode and no more pub/sub events will be emitted.
-
-## client.multi([commands])
-
-`MULTI` commands are queued up until an `EXEC` is issued, and then all commands are run atomically by
-Redis.  The interface in `node_redis` is to return an individual `Multi` object by calling `client.multi()`.
-
-```js
-    var redis  = require("./index"),
-        client = redis.createClient(), set_size = 20;
-
-    client.sadd("bigset", "a member");
-    client.sadd("bigset", "another member");
-
-    while (set_size > 0) {
-        client.sadd("bigset", "member " + set_size);
-        set_size -= 1;
-    }
-
-    // multi chain with an individual callback
-    client.multi()
-        .scard("bigset")
-        .smembers("bigset")
-        .keys("*", function (err, replies) {
-            // NOTE: code in this callback is NOT atomic
-            // this only happens after the the .exec call finishes.
-            client.mget(replies, redis.print);
-        })
-        .dbsize()
-        .exec(function (err, replies) {
-            console.log("MULTI got " + replies.length + " replies");
-            replies.forEach(function (reply, index) {
-                console.log("Reply " + index + ": " + reply.toString());
-            });
-        });
-```
-
-`client.multi()` is a constructor that returns a `Multi` object.  `Multi` objects share all of the
-same command methods as `client` objects do.  Commands are queued up inside the `Multi` object
-until `Multi.exec()` is invoked.
-
-You can either chain together `MULTI` commands as in the above example, or you can queue individual
-commands while still sending regular client command as in this example:
-
-```js
-    var redis  = require("redis"),
-        client = redis.createClient(), multi;
-
-    // start a separate multi command queue
-    multi = client.multi();
-    multi.incr("incr thing", redis.print);
-    multi.incr("incr other thing", redis.print);
-
-    // runs immediately
-    client.mset("incr thing", 100, "incr other thing", 1, redis.print);
-
-    // drains multi queue and runs atomically
-    multi.exec(function (err, replies) {
-        console.log(replies); // 101, 2
-    });
-
-    // you can re-run the same transaction if you like
-    multi.exec(function (err, replies) {
-        console.log(replies); // 102, 3
-        client.quit();
-    });
-```
-
-In addition to adding commands to the `MULTI` queue individually, you can also pass an array
-of commands and arguments to the constructor:
-
-```js
-    var redis  = require("redis"),
-        client = redis.createClient(), multi;
-
-    client.multi([
-        ["mget", "multifoo", "multibar", redis.print],
-        ["incr", "multifoo"],
-        ["incr", "multibar"]
-    ]).exec(function (err, replies) {
-        console.log(replies);
-    });
-```
-
-
-## Monitor mode
-
-Redis supports the `MONITOR` command, which lets you see all commands received by the Redis server
-across all client connections, including from other client libraries and other computers.
-
-After you send the `MONITOR` command, no other commands are valid on that connection.  `node_redis`
-will emit a `monitor` event for every new monitor message that comes across.  The callback for the
-`monitor` event takes a timestamp from the Redis server and an array of command arguments.
-
-Here is a simple example:
-
-```js
-    var client  = require("redis").createClient(),
-        util = require("util");
-
-    client.monitor(function (err, res) {
-        console.log("Entering monitoring mode.");
-    });
-
-    client.on("monitor", function (time, args) {
-        console.log(time + ": " + util.inspect(args));
-    });
-```
-
-# Extras
-
-Some other things you might like to know about.
-
-## client.server_info
-
-After the ready probe completes, the results from the INFO command are saved in the `client.server_info`
-object.
-
-The `versions` key contains an array of the elements of the version string for easy comparison.
-
-    > client.server_info.redis_version
-    '2.3.0'
-    > client.server_info.versions
-    [ 2, 3, 0 ]
-
-## redis.print()
-
-A handy callback function for displaying return values when testing.  Example:
-
-```js
-    var redis = require("redis"),
-        client = redis.createClient();
-
-    client.on("connect", function () {
-        client.set("foo_rand000000000000", "some fantastic value", redis.print);
-        client.get("foo_rand000000000000", redis.print);
-    });
-```
-
-This will print:
-
-    Reply: OK
-    Reply: some fantastic value
-
-Note that this program will not exit cleanly because the client is still connected.
-
-## redis.debug_mode
-
-Boolean to enable debug mode and protocol tracing.
-
-```js
-    var redis = require("redis"),
-        client = redis.createClient();
-
-    redis.debug_mode = true;
-
-    client.on("connect", function () {
-        client.set("foo_rand000000000000", "some fantastic value");
-    });
-```
-
-This will display:
-
-    mjr:~/work/node_redis (master)$ node ~/example.js
-    send command: *3
-    $3
-    SET
-    $20
-    foo_rand000000000000
-    $20
-    some fantastic value
-
-    on_data: +OK
-
-`send command` is data sent into Redis and `on_data` is data received from Redis.
-
-## client.send_command(command_name, args, callback)
-
-Used internally to send commands to Redis.  For convenience, nearly all commands that are published on the Redis
-Wiki have been added to the `client` object.  However, if I missed any, or if new commands are introduced before
-this library is updated, you can use `send_command()` to send arbitrary commands to Redis.
-
-All commands are sent as multi-bulk commands.  `args` can either be an Array of arguments, or omitted.
-
-## client.connected
-
-Boolean tracking the state of the connection to the Redis server.
-
-## client.command_queue.length
-
-The number of commands that have been sent to the Redis server but not yet replied to.  You can use this to
-enforce some kind of maximum queue depth for commands while connected.
-
-Don't mess with `client.command_queue` though unless you really know what you are doing.
-
-## client.offline_queue.length
-
-The number of commands that have been queued up for a future connection.  You can use this to enforce
-some kind of maximum queue depth for pre-connection commands.
-
-## client.retry_delay
-
-Current delay in milliseconds before a connection retry will be attempted.  This starts at `250`.
-
-## client.retry_backoff
-
-Multiplier for future retry timeouts.  This should be larger than 1 to add more time between retries.
-Defaults to 1.7.  The default initial connection retry is 250, so the second retry will be 425, followed by 723.5, etc.
-
-### Commands with Optional and Keyword arguments
-
-This applies to anything that uses an optional `[WITHSCORES]` or `[LIMIT offset count]` in the [redis.io/commands](http://redis.io/commands) documentation.
-
-Example:
-```js
-var args = [ 'myzset', 1, 'one', 2, 'two', 3, 'three', 99, 'ninety-nine' ];
-client.zadd(args, function (err, response) {
-    if (err) throw err;
-    console.log('added '+response+' items.');
-
-    // -Infinity and +Infinity also work
-    var args1 = [ 'myzset', '+inf', '-inf' ];
-    client.zrevrangebyscore(args1, function (err, response) {
-        if (err) throw err;
-        console.log('example1', response);
-        // write your code here
-    });
-
-    var max = 3, min = 1, offset = 1, count = 2;
-    var args2 = [ 'myzset', max, min, 'WITHSCORES', 'LIMIT', offset, count ];
-    client.zrevrangebyscore(args2, function (err, response) {
-        if (err) throw err;
-        console.log('example2', response);
-        // write your code here
-    });
-});
-```
-
-## TODO
-
-Better tests for auth, disconnect/reconnect, and all combinations thereof.
-
-Stream large set/get values into and out of Redis.  Otherwise the entire value must be in node's memory.
-
-Performance can be better for very large values.
-
-I think there are more performance improvements left in there for smaller values, especially for large lists of small values.
-
-## How to Contribute
-- open a pull request and then wait for feedback (if
-  [DTrejo](http://github.com/dtrejo) does not get back to you within 2 days,
-  comment again with indignation!)
-
-## Contributors
-Some people have have added features and fixed bugs in `node_redis` other than me.
-
-Ordered by date of first contribution.
-[Auto-generated](http://github.com/dtrejo/node-authors) on Wed Jul 25 2012 19:14:59 GMT-0700 (PDT).
-
-- [Matt Ranney aka `mranney`](https://github.com/mranney)
-- [Tim-Smart aka `tim-smart`](https://github.com/tim-smart)
-- [Tj Holowaychuk aka `visionmedia`](https://github.com/visionmedia)
-- [rick aka `technoweenie`](https://github.com/technoweenie)
-- [Orion Henry aka `orionz`](https://github.com/orionz)
-- [Aivo Paas aka `aivopaas`](https://github.com/aivopaas)
-- [Hank Sims aka `hanksims`](https://github.com/hanksims)
-- [Paul Carey aka `paulcarey`](https://github.com/paulcarey)
-- [Pieter Noordhuis aka `pietern`](https://github.com/pietern)
-- [nithesh aka `nithesh`](https://github.com/nithesh)
-- [Andy Ray aka `andy2ray`](https://github.com/andy2ray)
-- [unknown aka `unknowdna`](https://github.com/unknowdna)
-- [Dave Hoover aka `redsquirrel`](https://github.com/redsquirrel)
-- [Vladimir Dronnikov aka `dvv`](https://github.com/dvv)
-- [Umair Siddique aka `umairsiddique`](https://github.com/umairsiddique)
-- [Louis-Philippe Perron aka `lp`](https://github.com/lp)
-- [Mark Dawson aka `markdaws`](https://github.com/markdaws)
-- [Ian Babrou aka `bobrik`](https://github.com/bobrik)
-- [Felix Geisendörfer aka `felixge`](https://github.com/felixge)
-- [Jean-Hugues Pinson aka `undefined`](https://github.com/undefined)
-- [Maksim Lin aka `maks`](https://github.com/maks)
-- [Owen Smith aka `orls`](https://github.com/orls)
-- [Zachary Scott aka `zzak`](https://github.com/zzak)
-- [TEHEK Firefox aka `TEHEK`](https://github.com/TEHEK)
-- [Isaac Z. Schlueter aka `isaacs`](https://github.com/isaacs)
-- [David Trejo aka `DTrejo`](https://github.com/DTrejo)
-- [Brian Noguchi aka `bnoguchi`](https://github.com/bnoguchi)
-- [Philip Tellis aka `bluesmoon`](https://github.com/bluesmoon)
-- [Marcus Westin aka `marcuswestin2`](https://github.com/marcuswestin2)
-- [Jed Schmidt aka `jed`](https://github.com/jed)
-- [Dave Peticolas aka `jdavisp3`](https://github.com/jdavisp3)
-- [Trae Robrock aka `trobrock`](https://github.com/trobrock)
-- [Shankar Karuppiah aka `shankar0306`](https://github.com/shankar0306)
-- [Ignacio Burgueño aka `ignacio`](https://github.com/ignacio)
-
-Thanks.
-
-## LICENSE - "MIT License"
-
-Copyright (c) 2010 Matthew Ranney, http://ranney.com/
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-![spacer](http://ranney.com/1px.gif)

+ 0 - 89
app/node_modules/socket.io/node_modules/redis/benches/buffer_bench.js

@@ -1,89 +0,0 @@
-var source = new Buffer(100),
-    dest = new Buffer(100), i, j, k, tmp, count = 1000000, bytes = 100;
-    
-for (i = 99 ; i >= 0 ; i--) {
-    source[i] = 120;
-}
-
-var str = "This is a nice String.",
-    buf = new Buffer("This is a lovely Buffer.");
-
-var start = new Date();
-for (i = count * 100; i > 0 ; i--) {
-    if (Buffer.isBuffer(str)) {}
-}
-var end = new Date();
-console.log("Buffer.isBuffer(str) " + (end - start) + " ms");
-
-var start = new Date();
-for (i = count * 100; i > 0 ; i--) {
-    if (Buffer.isBuffer(buf)) {}
-}
-var end = new Date();
-console.log("Buffer.isBuffer(buf) " + (end - start) + " ms");
-
-var start = new Date();
-for (i = count * 100; i > 0 ; i--) {
-    if (str instanceof Buffer) {}
-}
-var end = new Date();
-console.log("str instanceof Buffer " + (end - start) + " ms");
-
-var start = new Date();
-for (i = count * 100; i > 0 ; i--) {
-    if (buf instanceof Buffer) {}
-}
-var end = new Date();
-console.log("buf instanceof Buffer " + (end - start) + " ms");
-
-for (i = bytes ; i > 0 ; i --) {
-    var start = new Date();
-    for (j = count ; j > 0; j--) {
-        tmp = source.toString("ascii", 0, bytes);
-    }
-    var end = new Date();
-    console.log("toString() " + i + " bytes " + (end - start) + " ms");
-}
-
-for (i = bytes ; i > 0 ; i --) {
-    var start = new Date();
-    for (j = count ; j > 0; j--) {
-        tmp = "";
-        for (k = 0; k <= i ; k++) {
-            tmp += String.fromCharCode(source[k]);
-        }
-    }
-    var end = new Date();
-    console.log("manual string " + i + " bytes " + (end - start) + " ms");
-}
-
-for (i = bytes ; i > 0 ; i--) {
-    var start = new Date();
-    for (j = count ; j > 0 ; j--) {
-        for (k = i ; k > 0 ; k--) {
-            dest[k] = source[k];
-        }
-    }
-    var end = new Date();
-    console.log("Manual copy " + i + " bytes " + (end - start) + " ms");
-}
-
-for (i = bytes ; i > 0 ; i--) {
-    var start = new Date();
-    for (j = count ; j > 0 ; j--) {
-        for (k = i ; k > 0 ; k--) {
-            dest[k] = 120;
-        }
-    }
-    var end = new Date();
-    console.log("Direct assignment " + i + " bytes " + (end - start) + " ms");
-}
-
-for (i = bytes ; i > 0 ; i--) {
-    var start = new Date();
-    for (j = count ; j > 0 ; j--) {
-        source.copy(dest, 0, 0, i);
-    }
-    var end = new Date();
-    console.log("Buffer.copy() " + i + " bytes " + (end - start) + " ms");
-}

+ 0 - 38
app/node_modules/socket.io/node_modules/redis/benches/hiredis_parser.js

@@ -1,38 +0,0 @@
-var Parser = require('../lib/parser/hiredis').Parser;
-var assert = require('assert');
-
-/*
-This test makes sure that exceptions thrown inside of "reply" event handlers
-are not trapped and mistakenly emitted as parse errors.
-*/
-(function testExecuteDoesNotCatchReplyCallbackExceptions() {
-  var parser = new Parser();
-  var replies = [{}];
-
-  parser.reader = {
-    feed: function() {},
-    get: function() {
-      return replies.shift();
-    }
-  };
-
-  var emittedError = false;
-  var caughtException = false;
-
-  parser
-    .on('error', function() {
-      emittedError = true;
-    })
-    .on('reply', function() {
-      throw new Error('bad');
-    });
-
-  try {
-    parser.execute();
-  } catch (err) {
-    caughtException = true;
-  }
-
-  assert.equal(caughtException, true);
-  assert.equal(emittedError, false);
-})();

+ 0 - 14
app/node_modules/socket.io/node_modules/redis/benches/re_sub_test.js

@@ -1,14 +0,0 @@
-var client = require('../index').createClient()
-  , client2 = require('../index').createClient()
-  , assert = require('assert');
-
-client.once('subscribe', function (channel, count) {
-  client.unsubscribe('x');
-  client.subscribe('x', function () {
-    client.quit();
-    client2.quit();
-  });
-  client2.publish('x', 'hi');
-});
-
-client.subscribe('x');

+ 0 - 29
app/node_modules/socket.io/node_modules/redis/benches/reconnect_test.js

@@ -1,29 +0,0 @@
-var redis = require("../index").createClient(null, null, {
-//    max_attempts: 4
-});
-
-redis.on("error", function (err) {
-    console.log("Redis says: " + err);
-});
-
-redis.on("ready", function () {
-    console.log("Redis ready.");
-});
-
-redis.on("reconnecting", function (arg) {
-    console.log("Redis reconnecting: " + JSON.stringify(arg));
-});
-redis.on("connect", function () {
-    console.log("Redis connected.");
-});
-
-setInterval(function () {
-    var now = Date.now();
-    redis.set("now", now, function (err, res) {
-        if (err) {
-            console.log(now + " Redis reply error: " + err);
-        } else {
-            console.log(now + " Redis reply: " + res);
-        }
-    });
-}, 100);

+ 0 - 16
app/node_modules/socket.io/node_modules/redis/benches/stress/codec.js

@@ -1,16 +0,0 @@
-var json = {
-	encode: JSON.stringify,
-	decode: JSON.parse
-};
-
-var MsgPack = require('node-msgpack');
-msgpack = {
-	encode: MsgPack.pack,
-	decode: function(str) { return MsgPack.unpack(new Buffer(str)); }
-};
-
-bison = require('bison');
-
-module.exports = json;
-//module.exports = msgpack;
-//module.exports = bison;

+ 0 - 38
app/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/pub.js

@@ -1,38 +0,0 @@
-'use strict';
-
-var freemem = require('os').freemem;
-var profiler = require('v8-profiler');
-var codec = require('../codec');
-
-var sent = 0;
-
-var pub = require('redis').createClient(null, null, {
-	//command_queue_high_water: 5,
-	//command_queue_low_water: 1
-})
-.on('ready', function() {
-	this.emit('drain');
-})
-.on('drain', function() {
-	process.nextTick(exec);
-});
-
-var payload = '1'; for (var i = 0; i < 12; ++i) payload += payload;
-console.log('Message payload length', payload.length);
-
-function exec() {
-	pub.publish('timeline', codec.encode({ foo: payload }));
-	++sent;
-	if (!pub.should_buffer) {
-		process.nextTick(exec);
-	}
-}
-
-profiler.takeSnapshot('s_0');
-
-exec();
-
-setInterval(function() {
-	profiler.takeSnapshot('s_' + sent);
-	console.error('sent', sent, 'free', freemem(), 'cmdqlen', pub.command_queue.length, 'offqlen', pub.offline_queue.length);
-}, 2000);

+ 0 - 10
app/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/run

@@ -1,10 +0,0 @@
-#!/bin/sh
-node server.js &
-node server.js &
-node server.js &
-node server.js &
-node server.js &
-node server.js &
-node server.js &
-node server.js &
-node --debug pub.js

+ 0 - 23
app/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/server.js

@@ -1,23 +0,0 @@
-'use strict';
-
-var freemem = require('os').freemem;
-var codec = require('../codec');
-
-var id = Math.random();
-var recv = 0;
-
-var sub = require('redis').createClient()
-	.on('ready', function() {
-		this.subscribe('timeline');
-	})
-	.on('message', function(channel, message) {
-		var self = this;
-		if (message) {
-			message = codec.decode(message);
-			++recv;
-		}
-	});
-
-setInterval(function() {
-	console.error('id', id, 'received', recv, 'free', freemem());
-}, 2000);

+ 0 - 49
app/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/pub.js

@@ -1,49 +0,0 @@
-'use strict';
-
-var freemem = require('os').freemem;
-//var profiler = require('v8-profiler');
-var codec = require('../codec');
-
-var sent = 0;
-
-var pub = require('redis').createClient(null, null, {
-	//command_queue_high_water: 5,
-	//command_queue_low_water: 1
-})
-.on('ready', function() {
-	this.del('timeline');
-	this.emit('drain');
-})
-.on('drain', function() {
-	process.nextTick(exec);
-});
-
-var payload = '1'; for (var i = 0; i < 12; ++i) payload += payload;
-console.log('Message payload length', payload.length);
-
-function exec() {
-	pub.rpush('timeline', codec.encode({ foo: payload }));
-	++sent;
-	if (!pub.should_buffer) {
-		process.nextTick(exec);
-	}
-}
-
-//profiler.takeSnapshot('s_0');
-
-exec();
-
-setInterval(function() {
-	//var ss = profiler.takeSnapshot('s_' + sent);
-	//console.error(ss.stringify());
-	pub.llen('timeline', function(err, result) {
-		console.error('sent', sent, 'free', freemem(),
-			'cmdqlen', pub.command_queue.length, 'offqlen', pub.offline_queue.length,
-			'llen', result
-		);
-	});
-}, 2000);
-
-/*setTimeout(function() {
-	process.exit();
-}, 30000);*/

+ 0 - 6
app/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/run

@@ -1,6 +0,0 @@
-#!/bin/sh
-node server.js &
-#node server.js &
-#node server.js &
-#node server.js &
-node --debug pub.js

+ 0 - 30
app/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/server.js

@@ -1,30 +0,0 @@
-'use strict';
-
-var freemem = require('os').freemem;
-var codec = require('../codec');
-
-var id = Math.random();
-var recv = 0;
-
-var cmd = require('redis').createClient();
-var sub = require('redis').createClient()
-	.on('ready', function() {
-		this.emit('timeline');
-	})
-	.on('timeline', function() {
-		var self = this;
-		this.blpop('timeline', 0, function(err, result) {
-			var message = result[1];
-			if (message) {
-				message = codec.decode(message);
-				++recv;
-			}
-			self.emit('timeline');
-		});
-	});
-
-setInterval(function() {
-	cmd.llen('timeline', function(err, result) {
-		console.error('id', id, 'received', recv, 'free', freemem(), 'llen', result);
-	});
-}, 2000);

+ 0 - 13
app/node_modules/socket.io/node_modules/redis/benches/stress/speed/00

@@ -1,13 +0,0 @@
-# size	JSON				msgpack				bison
-26602	2151.0170848180414
-25542	?					2842.589272665782
-24835	?					?					7280.4538397469805
-6104	6985.234528557929
-5045	?					7217.461392841478
-4341	?					?					14261.406335354604
-4180	15864.633685636572
-4143	?					12954.806235781925
-4141	?					?					44650.70733912719
-75		114227.07313350472
-40		?					30162.440062810834
-39		?					?					119815.66013519121

+ 0 - 13
app/node_modules/socket.io/node_modules/redis/benches/stress/speed/plot

@@ -1,13 +0,0 @@
-#!/bin/sh
-
-gnuplot >size-rate.jpg << _EOF_
-
-set terminal png nocrop enhanced font verdana 12 size 640,480
-set logscale x
-set logscale y
-set grid
-set xlabel 'Serialized object size, octets'
-set ylabel 'decode(encode(obj)) rate, 1/sec'
-plot '00' using 1:2 title 'json' smooth bezier, '00' using 1:3 title 'msgpack' smooth bezier, '00' using 1:4 title 'bison' smooth bezier
-
-_EOF_

BIN
app/node_modules/socket.io/node_modules/redis/benches/stress/speed/size-rate.png


+ 0 - 84
app/node_modules/socket.io/node_modules/redis/benches/stress/speed/speed.js

@@ -1,84 +0,0 @@
-var msgpack = require('node-msgpack');
-var bison = require('bison');
-var codec = {
-	JSON: {
-		encode: JSON.stringify,
-		decode: JSON.parse
-	},
-	msgpack: {
-		encode: msgpack.pack,
-		decode: msgpack.unpack
-	},
-	bison: bison
-};
-
-var obj, l;
-
-var s = '0';
-for (var i = 0; i < 12; ++i) s += s;
-
-obj = {
-	foo: s,
-	arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
-	rand: [],
-	a: s,
-	ccc: s,
-	b: s + s + s
-};
-for (i = 0; i < 100; ++i) obj.rand.push(Math.random());
-forObj(obj);
-
-obj = {
-	foo: s,
-	arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
-	rand: []
-};
-for (i = 0; i < 100; ++i) obj.rand.push(Math.random());
-forObj(obj);
-
-obj = {
-	foo: s,
-	arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
-	rand: []
-};
-forObj(obj);
-
-obj = {
-	arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
-	rand: []
-};
-forObj(obj);
-
-function run(obj, codec) {
-	var t1 = Date.now();
-	var n = 10000;
-	for (var i = 0; i < n; ++i) {
-		codec.decode(l = codec.encode(obj));
-	}
-	var t2 = Date.now();
-	//console.log('DONE', n*1000/(t2-t1), 'codecs/sec, length=', l.length);
-	return [n*1000/(t2-t1), l.length];
-}
-
-function series(obj, cname, n) {
-	var rate = 0;
-	var len = 0;
-	for (var i = 0; i < n; ++i) {
-		var r = run(obj, codec[cname]);
-		rate += r[0];
-		len += r[1];
-	}
-	rate /= n;
-	len /= n;
-	console.log(cname + '	' + rate + '	' + len);
-	return [rate, len];
-}
-
-function forObj(obj) {
-	var r = {
-		JSON: series(obj, 'JSON', 20),
-		msgpack: series(obj, 'msgpack', 20),
-		bison: series(obj, 'bison', 20)
-	};
-	return r;
-}

+ 0 - 18
app/node_modules/socket.io/node_modules/redis/benches/sub_quit_test.js

@@ -1,18 +0,0 @@
-var client = require("redis").createClient(),
-    client2 = require("redis").createClient();
-
-client.subscribe("something");
-client.on("subscribe", function (channel, count) {
-    console.log("Got sub: " + channel);
-    client.unsubscribe("something");
-});
-
-client.on("unsubscribe", function (channel, count) {
-    console.log("Got unsub: " + channel + ", quitting");
-    client.quit();
-});
-
-// exercise unsub before sub
-client2.unsubscribe("something");
-client2.subscribe("another thing");
-client2.quit();

+ 0 - 219
app/node_modules/socket.io/node_modules/redis/changelog.md

@@ -1,219 +0,0 @@
-Changelog
-=========
-
-## v0.7.2 - April 29, 2012
-
-Many contributed fixes. Thank you, contributors.
-
-* [GH-190] - pub/sub mode fix (Brian Noguchi)
-* [GH-165] - parser selection fix (TEHEK)
-* numerous documentation and examples updates
-* auth errors emit Errors instead of Strings (David Trejo)
-
-## v0.7.1 - November 15, 2011
-
-Fix regression in reconnect logic.
-
-Very much need automated tests for reconnection and queue logic.
-
-## v0.7.0 - November 14, 2011
-
-Many contributed fixes. Thanks everybody.
-
-* [GH-127] - properly re-initialize parser on reconnect
-* [GH-136] - handle passing undefined as callback (Ian Babrou)
-* [GH-139] - properly handle exceptions thrown in pub/sub event handlers (Felix Geisendörfer)
-* [GH-141] - detect closing state on stream error (Felix Geisendörfer)
-* [GH-142] - re-select database on reconnection (Jean-Hugues Pinson)
-* [GH-146] - add sort example (Maksim Lin)
-
-Some more goodies:
-
-* Fix bugs with node 0.6
-* Performance improvements
-* New version of `multi_bench.js` that tests more realistic scenarios
-* [GH-140] - support optional callback for subscribe commands
-* Properly flush and error out command queue when connection fails
-* Initial work on reconnection thresholds
-
-## v0.6.7 - July 30, 2011
-
-(accidentally skipped v0.6.6)
-
-Fix and test for [GH-123]
-
-Passing an Array as as the last argument should expand as users
-expect.  The old behavior was to coerce the arguments into Strings,
-which did surprising things with Arrays.
-
-## v0.6.5 - July 6, 2011
-
-Contributed changes:
-
-*  Support SlowBuffers (Umair Siddique)
-*  Add Multi to exports (Louis-Philippe Perron)
-*  Fix for drain event calculation (Vladimir Dronnikov)
-
-Thanks!
-
-## v0.6.4 - June 30, 2011
-
-Fix bug with optional callbacks for hmset.
-
-## v0.6.2 - June 30, 2011
-
-Bugs fixed:
-
-*  authentication retry while server is loading db (danmaz74) [GH-101]
-*  command arguments processing issue with arrays
-
-New features:
-
-*  Auto update of new commands from redis.io (Dave Hoover)
-*  Performance improvements and backpressure controls.
-*  Commands now return the true/false value from the underlying socket write(s).
-*  Implement command_queue high water and low water for more better control of queueing.
-
-See `examples/backpressure_drain.js` for more information.
-
-## v0.6.1 - June 29, 2011
-
-Add support and tests for Redis scripting through EXEC command.
-
-Bug fix for monitor mode.  (forddg)
-
-Auto update of new commands from redis.io (Dave Hoover)
-
-## v0.6.0 - April 21, 2011
-
-Lots of bugs fixed.
-
-*  connection error did not properly trigger reconnection logic [GH-85]
-*  client.hmget(key, [val1, val2]) was not expanding properly [GH-66]
-*  client.quit() while in pub/sub mode would throw an error [GH-87]
-*  client.multi(['hmset', 'key', {foo: 'bar'}]) fails [GH-92]
-*  unsubscribe before subscribe would make things very confused [GH-88]
-*  Add BRPOPLPUSH [GH-79]
-
-## v0.5.11 - April 7, 2011
-
-Added DISCARD
-
-I originally didn't think DISCARD would do anything here because of the clever MULTI interface, but somebody
-pointed out to me that DISCARD can be used to flush the WATCH set.
-
-## v0.5.10 - April 6, 2011
-
-Added HVALS
-
-## v0.5.9 - March 14, 2011
-
-Fix bug with empty Array arguments - Andy Ray
-
-## v0.5.8 - March 14, 2011
-
-Add `MONITOR` command and special monitor command reply parsing.
-
-## v0.5.7 - February 27, 2011
-
-Add magical auth command.
-
-Authentication is now remembered by the client and will be automatically sent to the server
-on every connection, including any reconnections.
-
-## v0.5.6 - February 22, 2011
-
-Fix bug in ready check with `return_buffers` set to `true`.
-
-Thanks to Dean Mao and Austin Chau.
-
-## v0.5.5 - February 16, 2011
-
-Add probe for server readiness.
-
-When a Redis server starts up, it might take a while to load the dataset into memory.
-During this time, the server will accept connections, but will return errors for all non-INFO
-commands.  Now node_redis will send an INFO command whenever it connects to a server.
-If the info command indicates that the server is not ready, the client will keep trying until
-the server is ready.  Once it is ready, the client will emit a "ready" event as well as the
-"connect" event.  The client will queue up all commands sent before the server is ready, just
-like it did before.  When the server is ready, all offline/non-ready commands will be replayed.
-This should be backward compatible with previous versions.
-
-To disable this ready check behavior, set `options.no_ready_check` when creating the client.
-
-As a side effect of this change, the key/val params from the info command are available as
-`client.server_options`.  Further, the version string is decomposed into individual elements
-in `client.server_options.versions`.
-
-## v0.5.4 - February 11, 2011
-
-Fix excess memory consumption from Queue backing store.
-
-Thanks to Gustaf Sjöberg.
-
-## v0.5.3 - February 5, 2011
-
-Fix multi/exec error reply callback logic.
-
-Thanks to Stella Laurenzo.
-
-## v0.5.2 - January 18, 2011
-
-Fix bug where unhandled error replies confuse the parser.
-
-## v0.5.1 - January 18, 2011
-
-Fix bug where subscribe commands would not handle redis-server startup error properly.
-
-## v0.5.0 - December 29, 2010
-
-Some bug fixes:
-
-* An important bug fix in reconnection logic.  Previously, reply callbacks would be invoked twice after
-  a reconnect.
-* Changed error callback argument to be an actual Error object.
-
-New feature:
-
-* Add friendly syntax for HMSET using an object.
-
-## v0.4.1 - December 8, 2010
-
-Remove warning about missing hiredis.  You probably do want it though.
-
-## v0.4.0 - December 5, 2010
-
-Support for multiple response parsers and hiredis C library from Pieter Noordhuis.
-Return Strings instead of Buffers by default.
-Empty nested mb reply bug fix.
-
-## v0.3.9 - November 30, 2010
-
-Fix parser bug on failed EXECs.
-
-## v0.3.8 - November 10, 2010
-
-Fix for null MULTI response when WATCH condition fails.
-
-## v0.3.7 - November 9, 2010
-
-Add "drain" and "idle" events.
-
-## v0.3.6 - November 3, 2010
-
-Add all known Redis commands from Redis master, even ones that are coming in 2.2 and beyond.
-
-Send a friendlier "error" event message on stream errors like connection refused / reset.
-
-## v0.3.5 - October 21, 2010
-
-A few bug fixes.
-
-* Fixed bug with `nil` multi-bulk reply lengths that showed up with `BLPOP` timeouts.
-* Only emit `end` once when connection goes away.
-* Fixed bug in `test.js` where driver finished before all tests completed.
-
-## unversioned wasteland
-
-See the git history for what happened before.

+ 0 - 87
app/node_modules/socket.io/node_modules/redis/diff_multi_bench_output.js

@@ -1,87 +0,0 @@
-#!/usr/bin/env node
-
-var colors = require('colors'),
-    fs = require('fs'),
-    _ = require('underscore'),
-    metrics = require('metrics'),
-
-    // `node diff_multi_bench_output.js before.txt after.txt`
-    before = process.argv[2],
-    after = process.argv[3];
-
-if (!before || !after) {
-    console.log('Please supply two file arguments:');
-    var n = __filename;
-    n = n.substring(n.lastIndexOf('/', n.length));
-    console.log('    ./' + n + ' multiBenchBefore.txt multiBenchAfter.txt');
-    console.log('To generate multiBenchBefore.txt, run');
-    console.log('    node multi_bench.js > multiBenchBefore.txt');
-    console.log('Thank you for benchmarking responsibly.');
-    return;
-}
-
-var before_lines = fs.readFileSync(before, 'utf8').split('\n'),
-    after_lines = fs.readFileSync(after, 'utf8').split('\n');
-
-console.log('Comparing before,', before.green, '(', before_lines.length,
-    'lines)', 'to after,', after.green, '(', after_lines.length, 'lines)');
-
-var total_ops = new metrics.Histogram.createUniformHistogram();
-
-before_lines.forEach(function(b, i) {
-    var a = after_lines[i];
-    if (!a || !b || !b.trim() || !a.trim()) {
-        // console.log('#ignored#', '>'+a+'<', '>'+b+'<');
-        return;
-    }
-
-    b_words = b.split(' ').filter(is_whitespace);
-    a_words = a.split(' ').filter(is_whitespace);
-
-    var ops =
-        [b_words, a_words]
-        .map(function(words) {
-            // console.log(words);
-            return parseInt10(words.slice(-2, -1));
-        }).filter(function(num) {
-            var isNaN = !num && num !== 0;
-            return !isNaN;
-        });
-    if (ops.length != 2) return
-
-    var delta = ops[1] - ops[0];
-
-    total_ops.update(delta);
-
-    delta = humanize_diff(delta);
-    console.log(
-        // name of test
-        command_name(a_words) == command_name(b_words)
-            ? command_name(a_words) + ':'
-            : '404:',
-        // results of test
-        ops.join(' -> '), 'ops/sec (∆', delta, ')');
-});
-
-console.log('Mean difference in ops/sec:', humanize_diff(total_ops.mean()));
-
-function is_whitespace(s) {
-    return !!s.trim();
-}
-
-function parseInt10(s) {
-    return parseInt(s, 10);
-}
-
-// green if greater than 0, red otherwise
-function humanize_diff(num) {
-    if (num > 0) {
-        return ('+' + num).green;
-    }
-    return ('' + num).red;
-}
-
-function command_name(words) {
-    var line = words.join(' ');
-    return line.substr(0, line.indexOf(','));
-}

+ 0 - 5
app/node_modules/socket.io/node_modules/redis/examples/auth.js

@@ -1,5 +0,0 @@
-var redis  = require("redis"),
-    client = redis.createClient();
-
-// This command is magical.  Client stashes the password and will issue on every connect.
-client.auth("somepass");

+ 0 - 33
app/node_modules/socket.io/node_modules/redis/examples/backpressure_drain.js

@@ -1,33 +0,0 @@
-var redis = require("../index"),
-    client = redis.createClient(null, null, {
-        command_queue_high_water: 5,
-        command_queue_low_water: 1
-    }),
-    remaining_ops = 100000, paused = false;
-
-function op() {
-    if (remaining_ops <= 0) {
-        console.error("Finished.");
-        process.exit(0);
-    }
-
-    remaining_ops--;
-    if (client.hset("test hash", "val " + remaining_ops, remaining_ops) === false) {
-        console.log("Pausing at " + remaining_ops);
-        paused = true;
-    } else {
-        process.nextTick(op);
-    }
-}
-
-client.on("drain", function () {
-    if (paused) {
-        console.log("Resuming at " + remaining_ops);
-        paused = false;
-        process.nextTick(op);
-    } else {
-        console.log("Got drain while not paused at " + remaining_ops);
-    }
-});
-
-op();

+ 0 - 9
app/node_modules/socket.io/node_modules/redis/examples/eval.js

@@ -1,9 +0,0 @@
-var redis = require("./index"),
-    client = redis.createClient();
-
-redis.debug_mode = true;
-
-client.eval("return 100.5", 0, function (err, res) {
-    console.dir(err);
-    console.dir(res);
-});

+ 0 - 24
app/node_modules/socket.io/node_modules/redis/examples/extend.js

@@ -1,24 +0,0 @@
-var redis = require("redis"),
-    client = redis.createClient();
-
-// Extend the RedisClient prototype to add a custom method
-// This one converts the results from "INFO" into a JavaScript Object
-
-redis.RedisClient.prototype.parse_info = function (callback) {
-    this.info(function (err, res) {
-        var lines = res.toString().split("\r\n").sort();
-        var obj = {};
-        lines.forEach(function (line) {
-            var parts = line.split(':');
-            if (parts[1]) {
-                obj[parts[0]] = parts[1];
-            }
-        });
-        callback(obj)
-    });
-};
-
-client.parse_info(function (info) {
-    console.dir(info);
-    client.quit();
-});

+ 0 - 32
app/node_modules/socket.io/node_modules/redis/examples/file.js

@@ -1,32 +0,0 @@
-// Read a file from disk, store it in Redis, then read it back from Redis.
-
-var redis = require("redis"),
-    client = redis.createClient(),
-    fs = require("fs"),
-    filename = "kids_in_cart.jpg";
-
-// Get the file I use for testing like this:
-//    curl http://ranney.com/kids_in_cart.jpg -o kids_in_cart.jpg
-// or just use your own file.
-
-// Read a file from fs, store it in Redis, get it back from Redis, write it back to fs.
-fs.readFile(filename, function (err, data) {
-    if (err) throw err
-    console.log("Read " + data.length + " bytes from filesystem.");
-    
-    client.set(filename, data, redis.print); // set entire file
-    client.get(filename, function (err, reply) { // get entire file
-        if (err) {
-            console.log("Get error: " + err);
-        } else {
-            fs.writeFile("duplicate_" + filename, reply, function (err) {
-                if (err) {
-                    console.log("Error on write: " + err)
-                } else {
-                    console.log("File written.");
-                }
-                client.end();
-            });
-        }
-    });
-});

+ 0 - 5
app/node_modules/socket.io/node_modules/redis/examples/mget.js

@@ -1,5 +0,0 @@
-var client = require("redis").createClient();
-
-client.mget(["sessions started", "sessions started", "foo"], function (err, res) {
-    console.dir(res);
-});

+ 0 - 10
app/node_modules/socket.io/node_modules/redis/examples/monitor.js

@@ -1,10 +0,0 @@
-var client  = require("../index").createClient(),
-    util = require("util");
-
-client.monitor(function (err, res) {
-    console.log("Entering monitoring mode.");
-});
-
-client.on("monitor", function (time, args) {
-    console.log(time + ": " + util.inspect(args));
-});

+ 0 - 46
app/node_modules/socket.io/node_modules/redis/examples/multi.js

@@ -1,46 +0,0 @@
-var redis  = require("redis"),
-    client = redis.createClient(), set_size = 20;
-
-client.sadd("bigset", "a member");
-client.sadd("bigset", "another member");
-
-while (set_size > 0) {
-    client.sadd("bigset", "member " + set_size);
-    set_size -= 1;
-}
-
-// multi chain with an individual callback
-client.multi()
-    .scard("bigset")
-    .smembers("bigset")
-    .keys("*", function (err, replies) {
-        client.mget(replies, redis.print);
-    })
-    .dbsize()
-    .exec(function (err, replies) {
-        console.log("MULTI got " + replies.length + " replies");
-        replies.forEach(function (reply, index) {
-            console.log("Reply " + index + ": " + reply.toString());
-        });
-    });
-
-client.mset("incr thing", 100, "incr other thing", 1, redis.print);
-
-// start a separate multi command queue
-var multi = client.multi();
-multi.incr("incr thing", redis.print);
-multi.incr("incr other thing", redis.print);
-
-// runs immediately
-client.get("incr thing", redis.print); // 100
-
-// drains multi queue and runs atomically
-multi.exec(function (err, replies) {
-    console.log(replies); // 101, 2
-});
-
-// you can re-run the same transaction if you like
-multi.exec(function (err, replies) {
-    console.log(replies); // 102, 3
-    client.quit();
-});

+ 0 - 29
app/node_modules/socket.io/node_modules/redis/examples/multi2.js

@@ -1,29 +0,0 @@
-var redis  = require("redis"),
-    client = redis.createClient(), multi;
-
-// start a separate command queue for multi
-multi = client.multi();
-multi.incr("incr thing", redis.print);
-multi.incr("incr other thing", redis.print);
-
-// runs immediately
-client.mset("incr thing", 100, "incr other thing", 1, redis.print);
-
-// drains multi queue and runs atomically
-multi.exec(function (err, replies) {
-    console.log(replies); // 101, 2
-});
-
-// you can re-run the same transaction if you like
-multi.exec(function (err, replies) {
-    console.log(replies); // 102, 3
-    client.quit();
-});
-
-client.multi([
-    ["mget", "multifoo", "multibar", redis.print],
-    ["incr", "multifoo"],
-    ["incr", "multibar"]
-]).exec(function (err, replies) {
-    console.log(replies.toString());
-});

+ 0 - 33
app/node_modules/socket.io/node_modules/redis/examples/psubscribe.js

@@ -1,33 +0,0 @@
-var redis = require("redis"),
-    client1 = redis.createClient(),
-    client2 = redis.createClient(),
-    client3 = redis.createClient(),
-    client4 = redis.createClient(),
-    msg_count = 0;
-
-redis.debug_mode = false;
-
-client1.on("psubscribe", function (pattern, count) {
-    console.log("client1 psubscribed to " + pattern + ", " + count + " total subscriptions");
-    client2.publish("channeltwo", "Me!");
-    client3.publish("channelthree", "Me too!");
-    client4.publish("channelfour", "And me too!");
-});
-
-client1.on("punsubscribe", function (pattern, count) {
-    console.log("client1 punsubscribed from " + pattern + ", " + count + " total subscriptions");
-    client4.end();
-    client3.end();
-    client2.end();
-    client1.end();
-});
-
-client1.on("pmessage", function (pattern, channel, message) {
-    console.log("("+  pattern +")" + " client1 received message on " + channel + ": " + message);
-    msg_count += 1;
-    if (msg_count === 3) {
-        client1.punsubscribe();
-    }
-});
-
-client1.psubscribe("channel*");

+ 0 - 41
app/node_modules/socket.io/node_modules/redis/examples/pub_sub.js

@@ -1,41 +0,0 @@
-var redis = require("redis"),
-    client1 = redis.createClient(), msg_count = 0,
-    client2 = redis.createClient();
-
-redis.debug_mode = false;
-
-// Most clients probably don't do much on "subscribe".  This example uses it to coordinate things within one program.
-client1.on("subscribe", function (channel, count) {
-    console.log("client1 subscribed to " + channel + ", " + count + " total subscriptions");
-    if (count === 2) {
-        client2.publish("a nice channel", "I am sending a message.");
-        client2.publish("another one", "I am sending a second message.");
-        client2.publish("a nice channel", "I am sending my last message.");
-    }
-});
-
-client1.on("unsubscribe", function (channel, count) {
-    console.log("client1 unsubscribed from " + channel + ", " + count + " total subscriptions");
-    if (count === 0) {
-        client2.end();
-        client1.end();
-    }
-});
-
-client1.on("message", function (channel, message) {
-    console.log("client1 channel " + channel + ": " + message);
-    msg_count += 1;
-    if (msg_count === 3) {
-        client1.unsubscribe();
-    }
-});
-
-client1.on("ready", function () {
-    // if you need auth, do it here
-    client1.incr("did a thing");
-    client1.subscribe("a nice channel", "another one");
-});
-
-client2.on("ready", function () {
-    // if you need auth, do it here
-});

+ 0 - 24
app/node_modules/socket.io/node_modules/redis/examples/simple.js

@@ -1,24 +0,0 @@
-var redis = require("redis"),
-    client = redis.createClient();
-
-client.on("error", function (err) {
-    console.log("error event - " + client.host + ":" + client.port + " - " + err);
-});
-
-client.set("string key", "string val", redis.print);
-client.hset("hash key", "hashtest 1", "some value", redis.print);
-client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
-client.hkeys("hash key", function (err, replies) {
-    if (err) {
-        return console.error("error response - " + err);
-    }
-
-    console.log(replies.length + " replies:");
-    replies.forEach(function (reply, i) {
-        console.log("    " + i + ": " + reply);
-    });
-});
-
-client.quit(function (err, res) {
-    console.log("Exiting from quit command.");
-});

+ 0 - 17
app/node_modules/socket.io/node_modules/redis/examples/sort.js

@@ -1,17 +0,0 @@
-var redis = require("redis"),
-    client = redis.createClient();
-
-client.sadd("mylist", 1);
-client.sadd("mylist", 2);
-client.sadd("mylist", 3);
-
-client.set("weight_1", 5);
-client.set("weight_2", 500);
-client.set("weight_3", 1);
-
-client.set("object_1", "foo");
-client.set("object_2", "bar");
-client.set("object_3", "qux");
-
-client.sort("mylist", "by", "weight_*", "get", "object_*", redis.print);
-// Prints Reply: qux,foo,bar

+ 0 - 15
app/node_modules/socket.io/node_modules/redis/examples/subqueries.js

@@ -1,15 +0,0 @@
-// Sending commands in response to other commands.
-// This example runs "type" against every key in the database
-//
-var client = require("redis").createClient();
-
-client.keys("*", function (err, keys) {
-    keys.forEach(function (key, pos) {
-        client.type(key, function (err, keytype) {
-            console.log(key + " is " + keytype);
-            if (pos === (keys.length - 1)) {
-                client.quit();
-            }
-        });
-    });
-});

+ 0 - 19
app/node_modules/socket.io/node_modules/redis/examples/subquery.js

@@ -1,19 +0,0 @@
-var client = require("redis").createClient();
-
-function print_results(obj) {
-    console.dir(obj);
-}
-
-// build a map of all keys and their types
-client.keys("*", function (err, all_keys) {
-    var key_types = {};
-    
-    all_keys.forEach(function (key, pos) { // use second arg of forEach to get pos
-        client.type(key, function (err, type) {
-            key_types[key] = type;
-            if (pos === all_keys.length - 1) { // callbacks all run in order
-                print_results(key_types);
-            }
-        });
-    });
-});

+ 0 - 29
app/node_modules/socket.io/node_modules/redis/examples/unix_socket.js

@@ -1,29 +0,0 @@
-var redis = require("redis"),
-    client = redis.createClient("/tmp/redis.sock"),
-    profiler = require("v8-profiler");
-
-client.on("connect", function () {
-    console.log("Got Unix socket connection.")
-});
-
-client.on("error", function (err) {
-    console.log(err.message);
-});
-
-client.set("space chars", "space value");
-
-setInterval(function () {
-    client.get("space chars");
-}, 100);
-
-function done() {
-    client.info(function (err, reply) {
-        console.log(reply.toString());
-        client.quit();
-    });
-}
-
-setTimeout(function () {
-    console.log("Taking snapshot.");
-    var snap = profiler.takeSnapshot();
-}, 5000);

+ 0 - 31
app/node_modules/socket.io/node_modules/redis/examples/web_server.js

@@ -1,31 +0,0 @@
-// A simple web server that generates dyanmic content based on responses from Redis
-
-var http = require("http"), server,
-    redis_client = require("redis").createClient();
-
-server = http.createServer(function (request, response) {
-    response.writeHead(200, {
-        "Content-Type": "text/plain"
-    });
-    
-    var redis_info, total_requests;
-    
-    redis_client.info(function (err, reply) {
-        redis_info = reply; // stash response in outer scope
-    });
-    redis_client.incr("requests", function (err, reply) {
-        total_requests = reply; // stash response in outer scope
-    });
-    redis_client.hincrby("ip", request.connection.remoteAddress, 1);
-    redis_client.hgetall("ip", function (err, reply) {
-        // This is the last reply, so all of the previous replies must have completed already
-        response.write("This page was generated after talking to redis.\n\n" +
-            "Redis info:\n" + redis_info + "\n" +
-            "Total requests: " + total_requests + "\n\n" +
-            "IP count: \n");
-        Object.keys(reply).forEach(function (ip) {
-            response.write("    " + ip + ": " + reply[ip] + "\n");
-        });
-        response.end();
-    });
-}).listen(80);

+ 0 - 39
app/node_modules/socket.io/node_modules/redis/generate_commands.js

@@ -1,39 +0,0 @@
-var http = require("http"),
-    fs = require("fs");
-
-function prettyCurrentTime() {
-    var date = new Date();
-    return date.toLocaleString();
-}
-
-function write_file(commands, path) {
-    var file_contents, out_commands;
-
-    console.log("Writing " + Object.keys(commands).length + " commands to " + path);
-
-    file_contents = "// This file was generated by ./generate_commands.js on " + prettyCurrentTime() + "\n";
-
-    out_commands = Object.keys(commands).map(function (key) {
-        return key.toLowerCase();
-    });
-
-    file_contents += "module.exports = " + JSON.stringify(out_commands, null, "    ") + ";\n";
-
-    fs.writeFile(path, file_contents);
-}
-
-http.get({host: "redis.io", path: "/commands.json"}, function (res) {
-    var body = "";
-
-    console.log("Response from redis.io/commands.json: " + res.statusCode);
-
-    res.on('data', function (chunk) {
-        body += chunk;
-    });
-
-    res.on('end', function () {
-        write_file(JSON.parse(body), "lib/commands.js");
-    });
-}).on('error', function (e) {
-    console.log("Error fetching command list from redis.io: " + e.message);
-});

+ 0 - 1113
app/node_modules/socket.io/node_modules/redis/index.js

@@ -1,1113 +0,0 @@
-/*global Buffer require exports console setTimeout */
-
-var net = require("net"),
-    util = require("./lib/util"),
-    Queue = require("./lib/queue"),
-    to_array = require("./lib/to_array"),
-    events = require("events"),
-    crypto = require("crypto"),
-    parsers = [], commands,
-    connection_id = 0,
-    default_port = 6379,
-    default_host = "127.0.0.1";
-
-// can set this to true to enable for all connections
-exports.debug_mode = false;
-
-// hiredis might not be installed
-try {
-    require("./lib/parser/hiredis");
-    parsers.push(require("./lib/parser/hiredis"));
-} catch (err) {
-    if (exports.debug_mode) {
-        console.warn("hiredis parser not installed.");
-    }
-}
-
-parsers.push(require("./lib/parser/javascript"));
-
-function RedisClient(stream, options) {
-    this.stream = stream;
-    this.options = options = options || {};
-
-    this.connection_id = ++connection_id;
-    this.connected = false;
-    this.ready = false;
-    this.connections = 0;
-    if (this.options.socket_nodelay === undefined) {
-        this.options.socket_nodelay = true;
-    }
-    this.should_buffer = false;
-    this.command_queue_high_water = this.options.command_queue_high_water || 1000;
-    this.command_queue_low_water = this.options.command_queue_low_water || 0;
-    this.max_attempts = null;
-    if (options.max_attempts && !isNaN(options.max_attempts) && options.max_attempts > 0) {
-        this.max_attempts = +options.max_attempts;
-    }
-    this.command_queue = new Queue(); // holds sent commands to de-pipeline them
-    this.offline_queue = new Queue(); // holds commands issued but not able to be sent
-    this.commands_sent = 0;
-    this.connect_timeout = false;
-    if (options.connect_timeout && !isNaN(options.connect_timeout) && options.connect_timeout > 0) {
-        this.connect_timeout = +options.connect_timeout;
-    }
-
-    this.enable_offline_queue = true;
-    if (typeof this.options.enable_offline_queue === "boolean") {
-        this.enable_offline_queue = this.options.enable_offline_queue;
-    }
-
-    this.initialize_retry_vars();
-    this.pub_sub_mode = false;
-    this.subscription_set = {};
-    this.monitoring = false;
-    this.closing = false;
-    this.server_info = {};
-    this.auth_pass = null;
-    this.parser_module = null;
-    this.selected_db = null;	// save the selected db here, used when reconnecting
-
-    this.old_state = null;
-
-    var self = this;
-
-    this.stream.on("connect", function () {
-        self.on_connect();
-    });
-
-    this.stream.on("data", function (buffer_from_socket) {
-        self.on_data(buffer_from_socket);
-    });
-
-    this.stream.on("error", function (msg) {
-        self.on_error(msg.message);
-    });
-
-    this.stream.on("close", function () {
-        self.connection_gone("close");
-    });
-
-    this.stream.on("end", function () {
-        self.connection_gone("end");
-    });
-
-    this.stream.on("drain", function () {
-        self.should_buffer = false;
-        self.emit("drain");
-    });
-
-    events.EventEmitter.call(this);
-}
-util.inherits(RedisClient, events.EventEmitter);
-exports.RedisClient = RedisClient;
-
-RedisClient.prototype.initialize_retry_vars = function () {
-    this.retry_timer = null;
-    this.retry_totaltime = 0;
-    this.retry_delay = 150;
-    this.retry_backoff = 1.7;
-    this.attempts = 1;
-};
-
-// flush offline_queue and command_queue, erroring any items with a callback first
-RedisClient.prototype.flush_and_error = function (message) {
-    var command_obj;
-    while (this.offline_queue.length > 0) {
-        command_obj = this.offline_queue.shift();
-        if (typeof command_obj.callback === "function") {
-            command_obj.callback(message);
-        }
-    }
-    this.offline_queue = new Queue();
-
-    while (this.command_queue.length > 0) {
-        command_obj = this.command_queue.shift();
-        if (typeof command_obj.callback === "function") {
-            command_obj.callback(message);
-        }
-    }
-    this.command_queue = new Queue();
-};
-
-RedisClient.prototype.on_error = function (msg) {
-    var message = "Redis connection to " + this.host + ":" + this.port + " failed - " + msg,
-        self = this, command_obj;
-
-    if (this.closing) {
-        return;
-    }
-
-    if (exports.debug_mode) {
-        console.warn(message);
-    }
-
-    this.flush_and_error(message);
-
-    this.connected = false;
-    this.ready = false;
-
-    this.emit("error", new Error(message));
-    // "error" events get turned into exceptions if they aren't listened for.  If the user handled this error
-    // then we should try to reconnect.
-    this.connection_gone("error");
-};
-
-RedisClient.prototype.do_auth = function () {
-    var self = this;
-
-    if (exports.debug_mode) {
-        console.log("Sending auth to " + self.host + ":" + self.port + " id " + self.connection_id);
-    }
-    self.send_anyway = true;
-    self.send_command("auth", [this.auth_pass], function (err, res) {
-        if (err) {
-            if (err.toString().match("LOADING")) {
-                // if redis is still loading the db, it will not authenticate and everything else will fail
-                console.log("Redis still loading, trying to authenticate later");
-                setTimeout(function () {
-                    self.do_auth();
-                }, 2000); // TODO - magic number alert
-                return;
-            } else {
-                return self.emit("error", new Error("Auth error: " + err.message));
-            }
-        }
-        if (res.toString() !== "OK") {
-            return self.emit("error", new Error("Auth failed: " + res.toString()));
-        }
-        if (exports.debug_mode) {
-            console.log("Auth succeeded " + self.host + ":" + self.port + " id " + self.connection_id);
-        }
-        if (self.auth_callback) {
-            self.auth_callback(err, res);
-            self.auth_callback = null;
-        }
-
-        // now we are really connected
-        self.emit("connect");
-        if (self.options.no_ready_check) {
-            self.on_ready();
-        } else {
-            self.ready_check();
-        }
-    });
-    self.send_anyway = false;
-};
-
-RedisClient.prototype.on_connect = function () {
-    if (exports.debug_mode) {
-        console.log("Stream connected " + this.host + ":" + this.port + " id " + this.connection_id);
-    }
-    var self = this;
-
-    this.connected = true;
-    this.ready = false;
-    this.attempts = 0;
-    this.connections += 1;
-    this.command_queue = new Queue();
-    this.emitted_end = false;
-    this.initialize_retry_vars();
-    if (this.options.socket_nodelay) {
-        this.stream.setNoDelay();
-    }
-    this.stream.setTimeout(0);
-
-    this.init_parser();
-
-    if (this.auth_pass) {
-        this.do_auth();
-    } else {
-        this.emit("connect");
-
-        if (this.options.no_ready_check) {
-            this.on_ready();
-        } else {
-            this.ready_check();
-        }
-    }
-};
-
-RedisClient.prototype.init_parser = function () {
-    var self = this;
-
-    if (this.options.parser) {
-        if (! parsers.some(function (parser) {
-            if (parser.name === self.options.parser) {
-                self.parser_module = parser;
-                if (exports.debug_mode) {
-                    console.log("Using parser module: " + self.parser_module.name);
-                }
-                return true;
-            }
-        })) {
-            throw new Error("Couldn't find named parser " + self.options.parser + " on this system");
-        }
-    } else {
-        if (exports.debug_mode) {
-            console.log("Using default parser module: " + parsers[0].name);
-        }
-        this.parser_module = parsers[0];
-    }
-
-    this.parser_module.debug_mode = exports.debug_mode;
-
-    // return_buffers sends back Buffers from parser to callback. detect_buffers sends back Buffers from parser, but
-    // converts to Strings if the input arguments are not Buffers.
-    this.reply_parser = new this.parser_module.Parser({
-        return_buffers: self.options.return_buffers || self.options.detect_buffers || false
-    });
-
-    // "reply error" is an error sent back by Redis
-    this.reply_parser.on("reply error", function (reply) {
-        self.return_error(new Error(reply));
-    });
-    this.reply_parser.on("reply", function (reply) {
-        self.return_reply(reply);
-    });
-    // "error" is bad.  Somehow the parser got confused.  It'll try to reset and continue.
-    this.reply_parser.on("error", function (err) {
-        self.emit("error", new Error("Redis reply parser error: " + err.stack));
-    });
-};
-
-RedisClient.prototype.on_ready = function () {
-    var self = this;
-
-    this.ready = true;
-
-    if (this.old_state !== null) {
-        this.monitoring = this.old_state.monitoring;
-        this.pub_sub_mode = this.old_state.pub_sub_mode;
-        this.selected_db = this.old_state.selected_db;
-        this.old_state = null;
-    }
-
-    // magically restore any modal commands from a previous connection
-    if (this.selected_db !== null) {
-        this.send_command('select', [this.selected_db]);
-    }
-    if (this.pub_sub_mode === true) {
-        // only emit "ready" when all subscriptions were made again
-        var callback_count = 0;
-        var callback = function() {
-            callback_count--;
-            if (callback_count == 0) {
-                self.emit("ready");
-            }
-        }
-        Object.keys(this.subscription_set).forEach(function (key) {
-            var parts = key.split(" ");
-            if (exports.debug_mode) {
-                console.warn("sending pub/sub on_ready " + parts[0] + ", " + parts[1]);
-            }
-            callback_count++;
-            self.send_command(parts[0] + "scribe", [parts[1]], callback);
-        });
-        return;
-    } else if (this.monitoring) {
-        this.send_command("monitor");
-    } else {
-        this.send_offline_queue();
-    }
-    this.emit("ready");
-};
-
-RedisClient.prototype.on_info_cmd = function (err, res) {
-    var self = this, obj = {}, lines, retry_time;
-
-    if (err) {
-        return self.emit("error", new Error("Ready check failed: " + err.message));
-    }
-
-    lines = res.toString().split("\r\n");
-
-    lines.forEach(function (line) {
-        var parts = line.split(':');
-        if (parts[1]) {
-            obj[parts[0]] = parts[1];
-        }
-    });
-
-    obj.versions = [];
-    obj.redis_version.split('.').forEach(function (num) {
-        obj.versions.push(+num);
-    });
-
-    // expose info key/vals to users
-    this.server_info = obj;
-
-    if (!obj.loading || (obj.loading && obj.loading === "0")) {
-        if (exports.debug_mode) {
-            console.log("Redis server ready.");
-        }
-        this.on_ready();
-    } else {
-        retry_time = obj.loading_eta_seconds * 1000;
-        if (retry_time > 1000) {
-            retry_time = 1000;
-        }
-        if (exports.debug_mode) {
-            console.log("Redis server still loading, trying again in " + retry_time);
-        }
-        setTimeout(function () {
-            self.ready_check();
-        }, retry_time);
-    }
-};
-
-RedisClient.prototype.ready_check = function () {
-    var self = this;
-
-    if (exports.debug_mode) {
-        console.log("checking server ready state...");
-    }
-
-    this.send_anyway = true;  // secret flag to send_command to send something even if not "ready"
-    this.info(function (err, res) {
-        self.on_info_cmd(err, res);
-    });
-    this.send_anyway = false;
-};
-
-RedisClient.prototype.send_offline_queue = function () {
-    var command_obj, buffered_writes = 0;
-
-    while (this.offline_queue.length > 0) {
-        command_obj = this.offline_queue.shift();
-        if (exports.debug_mode) {
-            console.log("Sending offline command: " + command_obj.command);
-        }
-        buffered_writes += !this.send_command(command_obj.command, command_obj.args, command_obj.callback);
-    }
-    this.offline_queue = new Queue();
-    // Even though items were shifted off, Queue backing store still uses memory until next add, so just get a new Queue
-
-    if (!buffered_writes) {
-        this.should_buffer = false;
-        this.emit("drain");
-    }
-};
-
-RedisClient.prototype.connection_gone = function (why) {
-    var self = this, message;
-
-    // If a retry is already in progress, just let that happen
-    if (this.retry_timer) {
-        return;
-    }
-
-    if (exports.debug_mode) {
-        console.warn("Redis connection is gone from " + why + " event.");
-    }
-    this.connected = false;
-    this.ready = false;
-
-    if (this.old_state === null) {
-        var state = {
-            monitoring: this.monitoring,
-            pub_sub_mode: this.pub_sub_mode,
-            selected_db: this.selected_db
-        };
-        this.old_state = state;
-        this.monitoring = false;
-        this.pub_sub_mode = false;
-        this.selected_db = null;
-    }
-
-    // since we are collapsing end and close, users don't expect to be called twice
-    if (! this.emitted_end) {
-        this.emit("end");
-        this.emitted_end = true;
-    }
-
-    this.flush_and_error("Redis connection gone from " + why + " event.");
-
-    // If this is a requested shutdown, then don't retry
-    if (this.closing) {
-        this.retry_timer = null;
-        if (exports.debug_mode) {
-            console.warn("connection ended from quit command, not retrying.");
-        }
-        return;
-    }
-
-    this.retry_delay = Math.floor(this.retry_delay * this.retry_backoff);
-
-    if (exports.debug_mode) {
-        console.log("Retry connection in " + this.current_retry_delay + " ms");
-    }
-
-    if (this.max_attempts && this.attempts >= this.max_attempts) {
-        this.retry_timer = null;
-        // TODO - some people need a "Redis is Broken mode" for future commands that errors immediately, and others
-        // want the program to exit.  Right now, we just log, which doesn't really help in either case.
-        console.error("node_redis: Couldn't get Redis connection after " + this.max_attempts + " attempts.");
-        return;
-    }
-
-    this.attempts += 1;
-    this.emit("reconnecting", {
-        delay: self.retry_delay,
-        attempt: self.attempts
-    });
-    this.retry_timer = setTimeout(function () {
-        if (exports.debug_mode) {
-            console.log("Retrying connection...");
-        }
-
-        self.retry_totaltime += self.current_retry_delay;
-
-        if (self.connect_timeout && self.retry_totaltime >= self.connect_timeout) {
-            self.retry_timer = null;
-            // TODO - engage Redis is Broken mode for future commands, or whatever
-            console.error("node_redis: Couldn't get Redis connection after " + self.retry_totaltime + "ms.");
-            return;
-        }
-
-        self.stream.connect(self.port, self.host);
-        self.retry_timer = null;
-    }, this.retry_delay);
-};
-
-RedisClient.prototype.on_data = function (data) {
-    if (exports.debug_mode) {
-        console.log("net read " + this.host + ":" + this.port + " id " + this.connection_id + ": " + data.toString());
-    }
-
-    try {
-        this.reply_parser.execute(data);
-    } catch (err) {
-        // This is an unexpected parser problem, an exception that came from the parser code itself.
-        // Parser should emit "error" events if it notices things are out of whack.
-        // Callbacks that throw exceptions will land in return_reply(), below.
-        // TODO - it might be nice to have a different "error" event for different types of errors
-        this.emit("error", err);
-    }
-};
-
-RedisClient.prototype.return_error = function (err) {
-    var command_obj = this.command_queue.shift(), queue_len = this.command_queue.getLength();
-
-    if (this.pub_sub_mode === false && queue_len === 0) {
-        this.emit("idle");
-        this.command_queue = new Queue();
-    }
-    if (this.should_buffer && queue_len <= this.command_queue_low_water) {
-        this.emit("drain");
-        this.should_buffer = false;
-    }
-
-    if (command_obj && typeof command_obj.callback === "function") {
-        try {
-            command_obj.callback(err);
-        } catch (callback_err) {
-            // if a callback throws an exception, re-throw it on a new stack so the parser can keep going
-            process.nextTick(function () {
-                throw callback_err;
-            });
-        }
-    } else {
-        console.log("node_redis: no callback to send error: " + err.message);
-        // this will probably not make it anywhere useful, but we might as well throw
-        process.nextTick(function () {
-            throw err;
-        });
-    }
-};
-
-// if a callback throws an exception, re-throw it on a new stack so the parser can keep going.
-// put this try/catch in its own function because V8 doesn't optimize this well yet.
-function try_callback(callback, reply) {
-    try {
-        callback(null, reply);
-    } catch (err) {
-        process.nextTick(function () {
-            throw err;
-        });
-    }
-}
-
-// hgetall converts its replies to an Object.  If the reply is empty, null is returned.
-function reply_to_object(reply) {
-    var obj = {}, j, jl, key, val;
-
-    if (reply.length === 0) {
-        return null;
-    }
-
-    for (j = 0, jl = reply.length; j < jl; j += 2) {
-        key = reply[j].toString();
-        val = reply[j + 1];
-        obj[key] = val;
-    }
-
-    return obj;
-}
-
-function reply_to_strings(reply) {
-    var i;
-
-    if (Buffer.isBuffer(reply)) {
-        return reply.toString();
-    }
-
-    if (Array.isArray(reply)) {
-        for (i = 0; i < reply.length; i++) {
-            reply[i] = reply[i].toString();
-        }
-        return reply;
-    }
-
-    return reply;
-}
-
-RedisClient.prototype.return_reply = function (reply) {
-    var command_obj, obj, i, len, type, timestamp, argindex, args, queue_len;
-
-    command_obj = this.command_queue.shift(),
-    queue_len   = this.command_queue.getLength();
-
-    if (this.pub_sub_mode === false && queue_len === 0) {
-        this.emit("idle");
-        this.command_queue = new Queue();  // explicitly reclaim storage from old Queue
-    }
-    if (this.should_buffer && queue_len <= this.command_queue_low_water) {
-        this.emit("drain");
-        this.should_buffer = false;
-    }
-
-    if (command_obj && !command_obj.sub_command) {
-        if (typeof command_obj.callback === "function") {
-            if (this.options.detect_buffers && command_obj.buffer_args === false) {
-                // If detect_buffers option was specified, then the reply from the parser will be Buffers.
-                // If this command did not use Buffer arguments, then convert the reply to Strings here.
-                reply = reply_to_strings(reply);
-            }
-
-            // TODO - confusing and error-prone that hgetall is special cased in two places
-            if (reply && 'hgetall' === command_obj.command.toLowerCase()) {
-                reply = reply_to_object(reply);
-            }
-
-            try_callback(command_obj.callback, reply);
-        } else if (exports.debug_mode) {
-            console.log("no callback for reply: " + (reply && reply.toString && reply.toString()));
-        }
-    } else if (this.pub_sub_mode || (command_obj && command_obj.sub_command)) {
-        if (Array.isArray(reply)) {
-            type = reply[0].toString();
-
-            if (type === "message") {
-                this.emit("message", reply[1].toString(), reply[2]); // channel, message
-            } else if (type === "pmessage") {
-                this.emit("pmessage", reply[1].toString(), reply[2].toString(), reply[3]); // pattern, channel, message
-            } else if (type === "subscribe" || type === "unsubscribe" || type === "psubscribe" || type === "punsubscribe") {
-                if (reply[2] === 0) {
-                    this.pub_sub_mode = false;
-                    if (this.debug_mode) {
-                        console.log("All subscriptions removed, exiting pub/sub mode");
-                    }
-                } else {
-                    this.pub_sub_mode = true;
-                }
-                // subscribe commands take an optional callback and also emit an event, but only the first response is included in the callback
-                // TODO - document this or fix it so it works in a more obvious way
-                if (command_obj && typeof command_obj.callback === "function") {
-                    try_callback(command_obj.callback, reply[1].toString());
-                }
-                this.emit(type, reply[1].toString(), reply[2]); // channel, count
-            } else {
-                throw new Error("subscriptions are active but got unknown reply type " + type);
-            }
-        } else if (! this.closing) {
-            throw new Error("subscriptions are active but got an invalid reply: " + reply);
-        }
-    } else if (this.monitoring) {
-        len = reply.indexOf(" ");
-        timestamp = reply.slice(0, len);
-        argindex = reply.indexOf('"');
-        args = reply.slice(argindex + 1, -1).split('" "').map(function (elem) {
-            return elem.replace(/\\"/g, '"');
-        });
-        this.emit("monitor", timestamp, args);
-    } else {
-        throw new Error("node_redis command queue state error. If you can reproduce this, please report it.");
-    }
-};
-
-// This Command constructor is ever so slightly faster than using an object literal, but more importantly, using
-// a named constructor helps it show up meaningfully in the V8 CPU profiler and in heap snapshots.
-function Command(command, args, sub_command, buffer_args, callback) {
-    this.command = command;
-    this.args = args;
-    this.sub_command = sub_command;
-    this.buffer_args = buffer_args;
-    this.callback = callback;
-}
-
-RedisClient.prototype.send_command = function (command, args, callback) {
-    var arg, this_args, command_obj, i, il, elem_count, buffer_args, stream = this.stream, command_str = "", buffered_writes = 0, last_arg_type;
-
-    if (typeof command !== "string") {
-        throw new Error("First argument to send_command must be the command name string, not " + typeof command);
-    }
-
-    if (Array.isArray(args)) {
-        if (typeof callback === "function") {
-            // probably the fastest way:
-            //     client.command([arg1, arg2], cb);  (straight passthrough)
-            //         send_command(command, [arg1, arg2], cb);
-        } else if (! callback) {
-            // most people find this variable argument length form more convenient, but it uses arguments, which is slower
-            //     client.command(arg1, arg2, cb);   (wraps up arguments into an array)
-            //       send_command(command, [arg1, arg2, cb]);
-            //     client.command(arg1, arg2);   (callback is optional)
-            //       send_command(command, [arg1, arg2]);
-            //     client.command(arg1, arg2, undefined);   (callback is undefined)
-            //       send_command(command, [arg1, arg2, undefined]);
-            last_arg_type = typeof args[args.length - 1];
-            if (last_arg_type === "function" || last_arg_type === "undefined") {
-                callback = args.pop();
-            }
-        } else {
-            throw new Error("send_command: last argument must be a callback or undefined");
-        }
-    } else {
-        throw new Error("send_command: second argument must be an array");
-    }
-
-    // if the last argument is an array and command is sadd, expand it out:
-    //     client.sadd(arg1, [arg2, arg3, arg4], cb);
-    //  converts to:
-    //     client.sadd(arg1, arg2, arg3, arg4, cb);
-    if ((command === 'sadd' || command === 'SADD') && args.length > 0 && Array.isArray(args[args.length - 1])) {
-        args = args.slice(0, -1).concat(args[args.length - 1]);
-    }
-
-    buffer_args = false;
-    for (i = 0, il = args.length, arg; i < il; i += 1) {
-        if (Buffer.isBuffer(args[i])) {
-            buffer_args = true;
-        }
-    }
-
-    command_obj = new Command(command, args, false, buffer_args, callback);
-
-    if ((!this.ready && !this.send_anyway) || !stream.writable) {
-        if (exports.debug_mode) {
-            if (!stream.writable) {
-                console.log("send command: stream is not writeable.");
-            }
-        }
-
-        if (this.enable_offline_queue) {
-            if (exports.debug_mode) {
-                console.log("Queueing " + command + " for next server connection.");
-            }
-            this.offline_queue.push(command_obj);
-            this.should_buffer = true;
-        } else {
-            var not_writeable_error = new Error('send_command: stream not writeable. enable_offline_queue is false');
-            if (command_obj.callback) {
-                command_obj.callback(not_writeable_error);
-            } else {
-                throw not_writeable_error;
-            }
-        }
-
-        return false;
-    }
-
-    if (command === "subscribe" || command === "psubscribe" || command === "unsubscribe" || command === "punsubscribe") {
-        this.pub_sub_command(command_obj);
-    } else if (command === "monitor") {
-        this.monitoring = true;
-    } else if (command === "quit") {
-        this.closing = true;
-    } else if (this.pub_sub_mode === true) {
-        throw new Error("Connection in pub/sub mode, only pub/sub commands may be used");
-    }
-    this.command_queue.push(command_obj);
-    this.commands_sent += 1;
-
-    elem_count = args.length + 1;
-
-    // Always use "Multi bulk commands", but if passed any Buffer args, then do multiple writes, one for each arg.
-    // This means that using Buffers in commands is going to be slower, so use Strings if you don't already have a Buffer.
-
-    command_str = "*" + elem_count + "\r\n$" + command.length + "\r\n" + command + "\r\n";
-
-    if (! buffer_args) { // Build up a string and send entire command in one write
-        for (i = 0, il = args.length, arg; i < il; i += 1) {
-            arg = args[i];
-            if (typeof arg !== "string") {
-                arg = String(arg);
-            }
-            command_str += "$" + Buffer.byteLength(arg) + "\r\n" + arg + "\r\n";
-        }
-        if (exports.debug_mode) {
-            console.log("send " + this.host + ":" + this.port + " id " + this.connection_id + ": " + command_str);
-        }
-        buffered_writes += !stream.write(command_str);
-    } else {
-        if (exports.debug_mode) {
-            console.log("send command (" + command_str + ") has Buffer arguments");
-        }
-        buffered_writes += !stream.write(command_str);
-
-        for (i = 0, il = args.length, arg; i < il; i += 1) {
-            arg = args[i];
-            if (!(Buffer.isBuffer(arg) || arg instanceof String)) {
-                arg = String(arg);
-            }
-
-            if (Buffer.isBuffer(arg)) {
-                if (arg.length === 0) {
-                    if (exports.debug_mode) {
-                        console.log("send_command: using empty string for 0 length buffer");
-                    }
-                    buffered_writes += !stream.write("$0\r\n\r\n");
-                } else {
-                    buffered_writes += !stream.write("$" + arg.length + "\r\n");
-                    buffered_writes += !stream.write(arg);
-                    buffered_writes += !stream.write("\r\n");
-                    if (exports.debug_mode) {
-                        console.log("send_command: buffer send " + arg.length + " bytes");
-                    }
-                }
-            } else {
-                if (exports.debug_mode) {
-                    console.log("send_command: string send " + Buffer.byteLength(arg) + " bytes: " + arg);
-                }
-                buffered_writes += !stream.write("$" + Buffer.byteLength(arg) + "\r\n" + arg + "\r\n");
-            }
-        }
-    }
-    if (exports.debug_mode) {
-        console.log("send_command buffered_writes: " + buffered_writes, " should_buffer: " + this.should_buffer);
-    }
-    if (buffered_writes || this.command_queue.getLength() >= this.command_queue_high_water) {
-        this.should_buffer = true;
-    }
-    return !this.should_buffer;
-};
-
-RedisClient.prototype.pub_sub_command = function (command_obj) {
-    var i, key, command, args;
-
-    if (this.pub_sub_mode === false && exports.debug_mode) {
-        console.log("Entering pub/sub mode from " + command_obj.command);
-    }
-    this.pub_sub_mode = true;
-    command_obj.sub_command = true;
-
-    command = command_obj.command;
-    args = command_obj.args;
-    if (command === "subscribe" || command === "psubscribe") {
-        if (command === "subscribe") {
-            key = "sub";
-        } else {
-            key = "psub";
-        }
-        for (i = 0; i < args.length; i++) {
-            this.subscription_set[key + " " + args[i]] = true;
-        }
-    } else {
-        if (command === "unsubscribe") {
-            key = "sub";
-        } else {
-            key = "psub";
-        }
-        for (i = 0; i < args.length; i++) {
-            delete this.subscription_set[key + " " + args[i]];
-        }
-    }
-};
-
-RedisClient.prototype.end = function () {
-    this.stream._events = {};
-    this.connected = false;
-    this.ready = false;
-    return this.stream.end();
-};
-
-function Multi(client, args) {
-    this.client = client;
-    this.queue = [["MULTI"]];
-    if (Array.isArray(args)) {
-        this.queue = this.queue.concat(args);
-    }
-}
-
-exports.Multi = Multi;
-
-// take 2 arrays and return the union of their elements
-function set_union(seta, setb) {
-    var obj = {};
-
-    seta.forEach(function (val) {
-        obj[val] = true;
-    });
-    setb.forEach(function (val) {
-        obj[val] = true;
-    });
-    return Object.keys(obj);
-}
-
-// This static list of commands is updated from time to time.  ./lib/commands.js can be updated with generate_commands.js
-commands = set_union(["get", "set", "setnx", "setex", "append", "strlen", "del", "exists", "setbit", "getbit", "setrange", "getrange", "substr",
-    "incr", "decr", "mget", "rpush", "lpush", "rpushx", "lpushx", "linsert", "rpop", "lpop", "brpop", "brpoplpush", "blpop", "llen", "lindex",
-    "lset", "lrange", "ltrim", "lrem", "rpoplpush", "sadd", "srem", "smove", "sismember", "scard", "spop", "srandmember", "sinter", "sinterstore",
-    "sunion", "sunionstore", "sdiff", "sdiffstore", "smembers", "zadd", "zincrby", "zrem", "zremrangebyscore", "zremrangebyrank", "zunionstore",
-    "zinterstore", "zrange", "zrangebyscore", "zrevrangebyscore", "zcount", "zrevrange", "zcard", "zscore", "zrank", "zrevrank", "hset", "hsetnx",
-    "hget", "hmset", "hmget", "hincrby", "hdel", "hlen", "hkeys", "hvals", "hgetall", "hexists", "incrby", "decrby", "getset", "mset", "msetnx",
-    "randomkey", "select", "move", "rename", "renamenx", "expire", "expireat", "keys", "dbsize", "auth", "ping", "echo", "save", "bgsave",
-    "bgrewriteaof", "shutdown", "lastsave", "type", "multi", "exec", "discard", "sync", "flushdb", "flushall", "sort", "info", "monitor", "ttl",
-    "persist", "slaveof", "debug", "config", "subscribe", "unsubscribe", "psubscribe", "punsubscribe", "publish", "watch", "unwatch", "cluster",
-    "restore", "migrate", "dump", "object", "client", "eval", "evalsha"], require("./lib/commands"));
-
-commands.forEach(function (command) {
-    RedisClient.prototype[command] = function (args, callback) {
-        if (Array.isArray(args) && typeof callback === "function") {
-            return this.send_command(command, args, callback);
-        } else {
-            return this.send_command(command, to_array(arguments));
-        }
-    };
-    RedisClient.prototype[command.toUpperCase()] = RedisClient.prototype[command];
-
-    Multi.prototype[command] = function () {
-        this.queue.push([command].concat(to_array(arguments)));
-        return this;
-    };
-    Multi.prototype[command.toUpperCase()] = Multi.prototype[command];
-});
-
-// store db in this.select_db to restore it on reconnect
-RedisClient.prototype.select = function (db, callback) {
-	var self = this;
-
-	this.send_command('select', [db], function (err, res) {
-        if (err === null) {
-            self.selected_db = db;
-        }
-        if (typeof(callback) === 'function') {
-            callback(err, res);
-        }
-    });
-};
-RedisClient.prototype.SELECT = RedisClient.prototype.select;
-
-// Stash auth for connect and reconnect.  Send immediately if already connected.
-RedisClient.prototype.auth = function () {
-    var args = to_array(arguments);
-    this.auth_pass = args[0];
-    this.auth_callback = args[1];
-    if (exports.debug_mode) {
-        console.log("Saving auth as " + this.auth_pass);
-    }
-
-    if (this.connected) {
-        this.send_command("auth", args);
-    }
-};
-RedisClient.prototype.AUTH = RedisClient.prototype.auth;
-
-RedisClient.prototype.hmget = function (arg1, arg2, arg3) {
-    if (Array.isArray(arg2) && typeof arg3 === "function") {
-        return this.send_command("hmget", [arg1].concat(arg2), arg3);
-    } else if (Array.isArray(arg1) && typeof arg2 === "function") {
-        return this.send_command("hmget", arg1, arg2);
-    } else {
-        return this.send_command("hmget", to_array(arguments));
-    }
-};
-RedisClient.prototype.HMGET = RedisClient.prototype.hmget;
-
-RedisClient.prototype.hmset = function (args, callback) {
-    var tmp_args, tmp_keys, i, il, key;
-
-    if (Array.isArray(args) && typeof callback === "function") {
-        return this.send_command("hmset", args, callback);
-    }
-
-    args = to_array(arguments);
-    if (typeof args[args.length - 1] === "function") {
-        callback = args[args.length - 1];
-        args.length -= 1;
-    } else {
-        callback = null;
-    }
-
-    if (args.length === 2 && typeof args[0] === "string" && typeof args[1] === "object") {
-        // User does: client.hmset(key, {key1: val1, key2: val2})
-        tmp_args = [ args[0] ];
-        tmp_keys = Object.keys(args[1]);
-        for (i = 0, il = tmp_keys.length; i < il ; i++) {
-            key = tmp_keys[i];
-            tmp_args.push(key);
-            if (typeof args[1][key] !== "string") {
-                var err = new Error("hmset expected value to be a string", key, ":", args[1][key]);
-                if (callback) return callback(err);
-                else throw err;
-            }
-            tmp_args.push(args[1][key]);
-        }
-        args = tmp_args;
-    }
-
-    return this.send_command("hmset", args, callback);
-};
-RedisClient.prototype.HMSET = RedisClient.prototype.hmset;
-
-Multi.prototype.hmset = function () {
-    var args = to_array(arguments), tmp_args;
-    if (args.length >= 2 && typeof args[0] === "string" && typeof args[1] === "object") {
-        tmp_args = [ "hmset", args[0] ];
-        Object.keys(args[1]).map(function (key) {
-            tmp_args.push(key);
-            tmp_args.push(args[1][key]);
-        });
-        if (args[2]) {
-            tmp_args.push(args[2]);
-        }
-        args = tmp_args;
-    } else {
-        args.unshift("hmset");
-    }
-
-    this.queue.push(args);
-    return this;
-};
-Multi.prototype.HMSET = Multi.prototype.hmset;
-
-Multi.prototype.exec = function (callback) {
-    var self = this;
-
-    // drain queue, callback will catch "QUEUED" or error
-    // TODO - get rid of all of these anonymous functions which are elegant but slow
-    this.queue.forEach(function (args, index) {
-        var command = args[0], obj;
-        if (typeof args[args.length - 1] === "function") {
-            args = args.slice(1, -1);
-        } else {
-            args = args.slice(1);
-        }
-        if (args.length === 1 && Array.isArray(args[0])) {
-            args = args[0];
-        }
-        if (command.toLowerCase() === 'hmset' && typeof args[1] === 'object') {
-            obj = args.pop();
-            Object.keys(obj).forEach(function (key) {
-                args.push(key);
-                args.push(obj[key]);
-            });
-        }
-        this.client.send_command(command, args, function (err, reply) {
-            if (err) {
-                var cur = self.queue[index];
-                if (typeof cur[cur.length - 1] === "function") {
-                    cur[cur.length - 1](err);
-                } else {
-                    throw new Error(err);
-                }
-                self.queue.splice(index, 1);
-            }
-        });
-    }, this);
-
-    // TODO - make this callback part of Multi.prototype instead of creating it each time
-    return this.client.send_command("EXEC", [], function (err, replies) {
-        if (err) {
-            if (callback) {
-                callback(new Error(err));
-                return;
-            } else {
-                throw new Error(err);
-            }
-        }
-
-        var i, il, j, jl, reply, args;
-
-        if (replies) {
-            for (i = 1, il = self.queue.length; i < il; i += 1) {
-                reply = replies[i - 1];
-                args = self.queue[i];
-
-                // TODO - confusing and error-prone that hgetall is special cased in two places
-                if (reply && args[0].toLowerCase() === "hgetall") {
-                    replies[i - 1] = reply = reply_to_object(reply);
-                }
-
-                if (typeof args[args.length - 1] === "function") {
-                    args[args.length - 1](null, reply);
-                }
-            }
-        }
-
-        if (callback) {
-            callback(null, replies);
-        }
-    });
-};
-Multi.prototype.EXEC = Multi.prototype.exec;
-
-RedisClient.prototype.multi = function (args) {
-    return new Multi(this, args);
-};
-RedisClient.prototype.MULTI = function (args) {
-    return new Multi(this, args);
-};
-
-
-// stash original eval method
-var eval = RedisClient.prototype.eval;
-// hook eval with an attempt to evalsha for cached scripts
-RedisClient.prototype.eval =
-RedisClient.prototype.EVAL = function () {
-    var self = this,
-        args = to_array(arguments),
-        callback;
-
-    if (typeof args[args.length - 1] === "function") {
-        callback = args.pop();
-    }
-
-    // replace script source with sha value
-    var source = args[0];
-    args[0] = crypto.createHash("sha1").update(source).digest("hex");
-
-    self.evalsha(args, function (err, reply) {
-        if (err && /NOSCRIPT/.test(err.message)) {
-            args[0] = source;
-            eval.call(self, args, callback);
-
-        } else if (callback) {
-            callback(err, reply);
-        }
-    });
-};
-
-
-exports.createClient = function (port_arg, host_arg, options) {
-    var port = port_arg || default_port,
-        host = host_arg || default_host,
-        redis_client, net_client;
-
-    net_client = net.createConnection(port, host);
-
-    redis_client = new RedisClient(net_client, options);
-
-    redis_client.port = port;
-    redis_client.host = host;
-
-    return redis_client;
-};
-
-exports.print = function (err, reply) {
-    if (err) {
-        console.log("Error: " + err);
-    } else {
-        console.log("Reply: " + reply);
-    }
-};

+ 0 - 147
app/node_modules/socket.io/node_modules/redis/lib/commands.js

@@ -1,147 +0,0 @@
-// This file was generated by ./generate_commands.js on Mon Aug 06 2012 15:04:06 GMT-0700 (PDT)
-module.exports = [
-    "append",
-    "auth",
-    "bgrewriteaof",
-    "bgsave",
-    "bitcount",
-    "bitop",
-    "blpop",
-    "brpop",
-    "brpoplpush",
-    "client kill",
-    "client list",
-    "config get",
-    "config set",
-    "config resetstat",
-    "dbsize",
-    "debug object",
-    "debug segfault",
-    "decr",
-    "decrby",
-    "del",
-    "discard",
-    "dump",
-    "echo",
-    "eval",
-    "evalsha",
-    "exec",
-    "exists",
-    "expire",
-    "expireat",
-    "flushall",
-    "flushdb",
-    "get",
-    "getbit",
-    "getrange",
-    "getset",
-    "hdel",
-    "hexists",
-    "hget",
-    "hgetall",
-    "hincrby",
-    "hincrbyfloat",
-    "hkeys",
-    "hlen",
-    "hmget",
-    "hmset",
-    "hset",
-    "hsetnx",
-    "hvals",
-    "incr",
-    "incrby",
-    "incrbyfloat",
-    "info",
-    "keys",
-    "lastsave",
-    "lindex",
-    "linsert",
-    "llen",
-    "lpop",
-    "lpush",
-    "lpushx",
-    "lrange",
-    "lrem",
-    "lset",
-    "ltrim",
-    "mget",
-    "migrate",
-    "monitor",
-    "move",
-    "mset",
-    "msetnx",
-    "multi",
-    "object",
-    "persist",
-    "pexpire",
-    "pexpireat",
-    "ping",
-    "psetex",
-    "psubscribe",
-    "pttl",
-    "publish",
-    "punsubscribe",
-    "quit",
-    "randomkey",
-    "rename",
-    "renamenx",
-    "restore",
-    "rpop",
-    "rpoplpush",
-    "rpush",
-    "rpushx",
-    "sadd",
-    "save",
-    "scard",
-    "script exists",
-    "script flush",
-    "script kill",
-    "script load",
-    "sdiff",
-    "sdiffstore",
-    "select",
-    "set",
-    "setbit",
-    "setex",
-    "setnx",
-    "setrange",
-    "shutdown",
-    "sinter",
-    "sinterstore",
-    "sismember",
-    "slaveof",
-    "slowlog",
-    "smembers",
-    "smove",
-    "sort",
-    "spop",
-    "srandmember",
-    "srem",
-    "strlen",
-    "subscribe",
-    "sunion",
-    "sunionstore",
-    "sync",
-    "time",
-    "ttl",
-    "type",
-    "unsubscribe",
-    "unwatch",
-    "watch",
-    "zadd",
-    "zcard",
-    "zcount",
-    "zincrby",
-    "zinterstore",
-    "zrange",
-    "zrangebyscore",
-    "zrank",
-    "zrem",
-    "zremrangebyrank",
-    "zremrangebyscore",
-    "zrevrange",
-    "zrevrangebyscore",
-    "zrevrank",
-    "zscore",
-    "zunionstore"
-];

+ 0 - 46
app/node_modules/socket.io/node_modules/redis/lib/parser/hiredis.js

@@ -1,46 +0,0 @@
-/*global Buffer require exports console setTimeout */
-
-var events = require("events"),
-    util = require("../util"),
-    hiredis = require("hiredis");
-
-exports.debug_mode = false;
-exports.name = "hiredis";
-
-function HiredisReplyParser(options) {
-    this.name = exports.name;
-    this.options = options || {};
-    this.reset();
-    events.EventEmitter.call(this);
-}
-
-util.inherits(HiredisReplyParser, events.EventEmitter);
-
-exports.Parser = HiredisReplyParser;
-
-HiredisReplyParser.prototype.reset = function () {
-    this.reader = new hiredis.Reader({
-        return_buffers: this.options.return_buffers || false
-    });
-};
-
-HiredisReplyParser.prototype.execute = function (data) {
-    var reply;
-    this.reader.feed(data);
-    while (true) {
-        try {
-          reply = this.reader.get();
-        } catch (err) {
-          this.emit("error", err);
-          break;
-        }
-
-        if (reply === undefined) break;
-
-        if (reply && reply.constructor === Error) {
-            this.emit("reply error", reply);
-        } else {
-            this.emit("reply", reply);
-        }
-    }
-};

+ 0 - 317
app/node_modules/socket.io/node_modules/redis/lib/parser/javascript.js

@@ -1,317 +0,0 @@
-/*global Buffer require exports console setTimeout */
-
-// TODO - incorporate these V8 pro tips:
-//    pre-allocate Arrays if length is known in advance
-//    do not use delete
-//    use numbers for parser state
-
-var events = require("events"),
-    util = require("../util");
-
-exports.debug_mode = false;
-exports.name = "javascript";
-
-function RedisReplyParser(options) {
-    this.name = exports.name;
-    this.options = options || {};
-    this.reset();
-    events.EventEmitter.call(this);
-}
-
-util.inherits(RedisReplyParser, events.EventEmitter);
-
-exports.Parser = RedisReplyParser;
-
-// Buffer.toString() is quite slow for small strings
-function small_toString(buf, len) {
-    var tmp = "", i;
-
-    for (i = 0; i < len; i += 1) {
-        tmp += String.fromCharCode(buf[i]);
-    }
-
-    return tmp;
-}
-
-// Reset parser to it's original state.
-RedisReplyParser.prototype.reset = function () {
-    this.return_buffer = new Buffer(16384); // for holding replies, might grow
-    this.return_string = "";
-    this.tmp_string = ""; // for holding size fields
-
-    this.multi_bulk_length = 0;
-    this.multi_bulk_replies = null;
-    this.multi_bulk_pos = 0;
-    this.multi_bulk_nested_length = 0;
-    this.multi_bulk_nested_replies = null;
-
-    this.states = {
-        TYPE: 1,
-        SINGLE_LINE: 2,
-        MULTI_BULK_COUNT: 3,
-        INTEGER_LINE: 4,
-        BULK_LENGTH: 5,
-        ERROR_LINE: 6,
-        BULK_DATA: 7,
-        UNKNOWN_TYPE: 8,
-        FINAL_CR: 9,
-        FINAL_LF: 10,
-        MULTI_BULK_COUNT_LF: 11,
-        BULK_LF: 12
-    };
-    
-    this.state = this.states.TYPE;
-};
-
-RedisReplyParser.prototype.parser_error = function (message) {
-    this.emit("error", message);
-    this.reset();
-};
-
-RedisReplyParser.prototype.execute = function (incoming_buf) {
-    var pos = 0, bd_tmp, bd_str, i, il, states = this.states;
-    //, state_times = {}, start_execute = new Date(), start_switch, end_switch, old_state;
-    //start_switch = new Date();
-
-    while (pos < incoming_buf.length) {
-        // old_state = this.state;
-        // console.log("execute: " + this.state + ", " + pos + "/" + incoming_buf.length + ", " + String.fromCharCode(incoming_buf[pos]));
-
-        switch (this.state) {
-        case 1: // states.TYPE
-            this.type = incoming_buf[pos];
-            pos += 1;
-
-            switch (this.type) {
-            case 43: // +
-                this.state = states.SINGLE_LINE;
-                this.return_buffer.end = 0;
-                this.return_string = "";
-                break;
-            case 42: // *
-                this.state = states.MULTI_BULK_COUNT;
-                this.tmp_string = "";
-                break;
-            case 58: // :
-                this.state = states.INTEGER_LINE;
-                this.return_buffer.end = 0;
-                this.return_string = "";
-                break;
-            case 36: // $
-                this.state = states.BULK_LENGTH;
-                this.tmp_string = "";
-                break;
-            case 45: // -
-                this.state = states.ERROR_LINE;
-                this.return_buffer.end = 0;
-                this.return_string = "";
-                break;
-            default:
-                this.state = states.UNKNOWN_TYPE;
-            }
-            break;
-        case 4: // states.INTEGER_LINE
-            if (incoming_buf[pos] === 13) {
-                this.send_reply(+small_toString(this.return_buffer, this.return_buffer.end));
-                this.state = states.FINAL_LF;
-            } else {
-                this.return_buffer[this.return_buffer.end] = incoming_buf[pos];
-                this.return_buffer.end += 1;
-            }
-            pos += 1;
-            break;
-        case 6: // states.ERROR_LINE
-            if (incoming_buf[pos] === 13) {
-                this.send_error(this.return_buffer.toString("ascii", 0, this.return_buffer.end));
-                this.state = states.FINAL_LF;
-            } else {
-                this.return_buffer[this.return_buffer.end] = incoming_buf[pos];
-                this.return_buffer.end += 1;
-            }
-            pos += 1;
-            break;
-        case 2: // states.SINGLE_LINE
-            if (incoming_buf[pos] === 13) {
-                this.send_reply(this.return_string);
-                this.state = states.FINAL_LF;
-            } else {
-                this.return_string += String.fromCharCode(incoming_buf[pos]);
-            }
-            pos += 1;
-            break;
-        case 3: // states.MULTI_BULK_COUNT
-            if (incoming_buf[pos] === 13) { // \r
-                this.state = states.MULTI_BULK_COUNT_LF;
-            } else {
-                this.tmp_string += String.fromCharCode(incoming_buf[pos]);
-            }
-            pos += 1;
-            break;
-        case 11: // states.MULTI_BULK_COUNT_LF
-            if (incoming_buf[pos] === 10) { // \n
-                if (this.multi_bulk_length) { // nested multi-bulk
-                    this.multi_bulk_nested_length = this.multi_bulk_length;
-                    this.multi_bulk_nested_replies = this.multi_bulk_replies;
-                    this.multi_bulk_nested_pos = this.multi_bulk_pos;
-                }
-                this.multi_bulk_length = +this.tmp_string;
-                this.multi_bulk_pos = 0;
-                this.state = states.TYPE;
-                if (this.multi_bulk_length < 0) {
-                    this.send_reply(null);
-                    this.multi_bulk_length = 0;
-                } else if (this.multi_bulk_length === 0) {
-                    this.multi_bulk_pos = 0;
-                    this.multi_bulk_replies = null;
-                    this.send_reply([]);
-                } else {
-                    this.multi_bulk_replies = new Array(this.multi_bulk_length);
-                }
-            } else {
-                this.parser_error(new Error("didn't see LF after NL reading multi bulk count"));
-                return;
-            }
-            pos += 1;
-            break;
-        case 5: // states.BULK_LENGTH
-            if (incoming_buf[pos] === 13) { // \r
-                this.state = states.BULK_LF;
-            } else {
-                this.tmp_string += String.fromCharCode(incoming_buf[pos]);
-            }
-            pos += 1;
-            break;
-        case 12: // states.BULK_LF
-            if (incoming_buf[pos] === 10) { // \n
-                this.bulk_length = +this.tmp_string;
-                if (this.bulk_length === -1) {
-                    this.send_reply(null);
-                    this.state = states.TYPE;
-                } else if (this.bulk_length === 0) {
-                    this.send_reply(new Buffer(""));
-                    this.state = states.FINAL_CR;
-                } else {
-                    this.state = states.BULK_DATA;
-                    if (this.bulk_length > this.return_buffer.length) {
-                        if (exports.debug_mode) {
-                            console.log("Growing return_buffer from " + this.return_buffer.length + " to " + this.bulk_length);
-                        }
-                        this.return_buffer = new Buffer(this.bulk_length);
-                    }
-                    this.return_buffer.end = 0;
-                }
-            } else {
-                this.parser_error(new Error("didn't see LF after NL while reading bulk length"));
-                return;
-            }
-            pos += 1;
-            break;
-        case 7: // states.BULK_DATA
-            this.return_buffer[this.return_buffer.end] = incoming_buf[pos];
-            this.return_buffer.end += 1;
-            pos += 1;
-            if (this.return_buffer.end === this.bulk_length) {
-                bd_tmp = new Buffer(this.bulk_length);
-                // When the response is small, Buffer.copy() is a lot slower.
-                if (this.bulk_length > 10) {
-                    this.return_buffer.copy(bd_tmp, 0, 0, this.bulk_length);
-                } else {
-                    for (i = 0, il = this.bulk_length; i < il; i += 1) {
-                        bd_tmp[i] = this.return_buffer[i];
-                    }
-                }
-                this.send_reply(bd_tmp);
-                this.state = states.FINAL_CR;
-            }
-            break;
-        case 9: // states.FINAL_CR
-            if (incoming_buf[pos] === 13) { // \r
-                this.state = states.FINAL_LF;
-                pos += 1;
-            } else {
-                this.parser_error(new Error("saw " + incoming_buf[pos] + " when expecting final CR"));
-                return;
-            }
-            break;
-        case 10: // states.FINAL_LF
-            if (incoming_buf[pos] === 10) { // \n
-                this.state = states.TYPE;
-                pos += 1;
-            } else {
-                this.parser_error(new Error("saw " + incoming_buf[pos] + " when expecting final LF"));
-                return;
-            }
-            break;
-        default:
-            this.parser_error(new Error("invalid state " + this.state));
-        }
-        // end_switch = new Date();
-        // if (state_times[old_state] === undefined) {
-        //     state_times[old_state] = 0;
-        // }
-        // state_times[old_state] += (end_switch - start_switch);
-        // start_switch = end_switch;
-    }
-    // console.log("execute ran for " + (Date.now() - start_execute) + " ms, on " + incoming_buf.length + " Bytes. ");
-    // Object.keys(state_times).forEach(function (state) {
-    //     console.log("    " + state + ": " + state_times[state]);
-    // });
-};
-
-RedisReplyParser.prototype.send_error = function (reply) {
-    if (this.multi_bulk_length > 0 || this.multi_bulk_nested_length > 0) {
-        // TODO - can this happen?  Seems like maybe not.
-        this.add_multi_bulk_reply(reply);
-    } else {
-        this.emit("reply error", reply);
-    }
-};
-
-RedisReplyParser.prototype.send_reply = function (reply) {
-    if (this.multi_bulk_length > 0 || this.multi_bulk_nested_length > 0) {
-        if (!this.options.return_buffers && Buffer.isBuffer(reply)) {
-            this.add_multi_bulk_reply(reply.toString("utf8"));
-        } else {
-            this.add_multi_bulk_reply(reply);
-        }
-    } else {
-        if (!this.options.return_buffers && Buffer.isBuffer(reply)) {
-            this.emit("reply", reply.toString("utf8"));
-        } else {
-            this.emit("reply", reply);
-        }
-    }
-};
-
-RedisReplyParser.prototype.add_multi_bulk_reply = function (reply) {
-    if (this.multi_bulk_replies) {
-        this.multi_bulk_replies[this.multi_bulk_pos] = reply;
-        this.multi_bulk_pos += 1;
-        if (this.multi_bulk_pos < this.multi_bulk_length) {
-            return;
-        }
-    } else {
-        this.multi_bulk_replies = reply;
-    }
-
-    if (this.multi_bulk_nested_length > 0) {
-        this.multi_bulk_nested_replies[this.multi_bulk_nested_pos] = this.multi_bulk_replies;
-        this.multi_bulk_nested_pos += 1;
-
-        this.multi_bulk_length = 0;
-        this.multi_bulk_replies = null;
-        this.multi_bulk_pos = 0;
-
-        if (this.multi_bulk_nested_length === this.multi_bulk_nested_pos) {
-            this.emit("reply", this.multi_bulk_nested_replies);
-            this.multi_bulk_nested_length = 0;
-            this.multi_bulk_nested_pos = 0;
-            this.multi_bulk_nested_replies = null;
-        }
-    } else {
-        this.emit("reply", this.multi_bulk_replies);
-        this.multi_bulk_length = 0;
-        this.multi_bulk_replies = null;
-        this.multi_bulk_pos = 0;
-    }
-};

+ 0 - 61
app/node_modules/socket.io/node_modules/redis/lib/queue.js

@@ -1,61 +0,0 @@
-var to_array = require("./to_array");
-
-// Queue class adapted from Tim Caswell's pattern library
-// http://github.com/creationix/pattern/blob/master/lib/pattern/queue.js
-
-function Queue() {
-    this.tail = [];
-    this.head = [];
-    this.offset = 0;
-}
-
-Queue.prototype.shift = function () {
-    if (this.offset === this.head.length) {
-        var tmp = this.head;
-        tmp.length = 0;
-        this.head = this.tail;
-        this.tail = tmp;
-        this.offset = 0;
-        if (this.head.length === 0) {
-            return;
-        }
-    }
-    return this.head[this.offset++]; // sorry, JSLint
-};
-
-Queue.prototype.push = function (item) {
-    return this.tail.push(item);
-};
-
-Queue.prototype.forEach = function (fn, thisv) {
-    var array = this.head.slice(this.offset), i, il;
-
-    array.push.apply(array, this.tail);
-
-    if (thisv) {
-        for (i = 0, il = array.length; i < il; i += 1) {
-            fn.call(thisv, array[i], i, array);
-        }
-    } else {
-        for (i = 0, il = array.length; i < il; i += 1) {
-            fn(array[i], i, array);
-        }
-    }
-
-    return array;
-};
-
-Queue.prototype.getLength = function () {
-    return this.head.length - this.offset + this.tail.length;
-};
-    
-Object.defineProperty(Queue.prototype, 'length', {
-    get: function () {
-        return this.getLength();
-    }
-});
-
-
-if(typeof module !== 'undefined' && module.exports) {
-  module.exports = Queue;
-}

+ 0 - 12
app/node_modules/socket.io/node_modules/redis/lib/to_array.js

@@ -1,12 +0,0 @@
-function to_array(args) {
-    var len = args.length,
-        arr = new Array(len), i;
-
-    for (i = 0; i < len; i += 1) {
-        arr[i] = args[i];
-    }
-
-    return arr;
-}
-
-module.exports = to_array;

+ 0 - 11
app/node_modules/socket.io/node_modules/redis/lib/util.js

@@ -1,11 +0,0 @@
-// Support for very old versions of node where the module was called "sys".  At some point, we should abandon this.
-
-var util;
-
-try {
-    util = require("util");
-} catch (err) {
-    util = require("sys");
-}
-
-module.exports = util;

+ 0 - 11
app/node_modules/socket.io/node_modules/redis/mem.js

@@ -1,11 +0,0 @@
-var client = require("redis").createClient();
-
-client.set("foo", "barvalskdjlksdjflkdsjflksdjdflkdsjflksdjflksdj", function (err, res) {
-    if (err) {
-        console.log("Got an error, please adapt somehow.");
-    } else {
-        console.log("Got a result: " + res);
-    }
-});
-
-client.quit();

+ 0 - 225
app/node_modules/socket.io/node_modules/redis/multi_bench.js

@@ -1,225 +0,0 @@
-var redis = require("./index"),
-    metrics = require("metrics"),
-    num_clients = parseInt(process.argv[2], 10) || 5,
-    num_requests = 20000,
-    tests = [],
-    versions_logged = false,
-    client_options = {
-        return_buffers: false
-    },
-    small_str, large_str, small_buf, large_buf;
-
-redis.debug_mode = false;
-
-function lpad(input, len, chr) {
-    var str = input.toString();
-    chr = chr || " ";
-
-    while (str.length < len) {
-        str = chr + str;
-    }
-    return str;
-}
-
-metrics.Histogram.prototype.print_line = function () {
-    var obj = this.printObj();
-    
-    return lpad(obj.min, 4) + "/" + lpad(obj.max, 4) + "/" + lpad(obj.mean.toFixed(2), 7) + "/" + lpad(obj.p95.toFixed(2), 7);
-};
-
-function Test(args) {
-    var self = this;
-
-    this.args = args;
-    
-    this.callback = null;
-    this.clients = [];
-    this.clients_ready = 0;
-    this.commands_sent = 0;
-    this.commands_completed = 0;
-    this.max_pipeline = this.args.pipeline || num_requests;
-    this.client_options = args.client_options || client_options;
-    
-    this.connect_latency = new metrics.Histogram();
-    this.ready_latency = new metrics.Histogram();
-    this.command_latency = new metrics.Histogram();
-}
-
-Test.prototype.run = function (callback) {
-    var self = this, i;
-
-    this.callback = callback;
-
-    for (i = 0; i < num_clients ; i++) {
-        this.new_client(i);
-    }
-};
-
-Test.prototype.new_client = function (id) {
-    var self = this, new_client;
-    
-    new_client = redis.createClient(6379, "127.0.0.1", this.client_options);
-    new_client.create_time = Date.now();
-
-    new_client.on("connect", function () {
-        self.connect_latency.update(Date.now() - new_client.create_time);
-    });
-
-    new_client.on("ready", function () {
-        if (! versions_logged) {
-            console.log("Client count: " + num_clients + ", node version: " + process.versions.node + ", server version: " +
-                new_client.server_info.redis_version + ", parser: " + new_client.reply_parser.name);
-            versions_logged = true;
-        }
-        self.ready_latency.update(Date.now() - new_client.create_time);
-        self.clients_ready++;
-        if (self.clients_ready === self.clients.length) {
-            self.on_clients_ready();
-        }
-    });
-
-    self.clients[id] = new_client;
-};
-
-Test.prototype.on_clients_ready = function () {
-    process.stdout.write(lpad(this.args.descr, 13) + ", " + lpad(this.args.pipeline, 5) + "/" + this.clients_ready + " ");
-    this.test_start = Date.now();
-
-    this.fill_pipeline();
-};
-
-Test.prototype.fill_pipeline = function () {
-    var pipeline = this.commands_sent - this.commands_completed;
-
-    while (this.commands_sent < num_requests && pipeline < this.max_pipeline) {
-        this.commands_sent++;
-        pipeline++;
-        this.send_next();
-    }
-    
-    if (this.commands_completed === num_requests) {
-        this.print_stats();
-        this.stop_clients();
-    }
-};
-
-Test.prototype.stop_clients = function () {
-    var self = this;
-    
-    this.clients.forEach(function (client, pos) {
-        if (pos === self.clients.length - 1) {
-            client.quit(function (err, res) {
-                self.callback();
-            });
-        } else {
-            client.quit();
-        }
-    });
-};
-
-Test.prototype.send_next = function () {
-    var self = this,
-        cur_client = this.commands_sent % this.clients.length,
-        command_num = this.commands_sent,
-        start = Date.now();
-
-    this.clients[cur_client][this.args.command](this.args.args, function (err, res) {
-        if (err) {
-            throw err;
-        }
-        self.commands_completed++;
-        self.command_latency.update(Date.now() - start);
-        self.fill_pipeline();
-    });
-};
-
-Test.prototype.print_stats = function () {
-    var duration = Date.now() - this.test_start;
-    
-    console.log("min/max/avg/p95: " + this.command_latency.print_line() + " " + lpad(duration, 6) + "ms total, " +
-        lpad((num_requests / (duration / 1000)).toFixed(2), 8) + " ops/sec");
-};
-
-small_str = "1234";
-small_buf = new Buffer(small_str);
-large_str = (new Array(4097).join("-"));
-large_buf = new Buffer(large_str);
-
-tests.push(new Test({descr: "PING", command: "ping", args: [], pipeline: 1}));
-tests.push(new Test({descr: "PING", command: "ping", args: [], pipeline: 50}));
-tests.push(new Test({descr: "PING", command: "ping", args: [], pipeline: 200}));
-tests.push(new Test({descr: "PING", command: "ping", args: [], pipeline: 20000}));
-
-tests.push(new Test({descr: "SET small str", command: "set", args: ["foo_rand000000000000", small_str], pipeline: 1}));
-tests.push(new Test({descr: "SET small str", command: "set", args: ["foo_rand000000000000", small_str], pipeline: 50}));
-tests.push(new Test({descr: "SET small str", command: "set", args: ["foo_rand000000000000", small_str], pipeline: 200}));
-tests.push(new Test({descr: "SET small str", command: "set", args: ["foo_rand000000000000", small_str], pipeline: 20000}));
-
-tests.push(new Test({descr: "SET small buf", command: "set", args: ["foo_rand000000000000", small_buf], pipeline: 1}));
-tests.push(new Test({descr: "SET small buf", command: "set", args: ["foo_rand000000000000", small_buf], pipeline: 50}));
-tests.push(new Test({descr: "SET small buf", command: "set", args: ["foo_rand000000000000", small_buf], pipeline: 200}));
-tests.push(new Test({descr: "SET small buf", command: "set", args: ["foo_rand000000000000", small_buf], pipeline: 20000}));
-
-tests.push(new Test({descr: "GET small str", command: "get", args: ["foo_rand000000000000"], pipeline: 1}));
-tests.push(new Test({descr: "GET small str", command: "get", args: ["foo_rand000000000000"], pipeline: 50}));
-tests.push(new Test({descr: "GET small str", command: "get", args: ["foo_rand000000000000"], pipeline: 200}));
-tests.push(new Test({descr: "GET small str", command: "get", args: ["foo_rand000000000000"], pipeline: 20000}));
-
-tests.push(new Test({descr: "GET small buf", command: "get", args: ["foo_rand000000000000"], pipeline: 1, client_opts: { return_buffers: true} }));
-tests.push(new Test({descr: "GET small buf", command: "get", args: ["foo_rand000000000000"], pipeline: 50, client_opts: { return_buffers: true} }));
-tests.push(new Test({descr: "GET small buf", command: "get", args: ["foo_rand000000000000"], pipeline: 200, client_opts: { return_buffers: true} }));
-tests.push(new Test({descr: "GET small buf", command: "get", args: ["foo_rand000000000000"], pipeline: 20000, client_opts: { return_buffers: true} }));
-
-tests.push(new Test({descr: "SET large str", command: "set", args: ["foo_rand000000000001", large_str], pipeline: 1}));
-tests.push(new Test({descr: "SET large str", command: "set", args: ["foo_rand000000000001", large_str], pipeline: 50}));
-tests.push(new Test({descr: "SET large str", command: "set", args: ["foo_rand000000000001", large_str], pipeline: 200}));
-tests.push(new Test({descr: "SET large str", command: "set", args: ["foo_rand000000000001", large_str], pipeline: 20000}));
-
-tests.push(new Test({descr: "SET large buf", command: "set", args: ["foo_rand000000000001", large_buf], pipeline: 1}));
-tests.push(new Test({descr: "SET large buf", command: "set", args: ["foo_rand000000000001", large_buf], pipeline: 50}));
-tests.push(new Test({descr: "SET large buf", command: "set", args: ["foo_rand000000000001", large_buf], pipeline: 200}));
-tests.push(new Test({descr: "SET large buf", command: "set", args: ["foo_rand000000000001", large_buf], pipeline: 20000}));
-
-tests.push(new Test({descr: "GET large str", command: "get", args: ["foo_rand000000000001"], pipeline: 1}));
-tests.push(new Test({descr: "GET large str", command: "get", args: ["foo_rand000000000001"], pipeline: 50}));
-tests.push(new Test({descr: "GET large str", command: "get", args: ["foo_rand000000000001"], pipeline: 200}));
-tests.push(new Test({descr: "GET large str", command: "get", args: ["foo_rand000000000001"], pipeline: 20000}));
-
-tests.push(new Test({descr: "GET large buf", command: "get", args: ["foo_rand000000000001"], pipeline: 1, client_opts: { return_buffers: true} }));
-tests.push(new Test({descr: "GET large buf", command: "get", args: ["foo_rand000000000001"], pipeline: 50, client_opts: { return_buffers: true} }));
-tests.push(new Test({descr: "GET large buf", command: "get", args: ["foo_rand000000000001"], pipeline: 200, client_opts: { return_buffers: true} }));
-tests.push(new Test({descr: "GET large buf", command: "get", args: ["foo_rand000000000001"], pipeline: 20000, client_opts: { return_buffers: true} }));
-
-tests.push(new Test({descr: "INCR", command: "incr", args: ["counter_rand000000000000"], pipeline: 1}));
-tests.push(new Test({descr: "INCR", command: "incr", args: ["counter_rand000000000000"], pipeline: 50}));
-tests.push(new Test({descr: "INCR", command: "incr", args: ["counter_rand000000000000"], pipeline: 200}));
-tests.push(new Test({descr: "INCR", command: "incr", args: ["counter_rand000000000000"], pipeline: 20000}));
-
-tests.push(new Test({descr: "LPUSH", command: "lpush", args: ["mylist", small_str], pipeline: 1}));
-tests.push(new Test({descr: "LPUSH", command: "lpush", args: ["mylist", small_str], pipeline: 50}));
-tests.push(new Test({descr: "LPUSH", command: "lpush", args: ["mylist", small_str], pipeline: 200}));
-tests.push(new Test({descr: "LPUSH", command: "lpush", args: ["mylist", small_str], pipeline: 20000}));
-
-tests.push(new Test({descr: "LRANGE 10", command: "lrange", args: ["mylist", "0", "9"], pipeline: 1}));
-tests.push(new Test({descr: "LRANGE 10", command: "lrange", args: ["mylist", "0", "9"], pipeline: 50}));
-tests.push(new Test({descr: "LRANGE 10", command: "lrange", args: ["mylist", "0", "9"], pipeline: 200}));
-tests.push(new Test({descr: "LRANGE 10", command: "lrange", args: ["mylist", "0", "9"], pipeline: 20000}));
-
-tests.push(new Test({descr: "LRANGE 100", command: "lrange", args: ["mylist", "0", "99"], pipeline: 1}));
-tests.push(new Test({descr: "LRANGE 100", command: "lrange", args: ["mylist", "0", "99"], pipeline: 50}));
-tests.push(new Test({descr: "LRANGE 100", command: "lrange", args: ["mylist", "0", "99"], pipeline: 200}));
-tests.push(new Test({descr: "LRANGE 100", command: "lrange", args: ["mylist", "0", "99"], pipeline: 20000}));
-
-function next() {
-    var test = tests.shift();
-    if (test) {
-        test.run(function () {
-            next();
-        });
-    } else {
-        console.log("End of tests.");
-        process.exit(0);
-    }
-}
-
-next();

File diff suppressed because it is too large
+ 0 - 26
app/node_modules/socket.io/node_modules/redis/package.json


Some files were not shown because too many files changed in this diff