All pastes #177034 Raw Edit

TCP/IP DATA DEFFRAGE

public text v1 · immutable
#177034 ·published 2006-09-20 03:51 UTC
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