@@ -63,7 +63,8 @@ exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
6363 if ( Buffer . isBuffer ( packet . data ) ) {
6464 return encodeBuffer ( packet , supportsBinary , callback ) ;
6565 } else if ( packet . data && ( packet . data . buffer || packet . data ) instanceof ArrayBuffer ) {
66- return encodeArrayBuffer ( packet , supportsBinary , callback ) ;
66+ packet . data = arrayBufferToBuffer ( packet . data ) ;
67+ return encodeBuffer ( packet , supportsBinary , callback ) ;
6768 }
6869
6970 // Sending data as a utf-8 string
@@ -92,24 +93,6 @@ function encodeBuffer(packet, supportsBinary, callback) {
9293 return callback ( Buffer . concat ( [ typeBuffer , data ] ) ) ;
9394}
9495
95- function encodeArrayBuffer ( packet , supportsBinary , callback ) {
96-
97- var data = packet . data . buffer || packet . data ;
98-
99- if ( ! supportsBinary ) {
100- return exports . encodeBase64Packet ( packet , callback ) ;
101- }
102-
103- var contentArray = new Uint8Array ( data ) ;
104- var resultBuffer = new Buffer ( 1 + data . byteLength ) ;
105-
106- resultBuffer [ 0 ] = packets [ packet . type ] ;
107- for ( var i = 0 ; i < contentArray . length ; i ++ ) {
108- resultBuffer [ i + 1 ] = contentArray [ i ] ;
109- }
110- return callback ( resultBuffer ) ;
111- }
112-
11396/**
11497 * Encodes a packet with binary data in a base64 string
11598 *
@@ -118,13 +101,8 @@ function encodeArrayBuffer(packet, supportsBinary, callback) {
118101 */
119102
120103exports . encodeBase64Packet = function ( packet , callback ) {
121-
122104 if ( ! Buffer . isBuffer ( packet . data ) ) {
123- var buf = new Buffer ( packet . data . byteLength ) ;
124- for ( var i = 0 ; i < buf . length ; i ++ ) {
125- buf [ i ] = packet . data [ i ] ;
126- }
127- packet . data = buf ;
105+ packet . data = arrayBufferToBuffer ( packet . data ) ;
128106 }
129107
130108 var message = 'b' + packets [ packet . type ] ;
@@ -364,6 +342,26 @@ function stringToBuffer(string) {
364342 return buf ;
365343}
366344
345+ /**
346+ *
347+ * Converts an ArrayBuffer to a Buffer
348+ *
349+ * @api private
350+ */
351+
352+ function arrayBufferToBuffer ( data ) {
353+ // data is either an ArrayBuffer or ArrayBufferView.
354+ var array = new Uint8Array ( data . buffer || data ) ;
355+ var length = data . byteLength || data . length ;
356+ var offset = data . byteOffset || 0 ;
357+ var buffer = new Buffer ( length ) ;
358+
359+ for ( var i = 0 ; i < length ; i ++ ) {
360+ buffer [ i ] = array [ offset + i ] ;
361+ }
362+ return buffer ;
363+ }
364+
367365/**
368366 * Encodes multiple messages (payload) as binary.
369367 *
0 commit comments