コード例 #1
0
ファイル: GnuUpload.cpp プロジェクト: swax/GnucDNA
void CGnuUpload::OnConnect(int nErrorCode) 
{
	if(nErrorCode)
	{
		return;
	}

	m_Push = true;
	
	CString HttpGiv;
	
	if( m_pShell->m_Network == NETWORK_GNUTELLA )
		// GIV FileID:ClientID/FileName\n\n
		HttpGiv = "GIV " + NumtoStr(m_pShell->m_Index) + ":" + EncodeBase16((byte*) &m_pPrefs->m_ClientID, 16) + "/" + m_pShell->m_Name + "\n\n";

	if( m_pShell->m_Network == NETWORK_G2 )
		// PUSH guid:ClientID\r\n\r\n
		HttpGiv = "PUSH guid:" + EncodeBase16((byte*) &m_pPrefs->m_ClientID, 16) + "\r\n\r\n";


	m_pSocket->Send(HttpGiv, HttpGiv.GetLength());
	m_pShell->StatusUpdate(TRANSFER_CONNECTED);

	m_pShell->m_Handshake  = "";
	m_pShell->m_Handshake += HttpGiv;
}
コード例 #2
0
void AresDCProjectInfoCache::ProcessSearchResults(void)
{
	AresDataCollectorSystemReference ref;
	ref.System()->Log("Project Cache:  Processing Search Results started...");


	TinySQL regular_sql;
	
	if(!regular_sql.Init(DATABASE_ADDRESS,"onsystems","ebertsux37","ares_data",3306)){
		ref.System()->Log("Project Cache:  Failed to connect to database while processing search results");
		return;
	}

	TinySQL sql_supply;
	
	if(!sql_supply.Init(DATABASE_ADDRESS,"onsystems","ebertsux37","ares_supply",3306)){
		ref.System()->Log("Project Cache:  Failed to connect to database while processing search results");
		return;
	}

	static Timer m_last_clear;
	if(m_last_clear.HasTimedOut(60*60*2) && ref.System()->IsController()){
		regular_sql.Query("delete from ares_supply where time_created=(now()-INTERVAL 2 DAY)",false);
		regular_sql.Query("delete from ares_supply where time_created=(now()-INTERVAL 5 DAY)",false);
		regular_sql.Query("delete from ares_swarm_table where time_created<(now()-INTERVAL 2 DAY)",false);
		regular_sql.Query("delete from ares_decoys where time_created<(now()-INTERVAL 2 DAY)",false);
		regular_sql.Query("select count(*) from ares_hosts",true);
		if(regular_sql.m_num_rows>0){
			int count=atoi(regular_sql.mpp_results[0][0].c_str());
			if(count>60000)
				regular_sql.Query("delete from ares_hosts where time_created<(now()-INTERVAL 5 DAY) limit 5000",false);
		}
		m_last_clear.Refresh();
	}

	for(int project_index=0;project_index<(int)mv_projects.Size();project_index++){
		AresDCProjectInfo *proj_info=(AresDCProjectInfo*)mv_projects.Get(project_index);
		
		string table_name=GetProjectTableName(proj_info->m_name.c_str());
		while(proj_info->mv_search_results.Size()>0){
			AresSearchResult *result=(AresSearchResult*)proj_info->mv_search_results.Get(0);

			//is it an invalid size?
			if(result->m_file_size<proj_info->m_size_threashold || ((result->m_file_size%137)==0)){
				proj_info->mv_search_results.Remove(0);
				continue;
			}
			
			//does it match killwords?
			if(proj_info->DoesMatchKillwords(result->m_file_name.c_str(),result->m_artist.c_str(),result->m_title.c_str())){
				proj_info->mv_search_results.Remove(0);
				continue;
			}

			AresDCTrackInfo* ti=proj_info->DoesMatchSingle(result->m_file_name.c_str(),result->m_artist.c_str(),result->m_title.c_str());
		
			if(ti==NULL && proj_info->mv_tracks.Size()>0){
				proj_info->mv_search_results.Remove(0);
				continue;
			}

			if(proj_info->mv_tracks.Size()>0 && proj_info->m_size_threashold<5000000){
				//do we have a big file on what appears to be a music project?  its probably a music video
				if(result->m_file_size>20000000){  //don't do music videos for music projects
					proj_info->mv_search_results.Remove(0);
					continue;
				}
			}

			//if(proj_info->mv_tracks.size()==0){
			
			if(proj_info->mv_tracks.Size()==0 && proj_info->m_size_threashold>5000000){
				//make sure the search string is actually in the title and the file_name, so we can eliminate all the cross naming bs
				//we can only do this for movies, music will rarely have the search keyword in the title
				CString lc_file_name=result->m_file_name.c_str();
				lc_file_name=lc_file_name.MakeLower();

				CString lc_title=result->m_title.c_str();
				lc_title=lc_title.MakeLower();

				bool b_bad_result=false;

				for(int search_keyword_index=0;search_keyword_index<(int)proj_info->mv_search_keywords.size();search_keyword_index++){
					CString search_keyword=proj_info->mv_search_keywords[search_keyword_index].c_str();
					search_keyword=search_keyword.MakeLower();
					search_keyword=search_keyword.Trim();
					if(search_keyword.GetLength()<2)
						continue;
					if(lc_file_name.Find(search_keyword)==-1){
						b_bad_result=true;
						break;
					}
					if(lc_title.Find(search_keyword)==-1){
						b_bad_result=true;
						break;
					}
				}
				if(b_bad_result){
					proj_info->mv_search_results.Remove(0);
					continue;
				}
			}
			//}


 //project      | varchar(250) |      | PRI |            |
 //track        | int(11)      | YES  |     | NULL       |
 //file_name    | varchar(250) | YES  |     | NULL       |
 //artist       | varchar(250) | YES  |     | NULL       |
 //album        | varchar(250) | YES  |     | NULL       |
 //bitrate      | int(11)      | YES  |     | NULL       |
 //media_length | int(11)      | YES  |     | NULL       |
 //hash         | varchar(41)  |      | PRI |            |
 //time_created | date         |      | PRI | 0000-00-00 |
 //host         | int(11)      |      | PRI | 0          |

			CString query;
			CString file_name=result->m_file_name.c_str();
			CString artist=result->m_artist.c_str();
			CString album=result->m_album.c_str();
			CString comments=result->m_comments.c_str();
			CString title=result->m_title.c_str();
			CString hash=EncodeBase16(result->m_hash,20);
			CString genre=result->m_genre.c_str();
			CString user_name=result->m_user_name.c_str();

			PrepareStringForDatabase(file_name);
			PrepareStringForDatabase(artist);
			PrepareStringForDatabase(album);
			PrepareStringForDatabase(comments);
			PrepareStringForDatabase(title);
			PrepareStringForDatabase(genre);
			PrepareStringForDatabase(user_name);

			file_name=file_name.Trim();
			title=title.Trim();
			artist=artist.Trim();
			album=album.Trim();
			genre=genre.Trim();

			if(file_name.GetLength()<5){
				proj_info->mv_search_results.Remove(0);
				continue;
			}

			int track_num=0;
			if(ti!=NULL)
				track_num=ti->m_track_number;

			query.Format("insert ignore into %s values ('%s',%d,'%s','%s','%s','%s','%s','%s',%d,%d,'%s','%u',now(),%u,0)",table_name.c_str(),proj_info->m_name.c_str(),track_num,file_name,title,artist,album,genre,comments,result->m_bitrate,result->m_media_length,hash,result->m_file_size,result->m_host);
			if(!sql_supply.Query(query,false)){
				CString table_create_query;

//				project      | varchar(250) |      | PRI |
//				track        | int(11)      | YES  |     | NULL
//				file_name    | varchar(250) | YES  |     | NULL
//				title        | varchar(250) | YES  |     | NULL
//				artist       | varchar(250) | YES  |     | NULL
//				album        | varchar(250) | YES  |     | NULL
//				genre        | varchar(255) | YES  |     | NULL
//				comments     | varchar(255) | YES  |     | NULL
//				bitrate      | int(11)      | YES  |     | NULL
//				media_length | int(11)      | YES  |     | NULL
//				hash         | varchar(41)  |      | PRI |
//				size         | int(11)      | YES  |     | NULL
//				time_created | date         |      | PRI | 0000-00-00
//				host         | int(11)      |      | PRI | 0
//				amount       | int(11)      |      |     | 0

				CString log_msg;
				log_msg.Format("Project Cache:  Failed insert query because '%s'!!?",sql_supply.m_fail_reason.c_str());
				ref.System()->Log(log_msg);

				table_create_query.Format("create table %s (project varchar(250) NOT NULL,track INT,file_name varchar(250),title varchar(250),artist varchar(250),album varchar(250),genre varchar(250), comments varchar(250),bitrate INT,medialength INT,hash varchar(41) NOT NULL,size INT,time_created DATE NOT NULL,host INT NOT NULL,amount INT, primary key(project,hash,time_created,host))",
							table_name.c_str());
				if(!sql_supply.Query(table_create_query,false)){
					CString log_msg;
					log_msg.Format("Project Cache:  Failed table creation query because '%s'!!?",sql_supply.m_fail_reason.c_str());
					ref.System()->Log(log_msg);
				}
			}

			query.Format("update %s set amount=amount+1 where project='%s' and hash='%s' and size=%u and host=%u and time_created=now()",table_name.c_str(),proj_info->m_name.c_str(),hash,result->m_file_size,result->m_host);
			if(!sql_supply.Query(query,false)){
				CString log_msg;
				log_msg.Format("Project Cache:  Failed update query because '%s'!!?",sql_supply.m_fail_reason.c_str());
				ref.System()->Log(log_msg);
			}

			if(proj_info->mb_swarming || proj_info->mb_decoying){
				query.Format("insert ignore into ares_interdiction values ('%s','%s',%u,'%s',%u,'%s','%s',now())",proj_info->m_name.c_str(),hash,result->m_file_size,result->m_ip.c_str(),result->m_port,user_name,file_name);
				if(!regular_sql.Query(query,false)){
					CString log_msg;
					log_msg.Format("Project Cache:  Failed insert interdiction query because '%s'!!?",regular_sql.m_fail_reason.c_str());
					ref.System()->Log(log_msg);
				}
			}

			proj_info->mv_search_results.Remove(0);
		}
	}


	ref.System()->Log("Project Cache:  Finished processing search results");
}
コード例 #3
0
ファイル: DetailInfo.cpp プロジェクト: techpub/archive-code
CString	CDetailInfo::GetLink(CKnownFile* pFile)
{
	//ADDED by fengwen on 2007/07/12 <begin>	:	如果是url下载,则返回源url。
	if (NULL == pFile)
		return _T("");

	if (pFile->IsPartFile())
	{
		CPartFile	*pPartFile = (CPartFile	*) pFile;
		if ( pPartFile->HasNullHash() )
			return pPartFile->GetPartFileURL();
	}
	//ADDED by fengwen on 2007/07/12 <end>	:	如果是url下载,则返回源url。

	CString strLinks;
	CString strBuffer;

	bool bHashset = false;
	bool bHTML = false;
//	bool bSource = true;
//	bool bHostname  = true;
	bool bEMHash = true;

	if (!strLinks.IsEmpty())
		strLinks += _T("\r\n\r\n");

	if (bHTML)
		strLinks += _T("<a href=\"");

	//const CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*pFile)[i]);
	const CKnownFile* file = pFile;
	strLinks += CreateED2kLink(file, false);

	if (bHashset && file->GetHashCount() > 0 && file->GetHashCount() == file->GetED2KPartHashCount())
	{
		strLinks += _T("p=");
		for (UINT j = 0; j < file->GetHashCount(); j++)
		{
			if (j > 0)
				strLinks += _T(':');
			strLinks += EncodeBase16(file->GetPartHash(j), 16);
		}
		strLinks += _T('|');
	}

	if (bEMHash && file->GetAICHHashset()->HasValidMasterHash() && 
		(file->GetAICHHashset()->GetStatus() == AICH_VERIFIED || file->GetAICHHashset()->GetStatus() == AICH_HASHSETCOMPLETE))
	{
		strBuffer.Format(_T("h=%s|"), file->GetAICHHashset()->GetMasterHash().GetString() );
		strLinks += strBuffer;			
	}
    if(!strLinks.IsEmpty())
	    strLinks += _T('/');
	//if (bHostname)
	//{
	//	strBuffer.Format(_T("|sources,%s:%i|/"), thePrefs.GetYourHostname(), thePrefs.GetPort() );
	//	strLinks += strBuffer;
	//}
	//else if(bSource)
	//{
	//	uint32 dwID = CGlobalVariable::GetID();
	//	strBuffer.Format(_T("|sources,%i.%i.%i.%i:%i|/"),(uint8)dwID,(uint8)(dwID>>8),(uint8)(dwID>>16),(uint8)(dwID>>24), thePrefs.GetPort() );
	//	strLinks += strBuffer;
	//}

	if (bHTML)
		strLinks += _T("\">") + StripInvalidFilenameChars(file->GetFileName(), true) + _T("</a>");

	return strLinks;
}
コード例 #4
0
int CPartFileConvert::performConvertToeMule(CString folder)
{
	BOOL bWorking;
	CString filepartindex,newfilename;
	CString buffer;
	UINT fileindex;
	CFileFind finder;
	
	CString partfile=folder;
	folder.Delete(folder.ReverseFind('\\'),folder.GetLength());
	partfile=partfile.Mid(partfile.ReverseFind('\\')+1,partfile.GetLength());


	UpdateGUI(0,GetResString(IDS_IMP_STEPREADPF),true);

	filepartindex=partfile.Left(partfile.Find('.'));
	//int pos=filepartindex.ReverseFind('\\');
	//if (pos>-1) filepartindex=filepartindex.Mid(pos+1,filepartindex.GetLength()-pos);

	UpdateGUI(4,GetResString(IDS_IMP_STEPBASICINF));

	CPartFile* file=new CPartFile();
	EPartFileFormat eFormat = PMT_UNKNOWN;
		
	if (file->LoadPartFile(folder, partfile, &eFormat) == PLR_CHECKSUCCESS)
	{
		pfconverting->partmettype = (uint8_t)eFormat;
		switch (pfconverting->partmettype)
		{
			case PMT_UNKNOWN:
			case PMT_BADFORMAT:
				delete file;
				return CONV_BADFORMAT;
				break;
		}
	}
	else
	{
		delete file;
		return CONV_BADFORMAT;
	}

	CString oldfile=folder+_T("\\")+partfile.Left(partfile.GetLength()- ((pfconverting->partmettype==PMT_SHAREAZA)?3:4) );

	pfconverting->size=file->GetFileSize();
	pfconverting->filename=file->GetFileName();
	pfconverting->filehash= EncodeBase16( file->GetFileHash() ,16);
	UpdateGUI(pfconverting);

	if (theApp.downloadqueue->GetFileByID(file->GetFileHash())!=0) {
		delete file;
		return CONV_ALREADYEXISTS;
	}
	
	if (pfconverting->partmettype==PMT_SPLITTED ) {
		try {
			CByteArray ba;
			ba.SetSize(PARTSIZE);

			CFile inputfile;
			int pos1,pos2;
			CString filename;

			// just count
			UINT maxindex=0;
			UINT partfilecount=0;
			bWorking = finder.FindFile(folder+_T("\\")+filepartindex+_T(".*.part"));
			while (bWorking)
			{
				bWorking = finder.FindNextFile();
				++partfilecount;
				buffer=finder.GetFileName();
				pos1=buffer.Find('.');
				pos2=buffer.Find('.',pos1+1);
				fileindex=_tstoi(buffer.Mid(pos1+1,pos2-pos1) );
				if (fileindex==0) continue;
				if (fileindex>maxindex) maxindex=fileindex;
			}
			float stepperpart;
			if (partfilecount>0) {
				stepperpart=(80.0f / partfilecount );
				if ((uint64_t)maxindex*PARTSIZE<=pfconverting->size) pfconverting->spaceneeded=(uint64_t)maxindex*PARTSIZE;
					else pfconverting->spaceneeded=((uint64_t)(pfconverting->size / PARTSIZE) * PARTSIZE)+(pfconverting->size % PARTSIZE);
			} else {
				stepperpart=80.0f;
				pfconverting->spaceneeded=0;
			}
			
			UpdateGUI(pfconverting);

			if (GetFreeDiskSpaceX(thePrefs.GetTempDir()) < ((uint64_t)maxindex*PARTSIZE) ) {
				delete file;
				return CONV_OUTOFDISKSPACE;
			}

			// create new partmetfile, and remember the new name
			file->CreatePartFile();
			newfilename=file->GetFullName();

			UpdateGUI(8,GetResString(IDS_IMP_STEPCRDESTFILE));
			file->m_hpartfile.SetLength( pfconverting->spaceneeded );

			uint16_t curindex=0;
			bWorking = finder.FindFile(folder+_T("\\")+filepartindex+_T(".*.part"));
			while (bWorking)
			{
				bWorking = finder.FindNextFile();
				
				//stats
				++curindex;
				buffer.Format(GetResString(IDS_IMP_LOADDATA),curindex,partfilecount);
				UpdateGUI( 10+(curindex*stepperpart) ,buffer);

				filename=finder.GetFileName();
				pos1=filename.Find('.');
				pos2=filename.Find('.',pos1+1);
				fileindex=_tstoi(filename.Mid(pos1+1,pos2-pos1) );
				if (fileindex==0) continue;

				uint32_t chunkstart=(uint32_t)(fileindex-1) * PARTSIZE ;

				// open, read data of the part-part-file into buffer, close file
				inputfile.Open(finder.GetFilePath(),CFile::modeRead|CFile::shareDenyWrite);
				uint32_t readed=inputfile.Read( ba.GetData() ,PARTSIZE);
				inputfile.Close();

				buffer.Format(GetResString(IDS_IMP_SAVEDATA),curindex,partfilecount);
				UpdateGUI( 10+(curindex*stepperpart) ,buffer);

				// write the buffered data
				file->m_hpartfile.Seek(chunkstart, CFile::begin );
				file->m_hpartfile.Write(ba.GetData(),readed);
			}
		}
		catch(CFileException* error) {
			CString strError(GetResString(IDS_IMP_IOERROR));
			TCHAR szError[MAX_CFEXP_ERRORMSG];
			if (error->GetErrorMessage(szError, _countof(szError))){
				strError += _T(" - ");
				strError += szError;
			}
			LogError(false, _T("%s"), strError);
			error->Delete();
			delete file;
			return CONV_IOERROR;
		}
		file->m_hpartfile.Close();
	}
	// import an external common format partdownload
	else //if (pfconverting->partmettype==PMT_DEFAULTOLD || pfconverting->partmettype==PMT_NEWOLD || Shareaza  ) 
	{
		
		if (!pfconverting->removeSource) 
			pfconverting->spaceneeded = (UINT)GetDiskFileSize(oldfile);

		UpdateGUI(pfconverting);

		if (!pfconverting->removeSource && (GetFreeDiskSpaceX(thePrefs.GetTempDir()) < pfconverting->spaceneeded) ) {
			delete file;
			return CONV_OUTOFDISKSPACE;
		}

		file->CreatePartFile();
		newfilename=file->GetFullName();

		file->m_hpartfile.Close();

		BOOL ret=FALSE;
		UpdateGUI( 92 ,GetResString(IDS_COPY));
		DeleteFile(newfilename.Left(newfilename.GetLength()-4));

		if (!PathFileExists(oldfile)) {
			// data file does not exist. well, then create a 0 byte big one
			HANDLE hFile = CreateFile( newfilename.Left(newfilename.GetLength()-4) ,    // file to open
							GENERIC_WRITE,          // open for reading
							FILE_SHARE_READ,       // share for reading
							NULL,                  // default security
							CREATE_NEW,         // existing file only
							FILE_ATTRIBUTE_NORMAL, // normal file
							NULL);                 // no attr. template
			 
			ret= !(hFile == INVALID_HANDLE_VALUE) ;

			CloseHandle(hFile);
		}
			else 
		if (pfconverting->removeSource) 
			ret=MoveFile( oldfile, newfilename.Left(newfilename.GetLength()-4) );
		else 
			ret=CopyFile( oldfile, newfilename.Left(newfilename.GetLength()-4) ,false);

		if (!ret) {
			file->DeleteFile();
			//delete file;
			return CONV_FAILED;
		}

	}


	UpdateGUI( 94 ,GetResString(IDS_IMP_GETPFINFO));

	DeleteFile(newfilename);
	if (pfconverting->removeSource)
		MoveFile(folder+_T("\\")+partfile,newfilename);
	else CopyFile(folder+_T("\\")+partfile,newfilename,false);


	file->m_hasharray.release();
	for ( GapList::iterator it = file->gaplist.begin(); it != file->gaplist.end(); ++it ) {
		delete *it;
	}
	file->gaplist.clear();

	if (file->LoadPartFile(thePrefs.GetTempDir(), file->GetPartMetFileName()) != PLR_LOADSUCCESS) {
		//delete file;
		file->DeleteFile();
		return CONV_BADFORMAT;
	}

	if (pfconverting->partmettype==PMT_NEWOLD || pfconverting->partmettype==PMT_SPLITTED ) {
		file->completedsize = file->m_uTransferred;
		file->m_uCompressionGain = 0;
		file->m_uCorruptionLoss = 0;
	}

	UpdateGUI( 100 ,GetResString(IDS_IMP_ADDDWL));

	theApp.downloadqueue->AddDownload(file,thePrefs.AddNewFilesPaused());
	file->SavePartFile();
	
	if (file->GetStatus(true) == PS_READY)
		theApp.sharedfiles->SafeAddKFile(file); // part files are always shared files


	if (pfconverting->removeSource) {

		bWorking = finder.FindFile(folder+_T("\\")+filepartindex+_T(".*"));
		while (bWorking)
		{
			bWorking = finder.FindNextFile();
			VERIFY( _tunlink(finder.GetFilePath()) == 0 );
		}

		if (pfconverting->partmettype==PMT_SPLITTED)
			RemoveDirectory(folder+_T("\\"));
	}

	return CONV_OK;
}