mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
|
var io = require("socket.io");
|
||
|
|
||
|
if (io.version === "0.9.16") {
|
||
|
console.log("patching socket.io hybi-16 transport frame prototype");
|
||
|
var transports = require("socket.io/lib/transports/websocket/hybi-16.js");
|
||
|
transports.prototype.frame = patchedFrameHandler;
|
||
|
// file hybi-07-12 has the same problem but no browsers are using that protocol now
|
||
|
}
|
||
|
|
||
|
function patchedFrameHandler(opcode, str) {
|
||
|
var dataBuffer = new Buffer(str),
|
||
|
dataLength = dataBuffer.length,
|
||
|
startOffset = 2,
|
||
|
secondByte = dataLength;
|
||
|
if (dataLength === 65536) {
|
||
|
console.log("fixing invalid frame length in socket.io");
|
||
|
}
|
||
|
if (dataLength > 65535) {
|
||
|
// original code had > 65536
|
||
|
startOffset = 10;
|
||
|
secondByte = 127;
|
||
|
} else if (dataLength > 125) {
|
||
|
startOffset = 4;
|
||
|
secondByte = 126;
|
||
|
}
|
||
|
var outputBuffer = new Buffer(dataLength + startOffset);
|
||
|
outputBuffer[0] = opcode;
|
||
|
outputBuffer[1] = secondByte;
|
||
|
dataBuffer.copy(outputBuffer, startOffset);
|
||
|
switch (secondByte) {
|
||
|
case 126:
|
||
|
outputBuffer[2] = dataLength >>> 8;
|
||
|
outputBuffer[3] = dataLength % 256;
|
||
|
break;
|
||
|
case 127:
|
||
|
var l = dataLength;
|
||
|
for (var i = 1; i <= 8; ++i) {
|
||
|
outputBuffer[startOffset - i] = l & 0xff;
|
||
|
l >>>= 8;
|
||
|
}
|
||
|
}
|
||
|
return outputBuffer;
|
||
|
}
|