int CDownloadWithSources::AddSourceURLs(LPCTSTR pszURLs, BOOL bURN, BOOL bFailed) { int nCount = 0; CMapStringToFILETIME oUrls; SplitStringToURLs( pszURLs, oUrls ); for ( POSITION pos = oUrls.GetStartPosition() ; pos ; ) { CString strURL; FILETIME tSeen = {}; oUrls.GetNextAssoc( pos, strURL, tSeen ); if ( AddSourceURL( strURL, bURN, ( tSeen.dwLowDateTime | tSeen.dwHighDateTime ) ? &tSeen : NULL, 0, bFailed ) ) { if ( bFailed ) theApp.Message( MSG_DEBUG, L"Adding X-NAlt: %s", (LPCTSTR)strURL ); else theApp.Message( MSG_DEBUG, L"Adding X-Alt: %s", (LPCTSTR)strURL ); nCount++; } } return nCount; }
BOOL CDownloadWithSources::AddSourceHit(const CPeerProjectURL& oURL, BOOL bForce) { CQuickLock oLock( Transfers.m_pSection ); if ( ! AddSource( &oURL, bForce ) ) return FALSE; if ( oURL.m_pTorrent ) ((CDownload*)this)->SetTorrent( oURL.m_pTorrent ); if ( ! oURL.m_sURL.IsEmpty() && ! AddSourceURL( oURL.m_sURL ) ) return FALSE; return TRUE; }
int CDownloadWithSources::AddSourceURLs(LPCTSTR pszURLs, BOOL bURN) { CString strURLs( pszURLs ); BOOL bQuote = FALSE; for ( int nScan = 0 ; nScan < strURLs.GetLength() ; nScan++ ) { if ( strURLs[ nScan ] == '\"' ) { bQuote = ! bQuote; strURLs.SetAt( nScan, ' ' ); } else if ( strURLs[ nScan ] == ',' && bQuote ) { strURLs.SetAt( nScan, '`' ); } } strURLs += ','; int nCount = 0; for ( ; ; ) { int nPos = strURLs.Find( ',' ); if ( nPos < 0 ) break; CString strURL = strURLs.Left( nPos ); strURLs = strURLs.Mid( nPos + 1 ); strURL.TrimLeft(); FILETIME tSeen = { 0, 0 }; BOOL bSeen = FALSE; if ( _tcsistr( strURL, _T("://") ) != NULL ) { nPos = strURL.ReverseFind( ' ' ); if ( nPos > 0 ) { CString strTime = strURL.Mid( nPos + 1 ); strURL = strURL.Left( nPos ); strURL.TrimRight(); bSeen = TimeFromString( strTime, &tSeen ); } for ( int nScan = 0 ; nScan < strURL.GetLength() ; nScan++ ) { if ( strURL[ nScan ] == '`' ) strURL.SetAt( nScan, ',' ); } } else { nPos = strURL.Find( ':' ); if ( nPos < 1 ) continue; int nPort = 0; _stscanf( strURL.Mid( nPos + 1 ), _T("%i"), &nPort ); strURL.Truncate( nPos ); USES_CONVERSION; DWORD nAddress = inet_addr( T2CA( strURL ) ); strURL.Empty(); if ( ! Network.IsFirewalledAddress( &nAddress, TRUE ) && nPort != 0 && nAddress != INADDR_NONE ) { if ( m_bSHA1 ) { strURL.Format( _T("http://%s:%i/uri-res/N2R?%s"), (LPCTSTR)CString( inet_ntoa( *(IN_ADDR*)&nAddress ) ), nPort, (LPCTSTR)CSHA::HashToString( &m_pSHA1, TRUE ) ); } } } if ( AddSourceURL( strURL, bURN, bSeen ? &tSeen : NULL ) ) nCount++; } return nCount; }