rendered paste body #region [DATA DEFRAGGER]
Boolean FragmentedChunck = false;
// Temporary Data Buffer.
Byte[] TempBuffer = new Byte[16384];
// Compressed Buffer.
Byte[] CompressedBuffer = new Byte[16384];
// Default buffer.
Byte[] DefaultBuffer = new Byte[16384];
UInt16 DefaultBufferPacketLength = 0;
UInt32 DefaultBufferSize = 0;
UInt16 GetSize(Byte[] buffer)
{
return ((UInt16)(buffer[3] << 8 | buffer[2]));
}
public void Defrag(Byte[] buffer, int len)
{
try
{
// CALCULANDO (POSSÍVEL TAMANHO DE PACOTE).
UInt16 PacketLength = GetSize(buffer);
Packet receivedpkt = new Packet();
if (!FragmentedChunck)
{
if (PacketLength == len)
{
// PACOTE VALIDO, DESCOMPRIMINDO DADOS.
// GlobalVars.d.WriteChat("PACOTE VALIDO, REPASSADO PARA DESCOMPRESSAO.");
if (receivedpkt.Parse(buffer, (Int32)PacketLength))
HandleMessage(receivedpkt);
return;
}
else if (PacketLength < len)
{
Boolean CLUMPED = true;
UInt32 P = 0;
// PACOTE AMONTADO.
// GlobalVars.d.WriteChat("PACOTE AMONTADO, EXTRAINDO PACOTES...");
// SEPARANDO PACOTES.
while (CLUMPED)
{
// GlobalVars.d.WriteChat("EXTRAINDO PACOTE [" + P.ToString() + "]...");
PacketLength = GetSize(buffer);
if (PacketLength >= len)
{
Array.Clear(CompressedBuffer, 0, 2048);
Array.Copy(buffer, 0, CompressedBuffer, 0, PacketLength);
if (receivedpkt.Parse(CompressedBuffer, (Int32)PacketLength))
HandleMessage(receivedpkt);
Array.Clear(TempBuffer, 0, 2048);
Array.Copy(buffer, 0, TempBuffer, 0, len);
Array.Clear(buffer, 0, 2048);
Array.Copy(TempBuffer, PacketLength - 1, buffer, 0, len - PacketLength);
len = len - PacketLength;
P++;
}
else
{
FragmentedChunck = true;
// GlobalVars.d.WriteChat("FRAGMENTO DE PACOTE ENCONTRADO...");
DefaultBufferPacketLength = PacketLength;
Array.Copy(buffer, 0, DefaultBuffer, 0, len);
DefaultBufferSize = (UInt32)len;
CLUMPED = false;
return;
}
}
// GlobalVars.d.WriteChat("PACOTES EXTRAIDOS COM SUCESSO !");
return;
}
}
else
{
if (DefaultBufferPacketLength <= len)
{
FragmentedChunck = false;
Array.Copy(buffer, 0, DefaultBuffer, DefaultBufferSize - 1, len);
DefaultBufferSize = ((UInt32)(DefaultBufferSize + len));
if (receivedpkt.Parse(DefaultBuffer, (Int32)DefaultBufferSize))
HandleMessage(receivedpkt);
if (DefaultBufferSize > 0)
Array.Clear(DefaultBuffer, 0, (Int32)DefaultBufferSize);
// GlobalVars.d.WriteChat("PACOTE FRAGMENTADO CONSTRUIDO COM SUCESSO !");
}
else
{
// GlobalVars.d.WriteChat("CONSTRUINDO PACOTE FRAGMENTADO...");
Array.Copy(buffer, 0, DefaultBuffer, DefaultBufferSize - 1, len);
DefaultBufferSize = ((UInt32)(DefaultBufferSize + len));
}
return;
}
}
catch (Exception ex)
{
GlobalVars.d.WriteLog2(Environment.NewLine + "[DEFRAGGER]-> " + ex + "." + Environment.NewLine + Environment.NewLine);
}
}
#endregion