Example #1
0
CCollectionFile::File* CCollectionFile::FindByURN(LPCTSTR pszURN)
{
	Hashes::Sha1Hash oSHA1;
	Hashes::TigerHash oTiger;
	Hashes::Md5Hash oMD5;
	Hashes::Ed2kHash oED2K;
	Hashes::BtHash oBTH;

	oSHA1.fromUrn( pszURN );
	oMD5.fromUrn( pszURN );
	oTiger.fromUrn( pszURN );
	oED2K.fromUrn( pszURN );
	oBTH.fromUrn( pszURN ) || oBTH.fromUrn< Hashes::base16Encoding >( pszURN );

	for ( POSITION pos = GetFileIterator(); pos; )
	{
		File* pFile = GetNextFile( pos );

		if ( validAndEqual( oSHA1, pFile->m_oSHA1 ) ) return pFile;
		if ( validAndEqual( oMD5, pFile->m_oMD5 ) ) return pFile;
		if ( validAndEqual( oTiger, pFile->m_oTiger ) ) return pFile;
		if ( validAndEqual( oED2K, pFile->m_oED2K ) ) return pFile;
		if ( validAndEqual( oBTH, pFile->m_oBTH ) ) return pFile;
	}

	return NULL;
}
BOOL CLibraryCollectionView::ShowCollection(CLibraryFile* pFile)
{
    if ( pFile != NULL )
    {
        if ( m_pCollection->IsOpen() && validAndEqual( m_oSHA1, pFile->m_oSHA1 ) )
            return TRUE;	// Already opened

        m_bTrusted = TRI_UNKNOWN;

        if ( m_pCollection->Open( pFile->GetPath() ) )
        {
            if ( SUCCEEDED( m_pWebCtrl->Navigate( CString( _T("p2p-col://") ) +
                                                  pFile->m_oSHA1.toString() + _T("/") ) ) )
            {
                m_oSHA1 = pFile->m_oSHA1;
                return TRUE;
            }
        }
    }

    m_bTrusted = TRI_UNKNOWN;

    if ( m_pCollection->IsOpen() )
    {
        m_pCollection->Close();
        if ( m_pWebCtrl != NULL )
            m_pWebCtrl->Navigate( _T("about:blank") );
    }

    return FALSE;
}
Example #3
0
CRouteCacheItem* CRouteCache::Lookup(const Hashes::Guid& oGUID, CNeighbour** ppNeighbour, SOCKADDR_IN* pEndpoint)
{
	CRouteCacheItem* pItem = m_pRecent->Find( oGUID );

	if ( pItem == NULL )
	{
		pItem = m_pHistory->Find( oGUID );

		if ( pItem == NULL )
		{
			if ( ppNeighbour ) *ppNeighbour = NULL;
			if ( pEndpoint ) ZeroMemory( pEndpoint, sizeof(SOCKADDR_IN) );

			return NULL;
		}

		ASSERT( oGUID.isValid() );
		ASSERT( pItem->m_oGUID.isValid() );
		ASSERT( validAndEqual( oGUID, pItem->m_oGUID ) );

		// This needs to be done, because CRouteCache::Add() can cause m_pHistory cache table deleted.
		// Thus need to copy data member of CRouteCacheItem if it is in m_pHistory, before it gets deleted.
		Hashes::Guid oTempGUID( pItem->m_oGUID );
		CNeighbour* pTempNeighbour = const_cast<CNeighbour*>(pItem->m_pNeighbour);
		SOCKADDR_IN pTempEndPoint = pItem->m_pEndpoint;
		DWORD tTempAddTime = pItem->m_tAdded;

		pItem = Add( oTempGUID, pTempNeighbour, &pTempEndPoint, tTempAddTime );
	}

	if ( ppNeighbour ) *ppNeighbour = (CNeighbour*)pItem->m_pNeighbour;
	if ( pEndpoint ) *pEndpoint = pItem->m_pEndpoint;

	return pItem;
}
Example #4
0
BOOL CPrivateChatWnd::Find(const Hashes::Guid& oGUID, bool bLive) const
{
	if ( m_pSession && validAndEqual( m_pSession->m_oGUID, oGUID ) )
	{
		return ( bLive == m_pSession->IsOnline() );
	}
	return FALSE;
}
Example #5
0
CEDClient* CEDClients::GetByGUID(const Hashes::Guid& oGUID) const
{
	for ( CEDClient* pClient = m_pFirst ; pClient ; pClient = pClient->m_pEdNext )
	{
		if ( validAndEqual( pClient->m_oGUID, oGUID ) ) return pClient;
	}

	return NULL;
}
Example #6
0
CCollectionFile::File* CCollectionFile::FindFile(CLibraryFile* pShared, BOOL bApply)
{
	File* pFile = NULL;

	for ( POSITION pos = GetFileIterator(); pos; )
	{
		pFile = GetNextFile( pos );
		if ( validAndEqual( pShared->m_oSHA1, pFile->m_oSHA1 ) ) break;
		if ( validAndEqual( pShared->m_oMD5, pFile->m_oMD5 ) ) break;
		if ( validAndEqual( pShared->m_oTiger, pFile->m_oTiger ) ) break;
		if ( validAndEqual( pShared->m_oED2K, pFile->m_oED2K ) ) break;
		if ( validAndEqual( pShared->m_oBTH, pFile->m_oBTH ) ) break;
		pFile = NULL;
	}

	if ( bApply && pFile != NULL )
		pFile->ApplyMetadata( pShared );

	return pFile;
}
Example #7
0
CRouteCacheItem* CRouteCacheTable::Find(const Hashes::Guid& oGUID)
{
	WORD nGUID = 0, *ppGUID = (WORD*)&oGUID[ 0 ];
	for ( int nIt = 8; nIt; nIt-- )
		nGUID = WORD( ( nGUID + *ppGUID++ ) & 0xffff );

	CRouteCacheItem* pItem = *( m_pHash + ( nGUID & ROUTE_HASH_MASK ) );

	for ( ; pItem; pItem = pItem->m_pNext )
	{
		if ( validAndEqual( oGUID, pItem->m_oGUID ) ) return pItem;
	}

	return NULL;
}
Example #8
0
CEDClient* CEDClients::GetByID(DWORD nClientID, IN_ADDR* pServer, const Hashes::Guid& oGUID) const
{
	for ( CEDClient* pClient = m_pFirst ; pClient ; pClient = pClient->m_pEdNext )
	{
		if ( pServer && pClient->m_pServer.sin_addr.S_un.S_addr != pServer->S_un.S_addr )
			continue;

		if ( pClient->m_nClientID == nClientID )
		{
			if ( ! oGUID || validAndEqual( pClient->m_oGUID, oGUID ) )
				return pClient;
		}
	}

	return NULL;
}
Example #9
0
BOOL CHostBrowser::OnPush(const Hashes::Guid& oClientID, CConnection* pConnection)
{
	//CQuickLock oTransfersLock( Transfers.m_pSection );

	// ED2K connections aren't handled here- they are in ED2KClient
	if ( m_nProtocol == PROTOCOL_ED2K || m_nProtocol == PROTOCOL_DC || m_tPushed == 0 ) return FALSE;
	if ( IsValid() || ! pConnection->IsValid() || ! validAndEqual( m_oClientID, oClientID ) ) return FALSE;

	AttachTo( pConnection );

	m_pAddress	= m_pHost.sin_addr;
	m_nPort		= htons( m_pHost.sin_port );

	SendRequest();

	return TRUE;
}
Example #10
0
CLibraryFile* CLibraryMaps::LookupFileByMD5(const Hashes::Md5Hash& oMD5, BOOL bSharedOnly, BOOL bAvailableOnly) const
{
	if ( ! oMD5 ) return NULL;

	CQuickLock oLock( Library.m_pSection );

	CLibraryFile* pFile = m_pMD5Map[ oMD5[ 0 ] & HASH_MASK ];

	for ( ; pFile ; pFile = pFile->m_pNextMD5 )
	{
		if ( validAndEqual( oMD5, pFile->m_oMD5 ) )
		{
			if ( pFile->CheckFileAttributes( SIZE_UNKNOWN, bSharedOnly, bAvailableOnly ) )
				return pFile;

			//return NULL;
		}
	}

	return NULL;
}
Example #11
0
CLibraryFile* CLibraryMaps::LookupFileByBTH(const Hashes::BtHash& oBTH, BOOL bSharedOnly, BOOL bAvailableOnly) const
{
	if ( ! oBTH ) return NULL;

	CQuickLock oLock( Library.m_pSection );

	CLibraryFile* pFile = m_pBTHMap[ oBTH[ 0 ] & HASH_MASK ];

	for ( ; pFile ; pFile = pFile->m_pNextBTH )
	{
		if ( validAndEqual( oBTH, pFile->m_oBTH ) )
		{
			if ( pFile->CheckFileAttributes( SIZE_UNKNOWN, bSharedOnly, bAvailableOnly ) )
				return pFile;

			//return NULL;
		}
	}

	return NULL;
}
Example #12
0
CLibraryFile* CLibraryMaps::LookupFileByED2K(const Hashes::Ed2kHash& oED2K, BOOL bSharedOnly, BOOL bAvailableOnly) const
{
	if ( ! oED2K ) return NULL;

	CQuickLock oLock( Library.m_pSection );

	CLibraryFile* pFile = m_pED2KMap[ oED2K[ 0 ] & HASH_MASK ];

	for ( ; pFile ; pFile = pFile->m_pNextED2K )
	{
		if ( validAndEqual( oED2K, pFile->m_oED2K ) )
		{
			if ( pFile->CheckFileAttributes( SIZE_UNKNOWN, bSharedOnly, bAvailableOnly ) )
				return pFile;

			//return NULL;
		}
	}

	return NULL;
}
Example #13
0
CLibraryFile* CLibraryMaps::LookupFileByTiger(const Hashes::TigerHash& oTiger, BOOL bSharedOnly, BOOL bAvailableOnly) const
{
	if ( ! oTiger ) return NULL;

	CQuickLock oLock( Library.m_pSection );

	CLibraryFile* pFile = m_pTigerMap[ oTiger[ 0 ] & HASH_MASK ];

	for ( ; pFile ; pFile = pFile->m_pNextTiger )
	{
		if ( validAndEqual( oTiger, pFile->m_oTiger ) )
		{
			if ( pFile->CheckFileAttributes( SIZE_UNKNOWN, bSharedOnly, bAvailableOnly ) )
				return pFile;

			//return NULL;
		}
	}

	return NULL;
}
Example #14
0
CLibraryFile* CLibraryMaps::LookupFileBySHA1(const Hashes::Sha1Hash& oSHA1, BOOL bSharedOnly, BOOL bAvailableOnly) const
{
	if ( ! oSHA1 ) return NULL;

	CQuickLock oLock( Library.m_pSection );

	CLibraryFile* pFile = m_pSHA1Map[ oSHA1[ 0 ] & HASH_MASK ];

	for ( ; pFile ; pFile = pFile->m_pNextSHA1 )
	{
		if ( validAndEqual( oSHA1, pFile->m_oSHA1 ) )
		{
			if ( pFile->CheckFileAttributes( SIZE_UNKNOWN, bSharedOnly, bAvailableOnly ) )
				return pFile;

			//return NULL;	// Note Ghost file would block matching physical file
		}
	}

	return NULL;
}
Example #15
0
CFileList* CLibraryMaps::LookupFilesByHash(const CPeerProjectFile* pFilter, BOOL bSharedOnly, BOOL bAvailableOnly, int nMaximum) const
{
	CQuickLock oLock( Library.m_pSection );

	CFileList* pFiles = NULL;

	if ( pFilter->m_oSHA1 )
	{
		for ( CLibraryFile* pFile = m_pSHA1Map[ pFilter->m_oSHA1[ 0 ] & HASH_MASK ] ;
			pFile ; pFile = pFile->m_pNextSHA1 )
		{
			if ( validAndEqual( pFile->m_oSHA1, pFilter->m_oSHA1 ) &&
				 *pFile == *pFilter &&
				 pFile->CheckFileAttributes( pFilter->m_nSize, bSharedOnly, bAvailableOnly ) )
			{
				if ( ! pFiles )
					pFiles = new CFileList;
				if ( pFiles->Find( pFile ) == NULL )
				{
					if ( bSharedOnly )
					{
						pFile->m_nHitsToday++;
						pFile->m_nHitsTotal++;
					}
					pFiles->AddTail( pFile );
					if ( nMaximum && pFiles->GetCount() >= nMaximum )
						break;
				}
			}
		}

		return pFiles;
	}

	if ( pFilter->m_oED2K )
	{
		for ( CLibraryFile* pFile = m_pED2KMap[ pFilter->m_oED2K[ 0 ] & HASH_MASK ] ;
			pFile ; pFile = pFile->m_pNextED2K )
		{
			if ( validAndEqual( pFile->m_oED2K, pFilter->m_oED2K ) &&
				 *pFile == *pFilter &&
				 pFile->CheckFileAttributes( pFilter->m_nSize, bSharedOnly, bAvailableOnly ) )
			{
				if ( ! pFiles )
					pFiles = new CFileList;
				if ( pFiles->Find( pFile ) == NULL )
				{
					if ( bSharedOnly )
					{
						pFile->m_nHitsToday++;
						pFile->m_nHitsTotal++;
					}
					pFiles->AddTail( pFile );
					if ( nMaximum && pFiles->GetCount() >= nMaximum )
						return pFiles;
				}
			}
		}

		return pFiles;
	}

	if ( pFilter->m_oTiger )
	{
		for ( CLibraryFile* pFile = m_pTigerMap[ pFilter->m_oTiger[ 0 ] & HASH_MASK ] ;
			pFile ; pFile = pFile->m_pNextTiger )
		{
			if ( validAndEqual( pFile->m_oTiger, pFilter->m_oTiger ) &&
				 *pFile == *pFilter &&
				 pFile->CheckFileAttributes( pFilter->m_nSize, bSharedOnly, bAvailableOnly ) )
			{
				if ( ! pFiles )
					pFiles = new CFileList;
				if ( pFiles->Find( pFile ) == NULL )
				{
					if ( bSharedOnly )
					{
						pFile->m_nHitsToday++;
						pFile->m_nHitsTotal++;
					}
					pFiles->AddTail( pFile );
					if ( nMaximum && pFiles->GetCount() >= nMaximum )
						break;
				}
			}
		}

		return pFiles;
	}

	if ( pFilter->m_oBTH )
	{
		for ( CLibraryFile* pFile = m_pBTHMap[ pFilter->m_oBTH[ 0 ] & HASH_MASK ] ;
			pFile ; pFile = pFile->m_pNextBTH )
		{
			if ( validAndEqual( pFile->m_oBTH, pFilter->m_oBTH ) &&
				 *pFile == *pFilter &&
				 pFile->CheckFileAttributes( pFilter->m_nSize, bSharedOnly, bAvailableOnly ) )
			{
				if ( ! pFiles )
					pFiles = new CFileList;
				if ( pFiles->Find( pFile ) == NULL )
				{
					if ( bSharedOnly )
					{
						pFile->m_nHitsToday++;
						pFile->m_nHitsTotal++;
					}
					pFiles->AddTail( pFile );
					if ( nMaximum && pFiles->GetCount() >= nMaximum )
						return pFiles;
				}
			}
		}
		return pFiles;
	}

	if ( pFilter->m_oMD5 )
	{
		// Since MD5 is not commonly used for searches we use it for the duplicate file search
		// which requires getting a list of files not to return only 1 file. See CLibrary::CheckDuplicates

		for ( CLibraryFile* pFile = m_pMD5Map[ pFilter->m_oMD5[ 0 ] & HASH_MASK ] ;
			pFile ; pFile = pFile->m_pNextMD5 )
		{
			if ( validAndEqual( pFile->m_oMD5, pFilter->m_oMD5 ) &&
				 *pFile == *pFilter &&
				 pFile->CheckFileAttributes( pFilter->m_nSize, bSharedOnly, bAvailableOnly ) )
			{
				if ( ! pFiles )
					pFiles = new CFileList;
				if ( pFiles->Find( pFile ) == NULL )
				{
					if ( bSharedOnly )
					{
						pFile->m_nHitsToday++;
						pFile->m_nHitsTotal++;
					}
					pFiles->AddTail( pFile );
					if ( nMaximum && pFiles->GetCount() >= nMaximum )
						break;
				}
			}
		}

		return pFiles;
	}

	if ( ! pFilter->m_sName.IsEmpty() &&
		pFilter->m_nSize != SIZE_UNKNOWN && pFilter->m_nSize != 0 )
	{
		if ( CLibraryFile* pFile = LibraryMaps.LookupFileByName( pFilter->m_sName, pFilter->m_nSize, bSharedOnly, bAvailableOnly ) )
		{
			if ( ! pFiles )
				pFiles = new CFileList;
			if ( pFiles->Find( pFile ) == NULL )
			{
				if ( bSharedOnly )
				{
					pFile->m_nHitsToday++;
					pFile->m_nHitsTotal++;
				}
				pFiles->AddTail( pFile );
			}
		}

		return pFiles;
	}

	return pFiles;	// Null
}