@tf2pickup-org/mumble-client
Version:
A simple bot for managing mumble servers
46 lines • 1.62 kB
JavaScript
export function readVarint(buffer) {
if (buffer.length === 0) {
throw new Error(`buffer is empty`);
}
switch (true) {
case (0b10000000 & buffer[0]) === 0:
return { value: buffer.readUInt8(0), length: 1 };
case (0b11000000 & buffer[0]) === 0b10000000:
return { value: buffer.readUint16BE(0) & 0x3fff, length: 2 };
case (0b11100000 & buffer[0]) === 0b11000000:
return {
value: ((buffer.readUint16BE(0) & 0x1fff) << 8) | buffer.readUint8(2),
length: 3,
};
case (0b11110000 & buffer[0]) === 0b11100000:
return {
value: buffer.readUint32BE(0) & 0x1fffffff,
length: 4,
};
case (0b11111100 & buffer[0]) === 0b11110000:
return {
value: buffer.readUint32BE(1),
length: 5,
};
case (0b11111100 & buffer[0]) === 0b11110100:
return {
value: buffer.readBigInt64BE(1),
length: 9,
};
case (0b11111100 & buffer[0]) === 0b11111000: {
const { value, length } = readVarint(buffer.subarray(1));
return {
value: -value,
length: length + 1,
};
}
case (0b11111100 & buffer[0]) === 0b11111100:
return {
value: ~(buffer.readUint8(0) & 0x00000011),
length: 1,
};
default:
throw new Error(`varint not supported`);
}
}
//# sourceMappingURL=read-varint.js.map