void CDownloadWithTiger::ClearVerification() { ResetVerification(); if ( m_pTigerBlock != NULL ) delete [] m_pTigerBlock; if ( m_pHashsetBlock != NULL ) delete [] m_pHashsetBlock; m_pTigerBlock = NULL; m_nTigerBlock = 0; m_pHashsetBlock = NULL; m_nHashsetBlock = 0; m_pTigerTree.Clear(); m_pHashset.Clear(); m_nVerifyCookie++; SetModified(); }
BOOL CDownload::SeedTorrent() { if ( IsMoving() || IsCompleted() ) return FALSE; ASSERT( IsFileOpen() == FALSE ); if ( IsFileOpen() ) return FALSE; ASSERT( m_pTorrent.GetCount() ); augment::auto_ptr< CFragmentedFile > pFragmentedFile( new CFragmentedFile ); if ( ! pFragmentedFile.get() ) return FALSE; // Out of memory if ( ! pFragmentedFile->Open( m_pTorrent, FALSE ) ) { SetFileError( pFragmentedFile->GetFileError(), pFragmentedFile->GetFileErrorString() ); return FALSE; } AttachFile( pFragmentedFile.release() ); if ( IsSingleFileTorrent() ) { // Refill missing hashes for single-file torrent const CBTInfo::CBTFile* pBTFile = m_pTorrent.m_pFiles.GetHead(); if ( ! m_pTorrent.m_oSHA1 && pBTFile->m_oSHA1 ) m_pTorrent.m_oSHA1 = pBTFile->m_oSHA1; if ( ! m_pTorrent.m_oTiger && pBTFile->m_oTiger ) m_pTorrent.m_oTiger = pBTFile->m_oTiger; if ( ! m_pTorrent.m_oED2K && pBTFile->m_oED2K ) m_pTorrent.m_oED2K = pBTFile->m_oED2K; if ( ! m_pTorrent.m_oMD5 && pBTFile->m_oMD5 ) m_pTorrent.m_oMD5 = pBTFile->m_oMD5; // Refill missed hash for library file CQuickLock oLock( Library.m_pSection ); if ( CLibraryFile* pLibraryFile = LibraryMaps.LookupFileByPath( pBTFile->FindFile() ) ) { if ( ! pLibraryFile->m_oBTH && m_oBTH ) { Library.RemoveFile( pLibraryFile ); pLibraryFile->m_oBTH = m_oBTH; Library.AddFile( pLibraryFile ); } } } // Refill missing hashes if ( ! m_oSHA1 && m_pTorrent.m_oSHA1 ) m_oSHA1 = m_pTorrent.m_oSHA1; if ( ! m_oTiger && m_pTorrent.m_oTiger ) m_oTiger = m_pTorrent.m_oTiger; if ( ! m_oED2K && m_pTorrent.m_oED2K ) m_oED2K = m_pTorrent.m_oED2K; if ( ! m_oMD5 && m_pTorrent.m_oMD5 ) m_oMD5 = m_pTorrent.m_oMD5; GenerateTorrentDownloadID(); m_bSeeding = TRUE; m_bComplete = true; m_tCompleted = GetTickCount(); m_bVerify = TRI_TRUE; memset( m_pTorrentBlock, TRI_TRUE, m_nTorrentBlock ); m_nTorrentSuccess = m_nTorrentBlock; MakeComplete(); ResetVerification(); return TRUE; }