Exemple #1
0
        private bool m_CreateDataPackets()
        {
            CFileBlock sendBlock;
            sendBlock=(CFileBlock)m_UploadBlocks[0];
            byte[] Datos=null;
            CElement element=(CElement)CKernel.FilesList[sendBlock.FileHash];

            m_UploadElement=element;

            if (CKernel.SameHash(ref m_UpFileHash,ref sendBlock.FileHash))
            {
                Buffer.BlockCopy(sendBlock.FileHash,0,m_UpFileHash,0,16);
            }

            if ((element!=null)&&(sendBlock.end-sendBlock.start<185000))
            {
                Datos=element.File.ReadBlock(sendBlock.start,sendBlock.end-1,false);
            }

            if ((Datos==null)||(element==null))
            {
                // cancel upload
                Debug.Write("Part not found in file\n");
                CancelUploadTransfer(false);
                return false;
            }

            MemoryStream DatosStream=new MemoryStream(Datos);

            //if you uncoment this upload compression will be enabled (not so tested)
            //if (bEsMula)
            //{
            //	CCompressedBlockSend EnvioBloque=new CCompressedBlockSend(Datos,sendBlock.inicio,sendBlock.fin,sendBlock.FileHash,ref m_UploadDataPackets);
            //}
            //else
            //{
            CSendBlock EnvioBloque=new CSendBlock(DatosStream,sendBlock.start,sendBlock.end,sendBlock.FileHash,ref m_UploadDataPackets);
            //}
            Datos=null;
            m_UploadBlocks.Remove(sendBlock);
            //GC.Collect();
            return true;
        }
Exemple #2
0
        public CCompressedBlockSend(byte[] data,uint start,uint end,byte[] FileHash,ref ArrayList UploadDataPackets)
        {
            //			byte[] buffercomp=new byte[final-inicio+300];
            //			Deflater descompresor=new Deflater();
            //			descompresor.SetInput(datos);
            //			descompresor.Flush();
            //			int compressedsize=descompresor.Deflate(buffercomp,0,(int)(final-inicio)+300);
            //			descompresor.Finish();
            byte[] buffercomp=null;
            int compressedsize=ComprimirBuffer(data,ref buffercomp);
            if (compressedsize>=end-start)
            {
                buffercomp=null;
                MemoryStream strmdatos=new MemoryStream(data);
                CSendBlock EnvioBloque=new CSendBlock(strmdatos,start,end,FileHash,ref UploadDataPackets);
                return;
            }
            Debug.Write("Compressed comp:"+compressedsize.ToString()+" win: "+Convert.ToString(end-start-compressedsize)+"\n");
            MemoryStream datosComp=new MemoryStream(buffercomp);
            end=start+(uint)compressedsize;
            MemoryStream buffer;
            uint size;
            BinaryReader reader=new BinaryReader(datosComp);
            BinaryWriter writer;
            byte[] aux_buffer;
            while (start!=end)
            {
                buffer=new MemoryStream();
                writer=new BinaryWriter(buffer);
                DonkeyHeader header=new DonkeyHeader((byte)Protocol.ClientCommandExt.CompressedPart,writer,Protocol.ProtocolType.eMule);
                writer.Write(FileHash);
                if (end-start>10240) size=10240;
                else size=end-start;
                writer.Write(start);
                writer.Write(compressedsize);
                aux_buffer=reader.ReadBytes((int)size);
                writer.Write(aux_buffer);

                start+=size;
                header.Packetlength=(uint)writer.BaseStream.Length-header.Packetlength+1;
                writer.Seek(0,SeekOrigin.Begin);
                header.Serialize(writer);
                UploadDataPackets.Add(buffer);
                writer=null;
                buffer=null;
            }
            reader.Close();
            datosComp.Close();
            datosComp=null;
            reader=null;
        }