示例#1
0
文件: Client.cs 项目: elnomade/hathi
 public void ProcessFileRequest(byte[] packet)
 {
     #if VERBOSE
     CKernel.LogClient.AddLog("ProcessFileRequest",m_ID);
     #endif
     CFileRequest fileRequest=new CFileRequest(new MemoryStream(packet));
     if (fileRequest.FileHash==null)
     return;
     m_UpFileHash=fileRequest.FileHash;
     byte[] tmp_UploadFileHash=fileRequest.FileHash;
     m_UploadElement=(CElement)CKernel.FilesList[m_UpFileHash];
     CElement tmpUploadElement=m_UploadElement;
     if ((m_UploadElement==null)||(m_UploadElement.File.Empty))
     {
     /*  Dont need to send no file found,we have sent it already in ProcessRequestFileID
     *   MemoryStream buffer=new MemoryStream();
     *   CNoFile noFile=new CNoFile(buffer,m_UpFileHash);
     *   m_UpFileHash=null;
     *   m_UploadElement=null;
     *   if (connection!=null) connection.SendPacket(buffer);
     */
     }
     else
     {
     #if VERBOSE
     CKernel.LogClient.AddLog("ProcessFileRequest-send file info",m_ID);
     #endif
     m_UploadElement.Statistics.IncSessionRequests();
     if ((fileRequest.Partes!=null)
             &&(fileRequest.Partes.Length==m_UploadElement.File.NumChunks))
     {
         m_UpFileChunks=fileRequest.Partes;
     }
     MemoryStream fileInfoPacket=new MemoryStream();
     CFileInfo fileInfo=new CFileInfo(m_UpFileHash,m_UploadElement.File.FileName,fileInfoPacket);
     if (connection!=null)
     {
         connection.SendPacket(fileInfoPacket);
     }
     m_SendComment();
     }
     // it can be a new source for downloads
     if ((tmpUploadElement!=null)
         &&(tmpUploadElement.SourcesList!=null)
         &&(!tmpUploadElement.File.Completed)
         &&(tmpUploadElement.File.FileStatus==Protocol.FileState.Ready))
     {
     if (DownFileHash==null)
     {
     #if VERBOSE
         CKernel.LogClient.AddLog("ProcessFileRequest-add client to downloads",m_ID);
     #endif
         DownFileHash=new byte[16];
         Buffer.BlockCopy(tmpUploadElement.File.FileHash,0,DownFileHash,0,16);
         m_DownloadElement=tmpUploadElement;
         m_DownloadState=Protocol.DownloadState.Connected;
         if (tmpUploadElement.SourcesList.AddSource(this))
         {
             TryDownload();
         }
         else
         {
             m_DownloadState=Protocol.DownloadState.None;
         }
     }
     else
     {
         if (!CKernel.SameHash(ref DownFileHash,ref tmpUploadElement.File.FileHash))
             AddOtherDownloadFile(CKernel.HashToString(tmp_UploadFileHash));
     }
     }
 }
示例#2
0
文件: Client.cs 项目: elnomade/hathi
 public void ProcessFileInfo(byte[] packet)
 {
     #if VERBOSE
     CKernel.LogClient.AddLog("ProcessFileInfo",m_ID);
     #endif
     if (DownFileHash==null) return;
     CFileInfo fileInformation=new CFileInfo(new MemoryStream(packet));
     if (!CKernel.SameHash(ref fileInformation.FileHash,ref DownFileHash))
     {
     #if VERBOSE
     CKernel.LogClient.AddLog("ProcessFileInfo-no match hashes",m_ID);
     #endif
     // raise exception
     // m_DownloadElement.SourcesList.RemoveSource(this);
     Exception e=new Exception("File info hash!=DownFileHash");
     throw(e);
     }
     m_ClientFileName=fileInformation.ClientFileName;
 }