📄 searchmanager.cpp
字号:
break; } case CSearch::NOTES: { if (current_it->second->m_created + SEARCHNOTES_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else if (current_it->second->GetAnswers() > SEARCHNOTES_TOTAL || current_it->second->m_created + SEARCHNOTES_LIFETIME - SEC(20) < now) { current_it->second->PrepareToStop(); } else { current_it->second->JumpStart(); } break; } case CSearch::FINDBUDDY: { if (current_it->second->m_created + SEARCHFINDBUDDY_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else if (current_it->second->GetAnswers() > SEARCHFINDBUDDY_TOTAL || current_it->second->m_created + SEARCHFINDBUDDY_LIFETIME - SEC(20) < now) { current_it->second->PrepareToStop(); } else { current_it->second->JumpStart(); } break; } case CSearch::FINDSOURCE: { if (current_it->second->m_created + SEARCHFINDSOURCE_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else if (current_it->second->GetAnswers() > SEARCHFINDSOURCE_TOTAL || current_it->second->m_created + SEARCHFINDSOURCE_LIFETIME - SEC(20) < now) { current_it->second->PrepareToStop(); } else { current_it->second->JumpStart(); } break; } case CSearch::NODE: case CSearch::NODESPECIAL: case CSearch::NODEFWCHECKUDP: { if (current_it->second->m_created + SEARCHNODE_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else { current_it->second->JumpStart(); } break; } case CSearch::NODECOMPLETE: { if (current_it->second->m_created + SEARCHNODE_LIFETIME < now) { // Tell Kad it can start publishing. CKademlia::GetPrefs()->SetPublish(true); delete current_it->second; m_searches.erase(current_it); } else if ((current_it->second->m_created + SEARCHNODECOMP_LIFETIME < now) && (current_it->second->GetAnswers() > SEARCHNODECOMP_TOTAL)) { // Tell Kad it can start publishing. CKademlia::GetPrefs()->SetPublish(true); delete current_it->second; m_searches.erase(current_it); } else { current_it->second->JumpStart(); } break; } case CSearch::STOREFILE: { if (current_it->second->m_created + SEARCHSTOREFILE_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else if (current_it->second->GetAnswers() > SEARCHSTOREFILE_TOTAL || current_it->second->m_created + SEARCHSTOREFILE_LIFETIME - SEC(20) < now) { current_it->second->PrepareToStop(); } else { current_it->second->JumpStart(); } break; } case CSearch::STOREKEYWORD: { if (current_it->second->m_created + SEARCHSTOREKEYWORD_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else if (current_it->second->GetAnswers() > SEARCHSTOREKEYWORD_TOTAL || current_it->second->m_created + SEARCHSTOREKEYWORD_LIFETIME - SEC(20)< now) { current_it->second->PrepareToStop(); } else { current_it->second->JumpStart(); } break; } case CSearch::STORENOTES: { if (current_it->second->m_created + SEARCHSTORENOTES_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else if (current_it->second->GetAnswers() > SEARCHSTORENOTES_TOTAL || current_it->second->m_created + SEARCHSTORENOTES_LIFETIME - SEC(20)< now) { current_it->second->PrepareToStop(); } else { current_it->second->JumpStart(); } break; } default: { if (current_it->second->m_created + SEARCH_LIFETIME < now) { delete current_it->second; m_searches.erase(current_it); } else { current_it->second->JumpStart(); } break; } } }}void CSearchManager::UpdateStats() throw(){ uint8_t m_totalFile = 0; uint8_t m_totalStoreSrc = 0; uint8_t m_totalStoreKey = 0; uint8_t m_totalSource = 0; uint8_t m_totalNotes = 0; uint8_t m_totalStoreNotes = 0; for (SearchMap::iterator it = m_searches.begin(); it != m_searches.end(); ++it) { switch(it->second->GetSearchTypes()){ case CSearch::FILE: { m_totalFile++; break; } case CSearch::STOREFILE: { m_totalStoreSrc++; break; } case CSearch::STOREKEYWORD: { m_totalStoreKey++; break; } case CSearch::FINDSOURCE: { m_totalSource++; break; } case CSearch::STORENOTES: { m_totalStoreNotes++; break; } case CSearch::NOTES: { m_totalNotes++; break; } default: break; } } CPrefs *prefs = CKademlia::GetPrefs(); prefs->SetTotalFile(m_totalFile); prefs->SetTotalStoreSrc(m_totalStoreSrc); prefs->SetTotalStoreKey(m_totalStoreKey); prefs->SetTotalSource(m_totalSource); prefs->SetTotalNotes(m_totalNotes); prefs->SetTotalStoreNotes(m_totalStoreNotes);}void CSearchManager::ProcessPublishResult(const CUInt128& target, const uint8_t load, const bool loadResponse){ // We tried to publish some info and got a result. CSearch *s = NULL; SearchMap::const_iterator it = m_searches.find(target); if (it != m_searches.end()) { s = it->second; } // Result could be very late and store deleted, abort. if (s == NULL) { return; } switch (s->GetSearchTypes()) { case CSearch::STOREKEYWORD: { if (loadResponse) { s->UpdateNodeLoad(load); } break; } case CSearch::STOREFILE: case CSearch::STORENOTES: break; } s->m_answers++;}void CSearchManager::ProcessResponse(const CUInt128& target, uint32_t fromIP, uint16_t fromPort, ContactList *results){ // We got a response to a kad lookup. CSearch *s = NULL; SearchMap::const_iterator it = m_searches.find(target); if (it != m_searches.end()) { s = it->second; } // If this search was deleted before this response, delete contacts and abort, otherwise process them. if (s == NULL) { AddDebugLogLineM(false, logKadSearch, wxT("Search either never existed or receiving late results (CSearchManager::ProcessResponse)")); for (ContactList::const_iterator it2 = results->begin(); it2 != results->end(); ++it2) { delete *it2; } delete results; return; } else { s->ProcessResponse(fromIP, fromPort, results); }}void CSearchManager::ProcessResult(const CUInt128& target, const CUInt128& answer, TagPtrList *info){ // We have results for a request for info. CSearch *s = NULL; SearchMap::const_iterator it = m_searches.find(target); if (it != m_searches.end()) { s = it->second; } // If this search was deleted before these results, delete contacts and abort, otherwise process them. if (s == NULL) { AddDebugLogLineM (false, logKadSearch, wxT("Search either never existed or receiving late results (CSearchManager::ProcessResult)")); for (TagPtrList::const_iterator tagIt = info->begin(); tagIt != info->end(); tagIt++) { delete *tagIt; } delete info; } else { s->ProcessResult(answer, info); }}bool CSearchManager::FindNodeSpecial(const CUInt128& id, CKadClientSearcher *requester){ // Do a node lookup. AddDebugLogLineM(false, logKadSearch, wxT("Starting NODESPECIAL Kad Search for ") + id.ToHexString()); CSearch *search = new CSearch; search->SetSearchTypes(CSearch::NODESPECIAL); search->SetTargetID(id); search->SetNodeSpecialSearchRequester(requester); return StartSearch(search);}bool CSearchManager::FindNodeFWCheckUDP(){ CancelNodeFWCheckUDPSearch(); CUInt128 id; id.SetValueRandom(); AddDebugLogLineM(false, logKadSearch, wxT("Starting NODEFWCHECKUDP Kad Search")); CSearch *search = new CSearch; search->SetSearchTypes(CSearch::NODEFWCHECKUDP); search->SetTargetID(id); return StartSearch(search);}void CSearchManager::CancelNodeSpecial(CKadClientSearcher* requester){ // Stop a specific nodespecialsearch for (SearchMap::iterator it = m_searches.begin(); it != m_searches.end(); ++it) { if (it->second->GetNodeSpecialSearchRequester() == requester) { it->second->SetNodeSpecialSearchRequester(NULL); it->second->PrepareToStop(); return; } }}void CSearchManager::CancelNodeFWCheckUDPSearch(){ // Stop node searches done for udp firewallcheck for (SearchMap::iterator it = m_searches.begin(); it != m_searches.end(); ++it) { if (it->second->GetSearchTypes() == CSearch::NODEFWCHECKUDP) { it->second->PrepareToStop(); } }}// File_checked_for_headers
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -