Added Functions to extract DHT Query information. These functions are quite heavy (they copy lots of data)

and shouldn't be used in normal programs - only for debugging / testing.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-peernet@4302 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2011-06-19 23:56:17 +00:00
parent 0fcf56faea
commit 2372e9f3bd
8 changed files with 95 additions and 1 deletions

View File

@ -198,6 +198,35 @@ class bdBucket
std::list<bdPeer> entries;
};
class bdQueryStatus
{
public:
uint32_t mStatus;
uint32_t mQFlags;
std::list<bdId> mResults;
};
class bdQuerySummary
{
public:
bdNodeId mId;
bdMetric mLimit;
uint32_t mState;
time_t mQueryTS;
uint32_t mQueryFlags;
int32_t mSearchTime;
int32_t mQueryIdlePeerRetryPeriod; // seconds between retries.
// closest peers
std::multimap<bdMetric, bdPeer> mClosest;
std::multimap<bdMetric, bdPeer> mPotentialClosest;
std::list<bdPeer> mPotentialProxies;
};
/* Status options */
#define BITDHT_QUERY_READY 1
@ -268,6 +297,9 @@ virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from) = 0;
virtual int getDhtValue(const bdNodeId *id, std::string key, std::string &value) = 0;
virtual int getDhtBucket(const int idx, bdBucket &bucket) = 0;
virtual int getDhtQueries(std::map<bdNodeId, bdQueryStatus> &queries) = 0;
virtual int getDhtQueryStatus(const bdNodeId *id, bdQuerySummary &query) = 0;
/* stats and Dht state */
virtual int startDht() = 0;
virtual int stopDht() = 0;

View File

@ -802,6 +802,16 @@ int bdNodeManager::getDhtBucket(const int idx, bdBucket &bucket)
return mNodeSpace.getDhtBucket(idx, bucket);
}
int bdNodeManager::getDhtQueries(std::map<bdNodeId, bdQueryStatus> &queries)
{
bdNode::QueryStatus(queries);
return 1;
}
int bdNodeManager::getDhtQueryStatus(const bdNodeId *id, bdQuerySummary &query)
{
return bdNode::QuerySummary(id, query);
}
/***** Add / Remove Callback Clients *****/

View File

@ -115,6 +115,9 @@ virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from);
virtual int getDhtValue(const bdNodeId *id, std::string key, std::string &value);
virtual int getDhtBucket(const int idx, bdBucket &bucket);
virtual int getDhtQueries(std::map<bdNodeId, bdQueryStatus> &queries);
virtual int getDhtQueryStatus(const bdNodeId *id, bdQuerySummary &query);
/***** Connection Interface ****/
virtual void ConnectionRequest(struct sockaddr_in *laddr, bdNodeId *target, uint32_t mode);
virtual void ConnectionAuth(bdId *srcId, bdId *proxyId, bdId *destId,

View File

@ -686,6 +686,30 @@ void bdNode::QueryStatus(std::map<bdNodeId, bdQueryStatus> &statusMap)
}
}
int bdNode::QuerySummary(const bdNodeId *id, bdQuerySummary &query)
{
std::list<bdQuery *>::iterator it;
for(it = mLocalQueries.begin(); it != mLocalQueries.end(); it++)
{
if ((*it)->mId == *id)
{
query.mId = (*it)->mId;
query.mLimit = (*it)->mLimit;
query.mState = (*it)->mState;
query.mQueryTS = (*it)->mQueryTS;
query.mQueryFlags = (*it)->mQueryFlags;
query.mSearchTime = (*it)->mSearchTime;
query.mClosest = (*it)->mClosest;
query.mPotentialClosest = (*it)->mPotentialClosest;
query.mPotentialProxies = (*it)->mPotentialProxies;
return 1;
}
}
return 0;
}
/************************************ Process Remote Query *************************/
void bdNode::processRemoteQuery()

View File

@ -114,6 +114,7 @@ class bdNode
void addQuery(const bdNodeId *id, uint32_t qflags);
void clearQuery(const bdNodeId *id);
void QueryStatus(std::map<bdNodeId, bdQueryStatus> &statusMap);
int QuerySummary(const bdNodeId *id, bdQuerySummary &query);
/* connection functions */
void requestConnection(bdNodeId *id, uint32_t modes);

View File

@ -63,7 +63,7 @@ int printQuery();
int32_t mQueryIdlePeerRetryPeriod; // seconds between retries.
private:
//private:
// closest peers
std::multimap<bdMetric, bdPeer> mClosest;
@ -73,6 +73,8 @@ int printQuery();
bdDhtFunctions *mFns;
};
#if 0
class bdQueryStatus
{
public:
@ -81,6 +83,8 @@ class bdQueryStatus
std::list<bdId> mResults;
};
#endif
/* this is just a container class.

View File

@ -168,6 +168,23 @@ int UdpBitDht::getDhtBucket(const int idx, bdBucket &bucket)
}
int UdpBitDht::getDhtQueries(std::map<bdNodeId, bdQueryStatus> &queries)
{
bdStackMutex stack(dhtMtx); /********** MUTEX LOCKED *************/
return mBitDhtManager->getDhtQueries(queries);
}
int UdpBitDht::getDhtQueryStatus(const bdNodeId *id, bdQuerySummary &query)
{
bdStackMutex stack(dhtMtx); /********** MUTEX LOCKED *************/
return mBitDhtManager->getDhtQueryStatus(id, query);
}
/* stats and Dht state */
int UdpBitDht:: startDht()
{

View File

@ -77,6 +77,9 @@ virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from);
virtual int getDhtValue(const bdNodeId *id, std::string key, std::string &value);
virtual int getDhtBucket(const int idx, bdBucket &bucket);
virtual int getDhtQueries(std::map<bdNodeId, bdQueryStatus> &queries);
virtual int getDhtQueryStatus(const bdNodeId *id, bdQuerySummary &query);
/* stats and Dht state */
virtual int startDht();
virtual int stopDht();