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; }
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"); }
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; }
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; }