Пример #1
0
 public CElement this[byte[] key]
 {
     get
     {
         try
         {
             CElement result = null;
             lock (m_FileList.SyncRoot)
             {
                 foreach (CElement element in m_FileList)
                 {
                     if (CKernel.SameHash(ref key, ref element.File.FileHash))
                     {
                         result = element;
                         break;
                     }
                 }
             }
             return(result);
         }
         catch
         {
             return(null);
         }
     }
 }
Пример #2
0
        private int m_FindFriend(uint ID, byte[] ClientHash, ushort Port)
        {
            //First: i try to locate Friend with UserHash
            if (ClientHash != null)
            {
                for (int n = 0; n != List.Count; n++)
                {
                    byte[] hashFriend = (byte[])((SFriend)List[n]).UserHash;
                    if (hashFriend != null)
                    {
                        if (CKernel.SameHash(ref ClientHash, ref hashFriend))
                        {
                            return(n);
                        }
                    }
                }
            }

            //If i did not locate Friend with UserHash, i try to locate Friend with IP&Port
            for (int n = 0; n != List.Count; n++)
            {
                if ((((SFriend)List[n]).ID == ID) && (((SFriend)List[n]).Port == Port))
                {
                    return(n);
                }
            }
            return(-1);
        }
Пример #3
0
 private bool m_Contains(byte[] fileHash)
 {
     foreach (CElement element in m_FileList)
     {
         if (CKernel.SameHash(ref fileHash, ref element.File.FileHash))
         {
             return(true);
         }
     }
     return(false);
 }
Пример #4
0
 public CSourceOld GetSourceOld(byte[] UserHash)
 {
     lock (m_ArrayList.SyncRoot)
     {
         foreach (CSourceOld sourceOld in m_ArrayList)
         {
             if (CKernel.SameHash(ref UserHash, ref sourceOld.UserHash))
             {
                 return(sourceOld);
             }
         }
     }
     return(null);
 }
Пример #5
0
 public void AddClientToFile(CClient client, byte[] FileHash)
 {
     if (client.DownFileHash == null)
     {
         client.DownFileHash = FileHash;
         CKernel.FilesList.AddSource(FileHash, ref client);
     }
     else
     {
         if (CKernel.SameHash(ref FileHash, ref client.DownFileHash))
         {
             CKernel.FilesList.AddSource(FileHash, ref client);
         }
         else
         {
             client.AddOtherDownloadFile(CKernel.HashToString(FileHash));
         }
     }
 }
Пример #6
0
 public CCCmdCachedMultiBlockFile(ArrayList cachedBlocks, uint IPProxy, byte[] fileHash, byte[] fileStatus, MemoryStream buffer)
 {
     if ((cachedBlocks != null) && (cachedBlocks.Count != 0))
     {
         BinaryWriter writer1 = new BinaryWriter(buffer);
         DonkeyHeader header1 = new DonkeyHeader(0x21, writer1, Protocol.ProtocolType.Ant);
         this.n = 0;
         writer1.Write(this.n);
         writer1.Write(IPProxy);
         writer1.Write(fileHash);
         foreach (CCachedBlock block1 in cachedBlocks)
         {
             if (((block1.Element == null) || (block1.Element.File == null)) || !CKernel.SameHash(ref fileHash, ref block1.Element.File.FileHash))
             {
                 continue;
             }
             uint num1 = CHash.GetChunkNumberAt(block1.StartOffset);
             if (fileStatus[(int)((IntPtr)num1)] == 0)
             {
                 writer1.Write(block1.IPClient);
                 writer1.Write(block1.PortClient);
                 writer1.Write(block1.StartOffset);
                 writer1.Write(block1.EndOffset);
                 writer1.Write(block1.Key);
                 writer1.Write(block1.ID);
                 this.n = (ushort)(this.n + 1);
             }
         }
         header1.Packetlength = (((uint)writer1.BaseStream.Length) - header1.Packetlength) + 1;
         writer1.Seek(0, SeekOrigin.Begin);
         header1.Serialize(writer1);
         writer1.Write(this.n);
     }
 }