mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-04-29 03:16:15 -04:00
a bit of a hack to increase the accuracy of LocalNet accuracy.
* periodically query Rnd DhtSpace Peer with APP flag for closest peers. (i.e like own search). git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3810 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
d30d6a0444
commit
285e020f13
@ -330,10 +330,18 @@ void bdNodeManager::iteration()
|
|||||||
updateStore();
|
updateStore();
|
||||||
|
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::iteration(): REFRESH ";
|
std::cerr << "bdNodeManager::iteration(): Do App Search";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* run a random search for ourselves, from own App DHT peer */
|
||||||
|
QueryRandomLocalNet();
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DEBUG_MGR
|
||||||
|
std::cerr << "bdNodeManager::iteration(): REFRESH ";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
status();
|
status();
|
||||||
}
|
}
|
||||||
@ -374,6 +382,43 @@ void bdNodeManager::iteration()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* NB: This is a bit of a hack, the code is duplicated from bdnode & bdquery.
|
||||||
|
* should use fn calls into their functions for good generality
|
||||||
|
*/
|
||||||
|
void bdNodeManager::QueryRandomLocalNet()
|
||||||
|
{
|
||||||
|
bdId id;
|
||||||
|
bdNodeId targetNodeId;
|
||||||
|
|
||||||
|
uint32_t withFlag = BITDHT_PEER_STATUS_DHT_APPL;
|
||||||
|
if (mNodeSpace.findRandomPeerWithFlag(id, withFlag))
|
||||||
|
{
|
||||||
|
/* calculate mid point */
|
||||||
|
mFns->bdRandomMidId(&mOwnId, &(id.id), &targetNodeId);
|
||||||
|
|
||||||
|
/* do standard find_peer message */
|
||||||
|
|
||||||
|
bdToken transId;
|
||||||
|
genNewTransId(&transId);
|
||||||
|
msgout_find_node(&id, &transId, &targetNodeId);
|
||||||
|
|
||||||
|
//#ifdef DEBUG_NODE_MSGS
|
||||||
|
std::cerr << "bdNodeManager::QueryRandomLocalNet() Querying : ";
|
||||||
|
mFns->bdPrintId(std::cerr, &id);
|
||||||
|
std::cerr << " searching for : ";
|
||||||
|
mFns->bdPrintNodeId(std::cerr, &targetNodeId);
|
||||||
|
std::cerr << std::endl;
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//#ifdef DEBUG_NODE_MSGS
|
||||||
|
std::cerr << "bdNodeManager::QueryRandomLocalNet() No LocalNet Peer Found";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int bdNodeManager::status()
|
int bdNodeManager::status()
|
||||||
{
|
{
|
||||||
|
@ -139,6 +139,7 @@ int checkStatus();
|
|||||||
int checkPingStatus();
|
int checkPingStatus();
|
||||||
int SearchOutOfDate();
|
int SearchOutOfDate();
|
||||||
void startQueries();
|
void startQueries();
|
||||||
|
void QueryRandomLocalNet();
|
||||||
|
|
||||||
std::map<bdNodeId, bdQueryPeer> mActivePeers;
|
std::map<bdNodeId, bdQueryPeer> mActivePeers;
|
||||||
std::list<BitDhtCallback *> mCallbacks;
|
std::list<BitDhtCallback *> mCallbacks;
|
||||||
|
@ -945,3 +945,76 @@ uint32_t bdSpace::calcSpaceSize()
|
|||||||
return totalcount;
|
return totalcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t bdSpace::calcSpaceSizeWithFlag(uint32_t withFlag)
|
||||||
|
{
|
||||||
|
std::vector<bdBucket>::iterator it;
|
||||||
|
|
||||||
|
/* little summary */
|
||||||
|
uint32_t totalcount = 0;
|
||||||
|
|
||||||
|
it = buckets.begin();
|
||||||
|
if (it != buckets.end())
|
||||||
|
{
|
||||||
|
it++; /* skip own bucket! */
|
||||||
|
}
|
||||||
|
for(; it != buckets.end(); it++)
|
||||||
|
{
|
||||||
|
int size = 0;
|
||||||
|
std::list<bdPeer>::iterator lit;
|
||||||
|
for(lit = it->entries.begin(); lit != it->entries.end(); lit++)
|
||||||
|
{
|
||||||
|
if (withFlag & lit->mPeerFlags)
|
||||||
|
{
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
totalcount += size;
|
||||||
|
}
|
||||||
|
return totalcount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* special function to enable DHT localisation (i.e find peers from own network) */
|
||||||
|
bool bdSpace::findRandomPeerWithFlag(bdId &id, uint32_t withFlag)
|
||||||
|
{
|
||||||
|
std::vector<bdBucket>::iterator it;
|
||||||
|
uint32_t totalcount = calcSpaceSizeWithFlag(withFlag);
|
||||||
|
uint32_t rnd = rand() % totalcount;
|
||||||
|
uint32_t i = 0;
|
||||||
|
uint32_t buck = 0;
|
||||||
|
|
||||||
|
std::cerr << "bdSpace::findRandomPeerWithFlag()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
it = buckets.begin();
|
||||||
|
if (it != buckets.end())
|
||||||
|
{
|
||||||
|
it++; /* skip own bucket! */
|
||||||
|
}
|
||||||
|
for(; it != buckets.end(); it++, buck++)
|
||||||
|
{
|
||||||
|
int size = 0;
|
||||||
|
std::list<bdPeer>::iterator lit;
|
||||||
|
for(lit = it->entries.begin(); lit != it->entries.end(); lit++)
|
||||||
|
{
|
||||||
|
if (withFlag & lit->mPeerFlags)
|
||||||
|
{
|
||||||
|
if (i == rnd)
|
||||||
|
{
|
||||||
|
std::cerr << "bdSpace::findRandomPeerWithFlag() found #" << i;
|
||||||
|
std::cerr << " in bucket #" << buck;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
/* found */
|
||||||
|
id = lit->mPeerId;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cerr << "bdSpace::findRandomPeerWithFlag() failed to find " << rnd << " / " << totalcount;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -159,6 +159,10 @@ int printDHT();
|
|||||||
uint32_t calcNetworkSize();
|
uint32_t calcNetworkSize();
|
||||||
uint32_t calcNetworkSizeWithFlag(uint32_t withFlag);
|
uint32_t calcNetworkSizeWithFlag(uint32_t withFlag);
|
||||||
uint32_t calcSpaceSize();
|
uint32_t calcSpaceSize();
|
||||||
|
uint32_t calcSpaceSizeWithFlag(uint32_t withFlag);
|
||||||
|
|
||||||
|
/* special function to enable DHT localisation (i.e find peers from own network) */
|
||||||
|
bool findRandomPeerWithFlag(bdId &id, uint32_t withFlag);
|
||||||
|
|
||||||
/* to add later */
|
/* to add later */
|
||||||
int updateOwnId(bdNodeId *newOwnId);
|
int updateOwnId(bdNodeId *newOwnId);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user