示例#1
0
        private void m_LoadMetParameters(BinaryReader reader)
        {
            CParameterReader ParameterReader;
            uint nparameters=reader.ReadUInt32();
            for (uint parameter=0;parameter!=nparameters;parameter++)
            {
                ParameterReader=new CParameterReader(reader);
                string parametername;
                byte parameterid;
                parametername=ParameterReader.nombreParam;
                parameterid	= ParameterReader.id;
                switch( (Protocol.FileTag)ParameterReader.id )
                {
                    case Protocol.FileTag.Name:
                        m_FileName=ParameterReader.valorString;
                        break;
                    case Protocol.FileTag.Size:
                        m_FileSize=ParameterReader.valorNum;
                        break;
                    case Protocol.FileTag.Priority:
                        m_DownPriority=(Constants.Priority)ParameterReader.valorNum;
                        break;
                    case Protocol.FileTag.UploadPriority:
                        m_UpPriority=(Constants.Priority)ParameterReader.valorNum;
                        break;
                    case Protocol.FileTag.Transfered:
                        m_Transferred=ParameterReader.valorNum;
                        break;
                    case Protocol.FileTag.LastSeenComplete:
                        m_LastSeenComplete=ParameterReader.valorNum;
                        break;
                    case Protocol.FileTag.State:
                        m_FileStatus=(Protocol.FileState)ParameterReader.valorNum;
                        break;
                    case Protocol.FileTag.Comment:
                        m_MyComment=ParameterReader.valorString;
                        break;
                    case Protocol.FileTag.Rating:
                        m_MyRating=(byte)ParameterReader.valorNum;
                        break;
                    case Protocol.FileTag.CorruptedPart:
                        if (m_CorruptedChunks == null) m_CorruptedChunks=new ArrayList();
                        m_CorruptedChunks.Add((int)ParameterReader.valorNum);
                        break;
                    case Protocol.FileTag.Category:
                        m_CategoryID=ParameterReader.valorNum;
                        break;
                    default:
                        if (!(ParameterReader.nombreParam == null))
                        {
                            if ((byte)ParameterReader.nombreParam.ToCharArray()[0] == (byte)Protocol.FileTag.GapStart)
                            {
                                uint inicio_gap;
                                inicio_gap=ParameterReader.valorNum;
                                ParameterReader=new CParameterReader(reader);
                                parameter++;
                                if ((byte)ParameterReader.nombreParam.ToCharArray()[0]!=(byte)Protocol.FileTag.GapEnd)
                                {
                                    //TODO: lanzar error en gap
                                }
                                else
                                {
                                    uint fin_gap;
                                    fin_gap=ParameterReader.valorNum;
                                    //TODO: for next revision: m_AddGap(inicio_gap, fin_gap-1);

                                    //Debug.WriteLine("Gap:"+inicio_gap.ToString()+" : "+(fin_gap-1).ToString());
                                    if (((byte)m_FileFormat==(byte)Protocol.PartMet.eDonkeyOld)&&(ParameterReader.nombreParam.IndexOf(" ")>0))
                                        continue;
                                    m_AddGap(inicio_gap, fin_gap-1);
                                    //if (fin_gap>=m_FileSize) fin_gap=m_FileSize-1;
                                    //if ((fin_gap>=inicio_gap) && (fin_gap>=0) && (inicio_gap>=0) && (fin_gap<m_FileSize) && (inicio_gap<m_FileSize)) Gaps.Add((uint)inicio_gap, (uint)fin_gap);
                                }
                            }
                            else
                            {
                                if (ParameterReader.nombreParam==Protocol.FT_MAXSOURCES)
                                    m_MaxSources=ParameterReader.valorNum;
                                else if (ParameterReader.nombreParam==Protocol.FT_COMMENT)
                                    m_MyComment=ParameterReader.valorString;
                                else if (ParameterReader.nombreParam==Protocol.FT_RATING)
                                    m_MyRating=(byte)ParameterReader.valorNum;
                                else
                                    m_UnknownParameters.Add(ParameterReader);
                            }
                        }
                        else
                            m_UnknownParameters.Add(ParameterReader);
                        break;
                        //TODO: faltan los parameters para las estadisticas....
                }
            }
        }
示例#2
0
 /// <summary>
 /// Reads the server data from an BinaryReader.
 /// </summary>
 /// <param name="reader">Specify the BinaryReader to load the server data.</param>
 public void Load(BinaryReader reader)
 {
     uint parameters;
     CParameterReader parameterReader;
     parameters=reader.ReadUInt32();
     for (uint i=0;i!=parameters;i++)
     {
         parameterReader=new CParameterReader(reader);
         switch((Protocol.ServerTag)parameterReader.id)
         {
             case Protocol.ServerTag.Name:
                 m_Name=parameterReader.valorString;
                 break;
             case Protocol.ServerTag.Description:
                 m_Description=parameterReader.valorString;
                 break;
             case Protocol.ServerTag.Preference:
                 m_Preference=(Constants.ServerPriority)parameterReader.valorNum;
                 break;
             case Protocol.ServerTag.Ping:
                 m_LastPingTime=parameterReader.valorNum;
                 break;
             case Protocol.ServerTag.DynIP:
                 m_DynamicIP=parameterReader.valorString;
                 break;
             case Protocol.ServerTag.Fails:
                 m_nFails=parameterReader.valorNum;
                 break;
             case Protocol.ServerTag.MaxUsers:
                 m_MaxUsers=parameterReader.valorNum;
                 break;
             default:
                 if (parameterReader.nombreParam==null) break;
                 if (parameterReader.nombreParam.Equals("users"))
                     m_Users=parameterReader.valorNum;
                 else if (parameterReader.nombreParam.Equals("files"))
                     m_Files=parameterReader.valorNum;
                 break;
         }
     }
 }
示例#3
0
 private uint m_ExtractResult(BinaryReader reader,CSearcher search)
 {
     CParameterReader parameterReader;
     byte[] HashEncontrado = reader.ReadBytes(16);
     uint ip = reader.ReadUInt32();
     ushort port = reader.ReadUInt16();
     uint nParametros = reader.ReadUInt32();
     string fileName = "?";
     uint fileSize = 0;
     uint nSources = 1;
     string codec="";
     uint bitrate=0;
     string length="";
     bool complete=false;
     for (uint param = 0; param != nParametros; param++)
     {
         parameterReader = new CParameterReader(reader);
         switch( (Protocol.FileTag)parameterReader.id )
         {
             case Protocol.FileTag.Name:
                 fileName = parameterReader.valorString;
                 break;
             case Protocol.FileTag.Size:
                 fileSize = parameterReader.valorNum;
                 break;
             case Protocol.FileTag.Sources:
                 nSources = parameterReader.valorNum;
                 break;
             case Protocol.FileTag.Completed:
                 complete = parameterReader.valorNum>0;
                 break;
             default:
                 if (parameterReader.nombreParam==Protocol.FileExtraTags.codec.ToString())
                     codec=parameterReader.valorString;
                 else if (parameterReader.nombreParam==Protocol.FileExtraTags.length.ToString())
                     length=parameterReader.valorString;
                 else if (parameterReader.nombreParam==Protocol.FileExtraTags.bitrate.ToString())
                     bitrate=parameterReader.valorNum;
                 //Debug.WriteLine(parameterReader.id+" name: "+parameterReader.nombreParam+" valString:"+parameterReader.valorString+" valNum: "+parameterReader.valorNum);
                 break;
         }
     }
     if (fileSize<Protocol.PartSize) complete=true;
     search.AddFileFound(HashEncontrado,fileName,fileSize,nSources,codec,length,bitrate,complete,ip,port);
     return nSources;
 }
示例#4
0
        public CReceiveHello(bool bRespuesta,MemoryStream buffer)
        {
            int emuleinfo=0;
            AllowViewSharedFiles=true;
            IDClientCompatible=0;
            VersionUDP=0;
            VersionComments=0;
            VersionCompression=0;
            VersioneMuleMinor=0;
            VersioneMuleRevision=0;
            VersioneMuleMajor=0;
            VersionExtendedRequests=0;
            VersionLphant=0;
            VersionSourceExchange=0;
            PortUDP=0;
            PartnerAllowed=false;
            SupportsPartner=false;
            SupportsHorde=false;

            BinaryReader reader=new BinaryReader(buffer);

            ExtendedInfoComplete=false;

            if (bRespuesta)
                HashSize=16;
            else
                HashSize=reader.ReadByte();

            Hash=reader.ReadBytes(HashSize);
            software = (byte)Protocol.Client.eDonkey;

            if ((Hash[5]==14)&&(Hash[14]==111))
            {
                software = (byte)Protocol.Client.eMule;
            }

            UserID=reader.ReadUInt32();
            UserPort=reader.ReadUInt16();
            uint nParametros=reader.ReadUInt32();
            UserName="";
            Version=0;

            for (int i=0;i!=nParametros;i++)
            {
                CParameterReader ParameterReader=new CParameterReader(reader);
                switch( (Protocol.ClientParameter)ParameterReader.id )
                {
                    case Protocol.ClientParameter.Name:
                        UserName = ParameterReader.valorString;
                        break;
                    case Protocol.ClientParameter.Version:
                        Version = ParameterReader.valorNum;
                        break;
                    case Protocol.ClientParameter.Port:
                        UserPort = (ushort)ParameterReader.valorNum;
                        break;
                    case Protocol.ClientParameter.EmuleVersion:
                        VersioneMuleMajor =((ParameterReader.valorNum & 0x00FFFFFF) >> 17) & 0x7F;
                        VersioneMuleMinor =((ParameterReader.valorNum & 0x00FFFFFF) >> 10) & 0x7F;
                        VersioneMuleRevision =((ParameterReader.valorNum & 0x00FFFFFF) >> 7) & 0x07;
                        //Revision=( (ParameterReader.valorNum & 0x00FFFFFF) >> 7) & 0x07;
                        IDClientCompatible =(ParameterReader.valorNum >> 24);
                        emuleinfo|=4;
                        break;
                    case Protocol.ClientParameter.EmuleUDPPort:
                        PortUDP=(ushort)ParameterReader.valorNum;
                        emuleinfo|=1;
                        break;
                    case Protocol.ClientParameter.Emule_MiscOptions1:
                        VersionUDP				= (byte)((ParameterReader.valorNum >> 4*6) & 0x0f);
                        VersionCompression		= (byte)((ParameterReader.valorNum >> 4*5) & 0x0f);
                        //m_bySupportSecIdent		= ((ParameterReader.valorNum >> 4*4) & 0x0f);
                        VersionSourceExchange	= (byte)((ParameterReader.valorNum >> 4*3) & 0x0f);
                        VersionExtendedRequests	= (byte)((ParameterReader.valorNum >> 4*2) & 0x0f);
                        VersionComments			= (byte)((ParameterReader.valorNum >> 4*1) & 0x0f);
                        AllowViewSharedFiles	= ((ParameterReader.valorNum >> 1*2) & 0x01)>0;
                        //m_bMultiPacket			= (ParameterReader.valorNum >> 1*1) & 0x01;
                        //m_fSupportsPreview		= (ParameterReader.valorNum >> 1*0) & 0x01;
                        emuleinfo|=2;
                        break;
                    case Protocol.ClientParameter.EmuleCompatOptions:
                        if ((ParameterReader.valorNum & 0x00000001)>0) SupportsPartner=true;
                        if ((ParameterReader.valorNum & 0x00000002)>0) PartnerAllowed=true;
                        break;
                    default:
                        if (ParameterReader.id==0)
                        {
                            if ((ParameterReader.nombreParam==Protocol.HordeParameter)&&(ParameterReader.valorNum==Protocol.HORDE_VERSION))
                                SupportsHorde=true;
                        }
                        break;
                }
            }
            ServerIP=reader.ReadUInt32();
            ServerPort=reader.ReadUInt16();

            if ((emuleinfo & 4)== 4) ExtendedInfoComplete=true;

            if (buffer.Length-buffer.Position>=3)
            {
                software  = (byte)Protocol.Client.eDonkeyHybrid;
                uint extra=reader.ReadUInt32();
                if (extra==1262767181)
                    software=(byte)Protocol.Client.mlDonkey;
            }

            if ((IDClientCompatible==(byte)Protocol.Client.eLePhant)&&(VersioneMuleMajor>0)) VersioneMuleMajor--;

            if (Version > 10000 && Version < 100000)
                Version = Version - (Version/10000)*10000;

            if (Version > 1000)
                Version = Version - (Version/1000)*1000;

            if (Version < 100)
                Version *= 10;

            reader.Close();
            buffer.Close();
            reader=null;
            buffer=null;
        }
示例#5
0
        public CMuleHello(MemoryStream buffer)
        {
            BinaryReader reader=new BinaryReader(buffer);
            VersioneMule=reader.ReadByte();
            if (VersioneMule==0x2B) VersioneMule=0x22;
            VersionEmuleProtocol=reader.ReadByte();
            if (VersionEmuleProtocol==Protocol.EMULE_PROTOCOL_VERSION)
            {
                if(VersioneMule < 0x25 && VersioneMule > 0x22)
                    VersionUDP = 1;

                if(VersioneMule < 0x25 && VersioneMule > 0x21)
                    VersionSourceExchange = 1;

                if(VersioneMule==0x24)
                    VersionComments = 1;
            }
            PortUDP=0;
            VersionCompression=0;
            VersionSourceExchange=1;
            uint nParametros=reader.ReadUInt32();
            if (VersionEmuleProtocol!=Protocol.EMULE_PROTOCOL_VERSION) return;
            for (int i=0;i!=nParametros;i++)
            {
                CParameterReader ParameterReader=new CParameterReader(reader);
                switch(ParameterReader.id)
                {
                    case Protocol.ET_COMPRESSION:
                        VersionCompression = (byte)ParameterReader.valorNum;
                        break;
                    case Protocol.ET_UDPPORT:
                        PortUDP = (ushort)ParameterReader.valorNum;
                        break;
                    case Protocol.ET_UDPVER:
                        VersionUDP= (byte)ParameterReader.valorNum;
                        break;
                    case Protocol.ET_SOURCEEXCHANGE:
                        VersionSourceExchange=(byte)ParameterReader.valorNum;
                        break;
                    case Protocol.ET_COMMENTS:
                        VersionComments = (byte)ParameterReader.valorNum;
                        break;
                    case Protocol.ET_EXTENDEDREQUEST:
                        VersionExtendedRequests = (byte)ParameterReader.valorNum;
                        break;
                    case Protocol.ET_COMPATIBLECLIENT:
                        IDClientCompatible = ParameterReader.valorNum;
                        break;
                    case Protocol.ET_ELEPHANTVERSION:
                        VersionLphant = ParameterReader.valorNum & 0x00FFFFFF;
                        break;
                }
            }
            if (VersionCompression==0)
            {
                VersionSourceExchange = 0;
                VersionExtendedRequests = 0;
                VersionComments = 0;
                PortUDP = 0;
            }
            reader.Close();
            buffer.Close();
            reader=null;
            buffer=null;
        }
示例#6
0
        private bool m_LoadKnownFiles(string filefullpath,bool showErrorMessage)
        {
            FileStream knownmet=null;
            BinaryReader reader=null;
            if (filefullpath.Length==0)
                filefullpath=Path.Combine(CKernel.DllDirectory, "known.met");
            try
            {
                knownmet=File.OpenRead(filefullpath);

                reader=new BinaryReader(knownmet);

                if ( !Enum.IsDefined( typeof(Protocol.KnownMet), reader.ReadByte() ) )
                    //	if (reader.ReadByte() != 0x0E)
                {
                    reader.Close();
                    knownmet.Close();
                    CLog.Log(Constants.Log.Notify,"KNWMET_INVALID");
                    return false;
                }
                int nFiles=reader.ReadInt32();
                m_KnownMetList=new Hashtable(nFiles);
                for (uint i=0;i!=nFiles;i++)
                {
                    CKnownFileAttributes attributesKnownFile=new CKnownFileAttributes();
                    attributesKnownFile.Date=new DateTime(((long)reader.ReadUInt32()*10000000L)+621355968000000000L);
                    attributesKnownFile.FileHash=reader.ReadBytes(16);
                    ushort nChunks=reader.ReadUInt16();
                    attributesKnownFile.HashSet=new ArrayList(nChunks);
                    for (uint chunk=0;chunk!=nChunks;chunk++)
                    {
                        attributesKnownFile.HashSet.Add(reader.ReadBytes(16));
                    }
                    CParameterReader ParameterReader;
                    uint nparameters=reader.ReadUInt32();
                    for (uint parameter=0;parameter!=nparameters;parameter++)
                    {
                        ParameterReader=new CParameterReader(reader);
                        switch( (Protocol.FileTag)ParameterReader.id )
                        {
                            case Protocol.FileTag.Name:
                                attributesKnownFile.FileName=ParameterReader.valorString;
                                break;
                            case Protocol.FileTag.Size:
                                attributesKnownFile.Size=ParameterReader.valorNum;
                                break;
                            case Protocol.FileTag.Priority:
                                attributesKnownFile.Priority=(Constants.Priority)ParameterReader.valorNum;
                                break;
                            case Protocol.FileTag.Permissions:
                                attributesKnownFile.Permisions=(byte)ParameterReader.valorNum;
                                break;
                            case Protocol.FileTag.Comment:
                                attributesKnownFile.Comment=ParameterReader.valorString;
                                break;
                            case Protocol.FileTag.Rating:
                                attributesKnownFile.Rating=(byte)ParameterReader.valorNum;
                                break;
                            default:
                                break;
                                //faltan los parametros para las estadisticas....
                        }
                    }

                    if (!m_KnownMetList.ContainsKey(attributesKnownFile.FileName+(attributesKnownFile.Date.Ticks/10000000L).ToString()))
                        m_KnownMetList.Add(attributesKnownFile.FileName+(attributesKnownFile.Date.Ticks/10000000L).ToString(),attributesKnownFile);
                }

                reader.Close();
                knownmet.Close();
                return true;
            }
            catch(Exception e)
            {
                Debug.WriteLine(e.ToString());
                if (showErrorMessage) CLog.Log(Constants.Log.Notify,"Can not load known.met, hashing shared files");
                try
                {
                    if (reader!=null) reader.Close();
                    if (knownmet!=null) knownmet.Close();
                }
                catch{};
                return false;
            }
        }