diff --git a/lib/caronte/passes/ws.js b/lib/caronte/passes/ws.js index 90ab609..11e85c6 100644 --- a/lib/caronte/passes/ws.js +++ b/lib/caronte/passes/ws.js @@ -1,7 +1,6 @@ -var WebsocketStream = require('../streams/websocket'), - http = require('http'), - common = require('../common'), - passes = exports; +var http = require('http'), + common = require('../common'), + passes = exports; /*! * Array of passes. diff --git a/lib/caronte/streams/websocket.js b/lib/caronte/streams/websocket.js deleted file mode 100644 index 4d24f5b..0000000 --- a/lib/caronte/streams/websocket.js +++ /dev/null @@ -1,127 +0,0 @@ -var Duplex = require('stream').Duplex, - common = require('../common'), - http = require('http'), - https = require('https'); - -module.exports = WebsocketStream; - -function WebsocketStream(options, res) { - Duplex.call(this); - - this.options = options; - this.res = res; - this.handshakeDone = false; - - var self = this; - - this.once('pipe', function(pipe) { self.onPipe(pipe); }); - this.once('finish', function() { self.onFinish(); }); -} - -require('util').inherits(WebsocketStream, Duplex); - -WebsocketStream.prototype.onPipe = function(req) { - this.req = req; - - var self = this; - - this.proxyReq = (self.options.ssl ? https : http).request( - common.setupOutgoing(self.options.ssl || {}, self.options, req) - ); - - this.proxyReq.once('socket', function(proxySocket) { - self.onSocket(proxySocket); - }); - this.proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) { - self.onUpgrade(proxyRes, proxySocket, proxyHead); - }); - - this.proxyReq.on('error', function(e) { - self.onError(e); - }); -}; - -WebsocketStream.prototype.onFinish = function() { - this.proxyReq.end(); -}; - -WebsocketStream.prototype.onSocket = function(proxySocket) { - -}; - -WebsocketStream.prototype.onUpgrade = function(proxyRes, proxySocket, proxyHead) { - var self = this; - - this.handshake = { - headers : proxyRes.headers, - statusCode : proxyRes.statusCode - }; - - this.proxyRes = proxyRes; - this.proxySocket = proxySocket; - this.proxyHead = proxyHead; - - proxySocket.setTimeout(0); - proxySocket.setNoDelay(true); - - proxySocket.setKeepAlive(true, 0); - - proxySocket.on('readable', function() { - self.read(0); - }); - - proxySocket.on('end', function() { - self.push(null); - }); - - self.emit('readable'); -}; - -WebsocketStream.prototype.onError = function(e) { - -}; - - -WebsocketStream.prototype._write = function(chunk, encoding, callback) { - this.proxySocket.write(chunk, encoding, callback); -}; - -WebsocketStream.prototype._read = function(size) { - var chunk = (this.proxySocket ? this.proxySocket.read(size) : '') || ''; - - if(chunk && !this.handshakeDone) { - var headers = ''; - - if (this.handshake.statusCode && this.handshake.statusCode == 101) { - headers = [ - 'HTTP/1.1 101 Switching Protocols', - 'Upgrade: websocket', - 'Connection: Upgrade', - 'Sec-WebSocket-Accept: ' + this.handshake.headers['sec-websocket-accept'] - ]; - - headers = headers.concat('', '').join('\r\n'); - } - - /* - * Socket.IO specific code - */ - - /*var sdata = chunk.toString(); - sdata = sdata.substr(0, sdata.search('\r\n\r\n')); - chunk = data.slice(Buffer.byteLength(sdata), data.length); - - if (self.source.https && !self.target.https) { sdata = sdata.replace('ws:', 'wss:'); } - - this.push(headers + sdata); - this.push(data); - - this.handshakeDone = true; - return; - */ - this.push(headers); - this.push(chunk); - } - - this.push(chunk); -};