bool CKademlia::FindIPByNodeID(CKadClientSearcher& requester, const uint8_t* nodeID) { wxCHECK(IsRunning() && instance && GetUDPListener(), false); // first search our known contacts if we can deliver a result without asking, otherwise forward the request CContact* contact; if ((contact = GetRoutingZone()->GetContact(CUInt128(nodeID))) != NULL) { // make sure that this entry is not too old, otherwise just do a search to be sure if (contact->GetLastSeen() != 0 && time(NULL) - contact->GetLastSeen() < 1800) { requester.KadSearchIPByNodeIDResult(KCSR_SUCCEEDED, wxUINT32_SWAP_ALWAYS(contact->GetIPAddress()), contact->GetTCPPort()); return true; } } return CSearchManager::FindNodeSpecial(CUInt128(nodeID), &requester); }
bool CKademlia::FindNodeIDByIP(CKadClientSearcher& requester, uint32_t ip, uint16_t tcpPort, uint16_t udpPort) { wxCHECK(IsRunning() && instance && GetUDPListener() && GetRoutingZone(), false); // first search our known contacts if we can deliver a result without asking, otherwise forward the request CContact* contact; if ((contact = GetRoutingZone()->GetContact(wxUINT32_SWAP_ALWAYS(ip), tcpPort, true)) != NULL) { uint8_t nodeID[16]; contact->GetClientID().ToByteArray(nodeID); requester.KadSearchNodeIDByIPResult(KCSR_SUCCEEDED, nodeID); return true; } else { return GetUDPListener()->FindNodeIDByIP(&requester, wxUINT32_SWAP_ALWAYS(ip), tcpPort, udpPort); } }
bool CKademlia::FindIPByNodeID(CKadClientSearcher& rRequester, const uchar* pachNodeID){ if (!IsRunning() || m_pInstance == NULL || GetUDPListener() == NULL){ ASSERT( false ); return false; } // first search our known contacts if we can deliver a result without asking, otherwise forward the request CContact* pContact; if ((pContact = GetRoutingZone()->GetContact(CUInt128(pachNodeID))) != NULL){ // make sure that this entry is not too old, otherwise just do a search to be sure if (pContact->GetLastSeen() != 0 && time(NULL) - pContact->GetLastSeen() < 1800){ rRequester.KadSearchIPByNodeIDResult(KCSR_SUCCEEDED, ntohl(pContact->GetIPAddress()), pContact->GetTCPPort()); return true; } } return CSearchManager::FindNodeSpecial(CUInt128(pachNodeID), &rRequester); }
bool CKademlia::FindNodeIDByIP(CKadClientSearcher& rRequester, uint32_t dwIP, uint16_t nTCPPort, uint16_t nUDPPort) { if (!IsRunning() || m_pInstance == NULL || GetUDPListener() == NULL || GetRoutingZone() == NULL){ ASSERT( false ); return false; } // first search our known contacts if we can deliver a result without asking, otherwise forward the request CContact* pContact; if ((pContact = GetRoutingZone()->GetContact(ntohl(dwIP), nTCPPort, true)) != NULL){ uchar uchID[16]; pContact->GetClientID().ToByteArray(uchID); rRequester.KadSearchNodeIDByIPResult(KCSR_SUCCEEDED, uchID); return true; } else return GetUDPListener()->FindNodeIDByIP(&rRequester, ntohl(dwIP), nTCPPort, nUDPPort); }