diff --git a/lib/server.js b/lib/server.js index c90bdc4..b74a84c 100644 --- a/lib/server.js +++ b/lib/server.js @@ -7,14 +7,6 @@ var url = require('url'); -var allowCrossDomain = function(req, res, next) { - res.setHeader('Access-Control-Allow-Origin', '*'); - res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); - res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); - - next(); -} - function PeerServer(options) { if (!(this instanceof PeerServer)) return new PeerServer(options); EventEmitter.call(this); @@ -22,7 +14,7 @@ function PeerServer(options) { this._app = express(); this._httpServer = http.createServer(this._app); this._app.use(express.bodyParser()); - this._app.use(allowCrossDomain); + this._app.use(this._allowCrossDomain); options = util.extend({ port: 80 @@ -52,7 +44,16 @@ function PeerServer(options) { util.inherits(PeerServer, EventEmitter); -/* Initialize WebSocket server. */ +/** Handle CORS */ +PeerServer.prototype._allowCrossDomain = function(req, res, next) { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); + + next(); +} + +/** Initialize WebSocket server. */ PeerServer.prototype._initializeWSS = function() { var self = this; this._wss.on('connection', function(socket) { @@ -84,6 +85,12 @@ PeerServer.prototype._initializeWSS = function() { switch (message.type) { case 'LEAVE': + // Clean up if a Peer sends a LEAVE. + if (!message.dst) { + delete self._clients[message.src]; + delete self._timeouts[message.src]; + break; + } // ICE candidates case 'CANDIDATE': // Offer or answer between peers. @@ -92,12 +99,6 @@ PeerServer.prototype._initializeWSS = function() { // Firefoxism (connectDataConnection ports) case 'PORT': self._handleTransmission(message.type, message.src, message.dst, data); - - // Clean up. - if (message.type === 'LEAVE') { - delete self._clients[message.src]; - delete self._timeouts[message.src]; - } break; default: util.prettyError('message unrecognized');