From ddda01c03c853d31922596fb863a190b8ca8dc85 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Mon, 25 Dec 2017 18:25:47 +0100 Subject: [PATCH] [fix] Fix `extentions` property type Make `extensions` a getter that returns the negotiated extensions names. Fixes #1244 --- lib/websocket-server.js | 2 +- lib/websocket.js | 47 +++++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/lib/websocket-server.js b/lib/websocket-server.js index 0654eb0bf..8bc3b2938 100644 --- a/lib/websocket-server.js +++ b/lib/websocket-server.js @@ -261,7 +261,7 @@ class WebSocketServer extends EventEmitter { [PerMessageDeflate.extensionName]: [params] }); headers.push(`Sec-WebSocket-Extensions: ${value}`); - ws.extensions = extensions; + ws._extensions = extensions; } // diff --git a/lib/websocket.js b/lib/websocket.js index 0717dd76c..92edf390c 100644 --- a/lib/websocket.js +++ b/lib/websocket.js @@ -41,7 +41,6 @@ class WebSocket extends EventEmitter { super(); this.readyState = WebSocket.CONNECTING; - this.extensions = {}; this.protocol = ''; this._binaryType = constants.BINARY_TYPES[0]; @@ -52,6 +51,7 @@ class WebSocket extends EventEmitter { this._closeTimer = null; this._finalized = false; this._closeCode = 1006; + this._extensions = {}; this._isServer = true; this._receiver = null; this._sender = null; @@ -77,18 +77,6 @@ class WebSocket extends EventEmitter { get CLOSED () { return WebSocket.CLOSED; } get OPEN () { return WebSocket.OPEN; } - /** - * @type {Number} - */ - get bufferedAmount () { - var amount = 0; - - if (this._socket) { - amount = this._socket.bufferSize + this._sender._bufferedBytes; - } - return amount; - } - /** * This deviates from the WHATWG interface since ws doesn't support the required * default "blob" type (instead we define a custom "nodebuffer" type). @@ -110,6 +98,25 @@ class WebSocket extends EventEmitter { if (this._receiver) this._receiver._binaryType = type; } + /** + * @type {Number} + */ + get bufferedAmount () { + var amount = 0; + + if (this._socket) { + amount = this._socket.bufferSize + this._sender._bufferedBytes; + } + return amount; + } + + /** + * @type {String} + */ + get extensions () { + return Object.keys(this._extensions).join(); + } + /** * Set up the socket and the internal resources. * @@ -122,8 +129,8 @@ class WebSocket extends EventEmitter { socket.setTimeout(0); socket.setNoDelay(); - this._receiver = new Receiver(this.extensions, maxPayload, this.binaryType); - this._sender = new Sender(socket, this.extensions); + this._receiver = new Receiver(this._extensions, maxPayload, this.binaryType); + this._sender = new Sender(socket, this._extensions); this._ultron = new Ultron(socket); this._socket = socket; @@ -211,12 +218,10 @@ class WebSocket extends EventEmitter { this.emit('close', this._closeCode, this._closeMessage); - if (this.extensions[PerMessageDeflate.extensionName]) { - this.extensions[PerMessageDeflate.extensionName].cleanup(); + if (this._extensions[PerMessageDeflate.extensionName]) { + this._extensions[PerMessageDeflate.extensionName].cleanup(); } - this.extensions = null; - this.removeAllListeners(); } @@ -408,7 +413,7 @@ class WebSocket extends EventEmitter { fin: true }, options); - if (!this.extensions[PerMessageDeflate.extensionName]) { + if (!this._extensions[PerMessageDeflate.extensionName]) { opts.compress = false; } @@ -717,7 +722,7 @@ function initAsClient (address, protocols, options) { perMessageDeflate.accept( extensions[PerMessageDeflate.extensionName] ); - this.extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + this._extensions[PerMessageDeflate.extensionName] = perMessageDeflate; } } catch (err) { socket.destroy();