QPacket Compression - zeroKilo/GROBackendWV GitHub Wiki
QPacket Compression
simply zlib compression is used in GRP. the data is preface with a byte, if that is zero, the data is already uncompressed, any other value should be multiplied with the data size to reserve space for decompression.
Example
Example decompression code
`
...
usesCompression = payload[0] != 0;
if (usesCompression)
{
MemoryStream m2 = new MemoryStream();
m2.Write(payload, 1, payload.Length - 1);
payload = Helper.Decompress(m2.ToArray());
}
...
public static byte[] Decompress(byte[] data)
{
ZlibStream s = new ZlibStream(new MemoryStream(data), Ionic.Zlib.CompressionMode.Decompress);
MemoryStream result = new MemoryStream();
s.CopyTo(result);
return result.ToArray();
}`
Example compression Code
`
...
uint sizeBefore = (uint)tmpPayload.Length;
byte[] buff = Helper.Compress(tmpPayload);
byte count = (byte)(sizeBefore / buff.Length);
if ((sizeBefore % buff.Length) != 0)
count++;
MemoryStream m2 = new MemoryStream();
m2.WriteByte(count);
m2.Write(buff, 0, buff.Length);
tmpPayload = m2.ToArray();
...
public static byte[] Compress(byte[] data)
{
ZlibStream s = new ZlibStream(new MemoryStream(data), Ionic.Zlib.CompressionMode.Compress);
MemoryStream result = new MemoryStream();
s.CopyTo(result);
return result.ToArray();
}`