Skip to content

Commit 6404a76

Browse files
committed
Support base64-encoded websocket messages
1 parent 0f53e2c commit 6404a76

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

src/TcpPolyfill.js

+16-7
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ export function Socket(options) {
6363
}
6464
emitter.emit('data', buffer);
6565
});
66+
} else if (typeof data === 'string' && ws.protocol === 'base64') {
67+
emitter.emit('data', new Buffer(data, 'base64'));
6668
} else {
6769
emitter.emit('data', data);
6870
}
@@ -81,17 +83,24 @@ export function Socket(options) {
8183
};
8284

8385
this.write = data => {
84-
// Convert data (string or node.js Buffer) to ArrayBuffer for WebSocket
85-
const arrayBuffer = new ArrayBuffer(data.length);
86-
const view = new Uint8Array(arrayBuffer);
87-
for (let i = 0; i < data.length; ++i) {
88-
view[i] = data[i];
86+
// Convert data (string or node.js Buffer) to ArrayBuffer or base64 string
87+
// for WebSocket
88+
let outgoingMessage = null;
89+
if (ws.protocol === 'base64') {
90+
outgoingMessage = (new Buffer(data)).toString('base64');
91+
} else {
92+
const arrayBuffer = new ArrayBuffer(data.length);
93+
const view = new Uint8Array(arrayBuffer);
94+
for (let i = 0; i < data.length; ++i) {
95+
view[i] = data[i];
96+
}
97+
outgoingMessage = arrayBuffer;
8998
}
9099
const delay = this._simulatedLatencyMs;
91100
if (typeof delay === 'number' && delay > 0) {
92-
setTimeout(() => ws.send(arrayBuffer), delay);
101+
setTimeout(() => ws.send(outgoingMessage), delay);
93102
} else {
94-
ws.send(arrayBuffer);
103+
ws.send(outgoingMessage);
95104
}
96105
};
97106

0 commit comments

Comments
 (0)