mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-07 22:22:45 -04:00
* Added new interface functions for start / stop DHT and to get stats.
* Implemented start/stop interface in udpbitdht and bemanager * added Restart of DHT if it fails to get going. * added start / stop functionality to bdnode and bdstore * added cleanup code to rest of bitdht classes. * reworked NetworkSize calc functions. * added thread debugging (prints at start / stop / join). * TESTS: added utest.h header file for automated unit testing (from libretroshare) * TESTS: bdmetric_test started conversion to automated tests * TESTS: udpbitdht_nettest. Added dht start / stop and network reset (thread join) functionality. * TESTS: fresh bdboot.txt git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3678 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
884f0e7a22
commit
74961774cc
18 changed files with 1193 additions and 601 deletions
|
@ -277,3 +277,11 @@ int bdHashSpace::cleanHashSpace(bdNodeId *min, bdNodeId *max, time_t maxAge)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int bdHashSpace::clear()
|
||||||
|
{
|
||||||
|
mHashTable.clear();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ int modify(bdNodeId *id, std::string key, bdHashEntry *entry, uint32_t modFlags
|
||||||
|
|
||||||
int printHashSpace(std::ostream&);
|
int printHashSpace(std::ostream&);
|
||||||
int cleanHashSpace(bdNodeId *min, bdNodeId *max, time_t maxAge);
|
int cleanHashSpace(bdNodeId *min, bdNodeId *max, time_t maxAge);
|
||||||
|
int clear();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -176,6 +176,12 @@ virtual void removeCallback(BitDhtCallback *cb) = 0;
|
||||||
virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from) = 0;
|
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 getDhtValue(const bdNodeId *id, std::string key, std::string &value) = 0;
|
||||||
|
|
||||||
|
/* stats and Dht state */
|
||||||
|
virtual int startDht() = 0;
|
||||||
|
virtual int stopDht() = 0;
|
||||||
|
virtual int stateDht() = 0; /* STOPPED, STARTING, ACTIVE, FAILED */
|
||||||
|
virtual uint32_t statsNetworkSize() = 0;
|
||||||
|
virtual uint32_t statsBDVersionSize() = 0; /* same version as us! */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -54,13 +54,17 @@
|
||||||
* #define DEBUG_MGR_PKT 1
|
* #define DEBUG_MGR_PKT 1
|
||||||
***/
|
***/
|
||||||
|
|
||||||
|
|
||||||
bdNodeManager::bdNodeManager(bdNodeId *id, std::string dhtVersion, std::string bootfile, bdDhtFunctions *fns)
|
bdNodeManager::bdNodeManager(bdNodeId *id, std::string dhtVersion, std::string bootfile, bdDhtFunctions *fns)
|
||||||
:bdNode(id, dhtVersion, bootfile, fns)
|
:bdNode(id, dhtVersion, bootfile, fns)
|
||||||
{
|
{
|
||||||
mMode = BITDHT_MGR_STATE_STARTUP;
|
mMode = BITDHT_MGR_STATE_OFF;
|
||||||
mFns = fns;
|
mFns = fns;
|
||||||
mModeTS = 0 ;
|
mModeTS = 0 ;
|
||||||
|
|
||||||
|
mNetworkSize = 0;
|
||||||
|
mBdNetworkSize = 0;
|
||||||
|
|
||||||
/* setup a query for self */
|
/* setup a query for self */
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::bdNodeManager() ID: ";
|
std::cerr << "bdNodeManager::bdNodeManager() ID: ";
|
||||||
|
@ -69,6 +73,57 @@ bdNodeManager::bdNodeManager(bdNodeId *id, std::string dhtVersion, std::string b
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bdNodeManager::stopDht()
|
||||||
|
{
|
||||||
|
time_t now = time(NULL);
|
||||||
|
|
||||||
|
/* clean up node */
|
||||||
|
shutdownNode();
|
||||||
|
|
||||||
|
/* flag queries as inactive */
|
||||||
|
/* check if exists already */
|
||||||
|
std::map<bdNodeId, bdQueryPeer>::iterator it;
|
||||||
|
for(it = mActivePeers.begin(); it != mActivePeers.end(); it++)
|
||||||
|
{
|
||||||
|
it->second.mStatus = BITDHT_QUERY_READY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set state flag */
|
||||||
|
mMode = BITDHT_MGR_STATE_OFF;
|
||||||
|
mModeTS = now;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bdNodeManager::startDht()
|
||||||
|
{
|
||||||
|
time_t now = time(NULL);
|
||||||
|
|
||||||
|
/* set startup mode */
|
||||||
|
restartNode();
|
||||||
|
|
||||||
|
mMode = BITDHT_MGR_STATE_STARTUP;
|
||||||
|
mModeTS = now;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* STOPPED, STARTING, ACTIVE, FAILED */
|
||||||
|
int bdNodeManager::stateDht()
|
||||||
|
{
|
||||||
|
return mMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t bdNodeManager::statsNetworkSize()
|
||||||
|
{
|
||||||
|
return mNetworkSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* same version as us! */
|
||||||
|
uint32_t bdNodeManager::statsBDVersionSize()
|
||||||
|
{
|
||||||
|
return mBdNetworkSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void bdNodeManager::addFindNode(bdNodeId *id, uint32_t qflags)
|
void bdNodeManager::addFindNode(bdNodeId *id, uint32_t qflags)
|
||||||
|
@ -166,6 +221,15 @@ void bdNodeManager::iteration()
|
||||||
time_t modeAge = now - mModeTS;
|
time_t modeAge = now - mModeTS;
|
||||||
switch(mMode)
|
switch(mMode)
|
||||||
{
|
{
|
||||||
|
case BITDHT_MGR_STATE_OFF:
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_MGR
|
||||||
|
std::cerr << "bdNodeManager::iteration(): OFF";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case BITDHT_MGR_STATE_STARTUP:
|
case BITDHT_MGR_STATE_STARTUP:
|
||||||
/* 10 seconds startup .... then switch to ACTIVE */
|
/* 10 seconds startup .... then switch to ACTIVE */
|
||||||
|
|
||||||
|
@ -189,19 +253,28 @@ void bdNodeManager::iteration()
|
||||||
#define MAX_FINDSELF_TIME 60
|
#define MAX_FINDSELF_TIME 60
|
||||||
#define MIN_OP_SPACE_SIZE 100
|
#define MIN_OP_SPACE_SIZE 100
|
||||||
|
|
||||||
|
{
|
||||||
|
uint32_t nodeSpaceSize = mNodeSpace.calcSpaceSize();
|
||||||
|
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::iteration() Finding Oneself: NodeSpace Size:" << mNodeSpace.size();
|
std::cerr << "bdNodeManager::iteration() Finding Oneself: ";
|
||||||
|
std::cerr << "NodeSpace Size:" << nodeSpaceSize;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((modeAge > MAX_FINDSELF_TIME) ||
|
if (nodeSpaceSize > MIN_OP_SPACE_SIZE)
|
||||||
(mNodeSpace.size() > MIN_OP_SPACE_SIZE))
|
|
||||||
{
|
{
|
||||||
//mMode = BITDHT_MGR_STATE_ACTIVE;
|
|
||||||
mMode = BITDHT_MGR_STATE_REFRESH;
|
mMode = BITDHT_MGR_STATE_REFRESH;
|
||||||
mModeTS = now;
|
mModeTS = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (modeAge > MAX_FINDSELF_TIME)
|
||||||
|
{
|
||||||
|
mMode = BITDHT_MGR_STATE_FAILED;
|
||||||
|
mModeTS = now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BITDHT_MGR_STATE_ACTIVE:
|
case BITDHT_MGR_STATE_ACTIVE:
|
||||||
|
@ -253,15 +326,37 @@ void bdNodeManager::iteration()
|
||||||
|
|
||||||
case BITDHT_MGR_STATE_QUIET:
|
case BITDHT_MGR_STATE_QUIET:
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_MGR
|
||||||
|
std::cerr << "bdNodeManager::iteration(): QUIET";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
case BITDHT_MGR_STATE_FAILED:
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_MGR
|
||||||
|
std::cerr << "bdNodeManager::iteration(): FAILED ==> STARTUP";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
stopDht();
|
||||||
|
startDht();
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mMode == BITDHT_MGR_STATE_OFF)
|
||||||
|
{
|
||||||
|
bdNode::iterationOff();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* tick parent */
|
/* tick parent */
|
||||||
bdNode::iteration();
|
bdNode::iteration();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -272,6 +367,11 @@ int bdNodeManager::status()
|
||||||
|
|
||||||
checkStatus();
|
checkStatus();
|
||||||
|
|
||||||
|
/* update the network numbers */
|
||||||
|
mNetworkSize = mNodeSpace.calcNetworkSize();
|
||||||
|
mBdNetworkSize = mNodeSpace.calcNetworkSizeWithFlag(
|
||||||
|
BITDHT_PEER_STATUS_DHT_APPL);
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,11 +70,13 @@ class bdQueryPeer
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define BITDHT_MGR_STATE_OFF 0
|
||||||
#define BITDHT_MGR_STATE_STARTUP 1
|
#define BITDHT_MGR_STATE_STARTUP 1
|
||||||
#define BITDHT_MGR_STATE_FINDSELF 2
|
#define BITDHT_MGR_STATE_FINDSELF 2
|
||||||
#define BITDHT_MGR_STATE_ACTIVE 3
|
#define BITDHT_MGR_STATE_ACTIVE 3
|
||||||
#define BITDHT_MGR_STATE_REFRESH 4
|
#define BITDHT_MGR_STATE_REFRESH 4
|
||||||
#define BITDHT_MGR_STATE_QUIET 5
|
#define BITDHT_MGR_STATE_QUIET 5
|
||||||
|
#define BITDHT_MGR_STATE_FAILED 6
|
||||||
|
|
||||||
#define MAX_STARTUP_TIME 10
|
#define MAX_STARTUP_TIME 10
|
||||||
#define MAX_REFRESH_TIME 10
|
#define MAX_REFRESH_TIME 10
|
||||||
|
@ -112,6 +114,12 @@ virtual void removeCallback(BitDhtCallback *cb);
|
||||||
virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from);
|
virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from);
|
||||||
virtual int getDhtValue(const bdNodeId *id, std::string key, std::string &value);
|
virtual int getDhtValue(const bdNodeId *id, std::string key, std::string &value);
|
||||||
|
|
||||||
|
/* stats and Dht state */
|
||||||
|
virtual int startDht();
|
||||||
|
virtual int stopDht();
|
||||||
|
virtual int stateDht(); /* STOPPED, STARTING, ACTIVE, FAILED */
|
||||||
|
virtual uint32_t statsNetworkSize();
|
||||||
|
virtual uint32_t statsBDVersionSize(); /* same version as us! */
|
||||||
/******************* Internals *************************/
|
/******************* Internals *************************/
|
||||||
|
|
||||||
// Overloaded from bdnode for external node callback.
|
// Overloaded from bdnode for external node callback.
|
||||||
|
@ -140,6 +148,9 @@ void startQueries();
|
||||||
|
|
||||||
bdDhtFunctions *mFns;
|
bdDhtFunctions *mFns;
|
||||||
|
|
||||||
|
uint32_t mNetworkSize;
|
||||||
|
uint32_t mBdNetworkSize;
|
||||||
|
|
||||||
/* future node functions */
|
/* future node functions */
|
||||||
//addPeerPing(foundId);
|
//addPeerPing(foundId);
|
||||||
//clearPing(it->first);
|
//clearPing(it->first);
|
||||||
|
|
|
@ -61,41 +61,7 @@
|
||||||
bdNode::bdNode(bdNodeId *ownId, std::string dhtVersion, std::string bootfile, bdDhtFunctions *fns)
|
bdNode::bdNode(bdNodeId *ownId, std::string dhtVersion, std::string bootfile, bdDhtFunctions *fns)
|
||||||
:mOwnId(*ownId), mNodeSpace(ownId, fns), mStore(bootfile, fns), mDhtVersion(dhtVersion), mFns(fns)
|
:mOwnId(*ownId), mNodeSpace(ownId, fns), mStore(bootfile, fns), mDhtVersion(dhtVersion), mFns(fns)
|
||||||
{
|
{
|
||||||
/* setup */
|
resetStats();
|
||||||
bdPeer peer;
|
|
||||||
while(mStore.getPeer(&peer))
|
|
||||||
{
|
|
||||||
addPotentialPeer(&(peer.mPeerId));
|
|
||||||
}
|
|
||||||
mCounterOutOfDatePing = 0;
|
|
||||||
mCounterPings = 0;
|
|
||||||
mCounterPongs = 0;
|
|
||||||
mCounterQueryNode = 0;
|
|
||||||
mCounterQueryHash = 0;
|
|
||||||
mCounterReplyFindNode = 0;
|
|
||||||
mCounterReplyQueryHash = 0;
|
|
||||||
|
|
||||||
mCounterRecvPing = 0;
|
|
||||||
mCounterRecvPong = 0;
|
|
||||||
mCounterRecvQueryNode = 0;
|
|
||||||
mCounterRecvQueryHash = 0;
|
|
||||||
mCounterRecvReplyFindNode = 0;
|
|
||||||
mCounterRecvReplyQueryHash = 0;
|
|
||||||
|
|
||||||
mLpfOutOfDatePing = 0;
|
|
||||||
mLpfPings = 0;
|
|
||||||
mLpfPongs = 0;
|
|
||||||
mLpfQueryNode = 0;
|
|
||||||
mLpfQueryHash = 0;
|
|
||||||
mLpfReplyFindNode = 0;
|
|
||||||
mLpfReplyQueryHash = 0;
|
|
||||||
|
|
||||||
mLpfRecvPing = 0;
|
|
||||||
mLpfRecvPong = 0;
|
|
||||||
mLpfRecvQueryNode = 0;
|
|
||||||
mLpfRecvQueryHash = 0;
|
|
||||||
mLpfRecvReplyFindNode = 0;
|
|
||||||
mLpfRecvReplyQueryHash = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bdNode::getOwnId(bdNodeId *id)
|
void bdNode::getOwnId(bdNodeId *id)
|
||||||
|
@ -103,19 +69,47 @@ void bdNode::getOwnId(bdNodeId *id)
|
||||||
*id = mOwnId;
|
*id = mOwnId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***** Startup / Shutdown ******/
|
||||||
|
void bdNode::restartNode()
|
||||||
#if 0
|
|
||||||
void bdNode::run()
|
|
||||||
{
|
{
|
||||||
|
resetStats();
|
||||||
|
|
||||||
|
mStore.reloadFromStore();
|
||||||
|
|
||||||
/* setup */
|
/* setup */
|
||||||
while(1)
|
bdPeer peer;
|
||||||
|
while(mStore.getPeer(&peer))
|
||||||
{
|
{
|
||||||
iteration();
|
addPotentialPeer(&(peer.mPeerId));
|
||||||
sleep(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
void bdNode::shutdownNode()
|
||||||
|
{
|
||||||
|
/* clear the queries */
|
||||||
|
mLocalQueries.clear();
|
||||||
|
mRemoteQueries.clear();
|
||||||
|
|
||||||
|
/* clear the space */
|
||||||
|
mNodeSpace.clear();
|
||||||
|
mHashSpace.clear();
|
||||||
|
|
||||||
|
/* clear other stuff */
|
||||||
|
mPotentialPeers.clear();
|
||||||
|
mStore.clear();
|
||||||
|
|
||||||
|
/* clean up any outgoing messages */
|
||||||
|
while(mOutgoingMsgs.size() > 0)
|
||||||
|
{
|
||||||
|
bdNodeNetMsg *msg = mOutgoingMsgs.front();
|
||||||
|
mOutgoingMsgs.pop_front();
|
||||||
|
|
||||||
|
/* cleanup message */
|
||||||
|
delete msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Crappy initial store... use bdspace as answer */
|
/* Crappy initial store... use bdspace as answer */
|
||||||
void bdNode::updateStore()
|
void bdNode::updateStore()
|
||||||
|
@ -156,6 +150,20 @@ void bdNode::printQueries()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void bdNode::iterationOff()
|
||||||
|
{
|
||||||
|
/* clean up any incoming messages */
|
||||||
|
while(mIncomingMsgs.size() > 0)
|
||||||
|
{
|
||||||
|
bdNodeNetMsg *msg = mIncomingMsgs.front();
|
||||||
|
mIncomingMsgs.pop_front();
|
||||||
|
|
||||||
|
/* cleanup message */
|
||||||
|
delete msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void bdNode::iteration()
|
void bdNode::iteration()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_NODE_MULTIPEER
|
#ifdef DEBUG_NODE_MULTIPEER
|
||||||
|
@ -313,14 +321,6 @@ void bdNode::doStats()
|
||||||
mLpfReplyQueryHash *= (LPF_FACTOR);
|
mLpfReplyQueryHash *= (LPF_FACTOR);
|
||||||
mLpfReplyQueryHash += (1.0 - LPF_FACTOR) * mCounterReplyQueryHash;
|
mLpfReplyQueryHash += (1.0 - LPF_FACTOR) * mCounterReplyQueryHash;
|
||||||
|
|
||||||
mCounterOutOfDatePing = 0;
|
|
||||||
mCounterPings = 0;
|
|
||||||
mCounterPongs = 0;
|
|
||||||
mCounterQueryNode = 0;
|
|
||||||
mCounterQueryHash = 0;
|
|
||||||
mCounterReplyFindNode = 0;
|
|
||||||
mCounterReplyQueryHash = 0;
|
|
||||||
|
|
||||||
mLpfRecvPing *= (LPF_FACTOR);
|
mLpfRecvPing *= (LPF_FACTOR);
|
||||||
mLpfRecvPing += (1.0 - LPF_FACTOR) * mCounterRecvPing;
|
mLpfRecvPing += (1.0 - LPF_FACTOR) * mCounterRecvPing;
|
||||||
mLpfRecvPong *= (LPF_FACTOR);
|
mLpfRecvPong *= (LPF_FACTOR);
|
||||||
|
@ -334,12 +334,8 @@ void bdNode::doStats()
|
||||||
mLpfRecvReplyQueryHash *= (LPF_FACTOR);
|
mLpfRecvReplyQueryHash *= (LPF_FACTOR);
|
||||||
mLpfRecvReplyQueryHash += (1.0 - LPF_FACTOR) * mCounterRecvReplyQueryHash;
|
mLpfRecvReplyQueryHash += (1.0 - LPF_FACTOR) * mCounterRecvReplyQueryHash;
|
||||||
|
|
||||||
mCounterRecvPing = 0;
|
|
||||||
mCounterRecvPong = 0;
|
resetCounters();
|
||||||
mCounterRecvQueryNode = 0;
|
|
||||||
mCounterRecvQueryHash = 0;
|
|
||||||
mCounterRecvReplyFindNode = 0;
|
|
||||||
mCounterRecvReplyQueryHash = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bdNode::printStats(std::ostream &out)
|
void bdNode::printStats(std::ostream &out)
|
||||||
|
@ -370,8 +366,43 @@ void bdNode::printStats(std::ostream &out)
|
||||||
out << std::endl;
|
out << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bdNode::resetCounters()
|
||||||
|
{
|
||||||
|
mCounterOutOfDatePing = 0;
|
||||||
|
mCounterPings = 0;
|
||||||
|
mCounterPongs = 0;
|
||||||
|
mCounterQueryNode = 0;
|
||||||
|
mCounterQueryHash = 0;
|
||||||
|
mCounterReplyFindNode = 0;
|
||||||
|
mCounterReplyQueryHash = 0;
|
||||||
|
|
||||||
|
mCounterRecvPing = 0;
|
||||||
|
mCounterRecvPong = 0;
|
||||||
|
mCounterRecvQueryNode = 0;
|
||||||
|
mCounterRecvQueryHash = 0;
|
||||||
|
mCounterRecvReplyFindNode = 0;
|
||||||
|
mCounterRecvReplyQueryHash = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bdNode::resetStats()
|
||||||
|
{
|
||||||
|
mLpfOutOfDatePing = 0;
|
||||||
|
mLpfPings = 0;
|
||||||
|
mLpfPongs = 0;
|
||||||
|
mLpfQueryNode = 0;
|
||||||
|
mLpfQueryHash = 0;
|
||||||
|
mLpfReplyFindNode = 0;
|
||||||
|
mLpfReplyQueryHash = 0;
|
||||||
|
|
||||||
|
mLpfRecvPing = 0;
|
||||||
|
mLpfRecvPong = 0;
|
||||||
|
mLpfRecvQueryNode = 0;
|
||||||
|
mLpfRecvQueryHash = 0;
|
||||||
|
mLpfRecvReplyFindNode = 0;
|
||||||
|
mLpfRecvReplyQueryHash = 0;
|
||||||
|
|
||||||
|
resetCounters();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void bdNode::checkPotentialPeer(bdId *id)
|
void bdNode::checkPotentialPeer(bdId *id)
|
||||||
|
@ -694,7 +725,7 @@ void bdNode::msgout_pong(bdId *id, bdToken *transId)
|
||||||
|
|
||||||
/* generate message, send to udp */
|
/* generate message, send to udp */
|
||||||
bdToken vid;
|
bdToken vid;
|
||||||
int vlen = BITDHT_TOKEN_MAX_LEN;
|
uint32_t vlen = BITDHT_TOKEN_MAX_LEN;
|
||||||
if (mDhtVersion.size() < vlen)
|
if (mDhtVersion.size() < vlen)
|
||||||
{
|
{
|
||||||
vlen = mDhtVersion.size();
|
vlen = mDhtVersion.size();
|
||||||
|
|
|
@ -97,6 +97,10 @@ class bdNode
|
||||||
bdNode(bdNodeId *id, std::string dhtVersion, std::string bootfile,
|
bdNode(bdNodeId *id, std::string dhtVersion, std::string bootfile,
|
||||||
bdDhtFunctions *fns);
|
bdDhtFunctions *fns);
|
||||||
|
|
||||||
|
/* startup / shutdown node */
|
||||||
|
void restartNode();
|
||||||
|
void shutdownNode();
|
||||||
|
|
||||||
// virtual so manager can do callback.
|
// virtual so manager can do callback.
|
||||||
// peer flags defined in bdiface.h
|
// peer flags defined in bdiface.h
|
||||||
virtual void addPeer(const bdId *id, uint32_t peerflags);
|
virtual void addPeer(const bdId *id, uint32_t peerflags);
|
||||||
|
@ -109,6 +113,7 @@ class bdNode
|
||||||
void clearQuery(const bdNodeId *id);
|
void clearQuery(const bdNodeId *id);
|
||||||
void QueryStatus(std::map<bdNodeId, bdQueryStatus> &statusMap);
|
void QueryStatus(std::map<bdNodeId, bdQueryStatus> &statusMap);
|
||||||
|
|
||||||
|
void iterationOff();
|
||||||
void iteration();
|
void iteration();
|
||||||
void processRemoteQuery();
|
void processRemoteQuery();
|
||||||
void updateStore();
|
void updateStore();
|
||||||
|
@ -176,6 +181,8 @@ void recvPkt(char *msg, int len, struct sockaddr_in addr);
|
||||||
void printStats(std::ostream &out);
|
void printStats(std::ostream &out);
|
||||||
void printQueries();
|
void printQueries();
|
||||||
|
|
||||||
|
void resetCounters();
|
||||||
|
void resetStats();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
|
@ -313,6 +313,19 @@ bdSpace::bdSpace(bdNodeId *ownId, bdDhtFunctions *fns)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* empty the buckets */
|
||||||
|
int bdSpace::clear()
|
||||||
|
{
|
||||||
|
std::vector<bdBucket>::iterator it;
|
||||||
|
/* iterate through the buckets, and sort by distance */
|
||||||
|
for(it = buckets.begin(); it != buckets.end(); it++)
|
||||||
|
{
|
||||||
|
it->entries.clear();
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int bdSpace::find_nearest_nodes(const bdNodeId *id, int number, std::list<bdId> /*excluding*/, std::multimap<bdMetric, bdId> &nearest)
|
int bdSpace::find_nearest_nodes(const bdNodeId *id, int number, std::list<bdId> /*excluding*/, std::multimap<bdMetric, bdId> &nearest)
|
||||||
{
|
{
|
||||||
std::multimap<bdMetric, bdId> closest;
|
std::multimap<bdMetric, bdId> closest;
|
||||||
|
@ -735,7 +748,84 @@ int bdSpace::printDHT()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int bdSpace::calcSizes()
|
uint32_t bdSpace::calcNetworkSize()
|
||||||
|
{
|
||||||
|
std::vector<bdBucket>::iterator it;
|
||||||
|
|
||||||
|
/* little summary */
|
||||||
|
unsigned long long sum = 0;
|
||||||
|
unsigned long long no_peers = 0;
|
||||||
|
uint32_t count = 0;
|
||||||
|
bool doPrint = false;
|
||||||
|
bool doAvg = false;
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for(it = buckets.begin(); it != buckets.end(); it++, i++)
|
||||||
|
{
|
||||||
|
int size = it->entries.size();
|
||||||
|
int shift = BITDHT_KEY_BITLEN - i;
|
||||||
|
bool toBig = false;
|
||||||
|
|
||||||
|
if (shift > BITDHT_ULLONG_BITS - mFns->bdBucketBitSize() - 1)
|
||||||
|
{
|
||||||
|
toBig = true;
|
||||||
|
shift = BITDHT_ULLONG_BITS - mFns->bdBucketBitSize() - 1;
|
||||||
|
}
|
||||||
|
unsigned long long no_nets = ((unsigned long long) 1 << shift);
|
||||||
|
|
||||||
|
/* use doPrint so it acts as a single switch */
|
||||||
|
if (size && !doAvg && !doPrint)
|
||||||
|
{
|
||||||
|
doAvg = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size && !doPrint)
|
||||||
|
{
|
||||||
|
doPrint = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == 0)
|
||||||
|
{
|
||||||
|
/* reset counters - if empty slot - to discount outliers in average */
|
||||||
|
sum = 0;
|
||||||
|
no_peers = 0;
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!toBig)
|
||||||
|
{
|
||||||
|
no_peers = no_nets * size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doPrint && doAvg && !toBig)
|
||||||
|
{
|
||||||
|
if (size == mFns->bdNodesPerBucket())
|
||||||
|
{
|
||||||
|
/* last average */
|
||||||
|
doAvg = false;
|
||||||
|
}
|
||||||
|
if (no_peers != 0)
|
||||||
|
{
|
||||||
|
sum += no_peers;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t NetSize = 0;
|
||||||
|
if (count != 0)
|
||||||
|
{
|
||||||
|
NetSize = sum / count;
|
||||||
|
}
|
||||||
|
|
||||||
|
//std::cerr << "bdSpace::calcNetworkSize() : " << NetSize;
|
||||||
|
//std::cerr << std::endl;
|
||||||
|
|
||||||
|
return NetSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t bdSpace::calcNetworkSizeWithFlag(uint32_t withFlag)
|
||||||
{
|
{
|
||||||
std::vector<bdBucket>::iterator it;
|
std::vector<bdBucket>::iterator it;
|
||||||
|
|
||||||
|
@ -750,7 +840,16 @@ int bdSpace::calcSizes()
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(it = buckets.begin(); it != buckets.end(); it++, i++)
|
for(it = buckets.begin(); it != buckets.end(); it++, i++)
|
||||||
{
|
{
|
||||||
int size = it->entries.size();
|
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;
|
totalcount += size;
|
||||||
|
|
||||||
int shift = BITDHT_KEY_BITLEN - i;
|
int shift = BITDHT_KEY_BITLEN - i;
|
||||||
|
@ -804,31 +903,29 @@ int bdSpace::calcSizes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
mLastSize = totalcount;
|
uint32_t NetSize = 0;
|
||||||
if (count == 0)
|
if (count != 0)
|
||||||
{
|
{
|
||||||
mLastNetSize = 0;
|
NetSize = sum / count;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mLastNetSize = sum / count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
//std::cerr << "bdSpace::calcNetworkSize() : " << NetSize;
|
||||||
|
//std::cerr << std::endl;
|
||||||
|
|
||||||
|
return NetSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t bdSpace::size()
|
|
||||||
|
uint32_t bdSpace::calcSpaceSize()
|
||||||
{
|
{
|
||||||
calcSizes();
|
std::vector<bdBucket>::iterator it;
|
||||||
return mLastSize;
|
|
||||||
|
/* little summary */
|
||||||
|
uint32_t totalcount = 0;
|
||||||
|
for(it = buckets.begin(); it != buckets.end(); it++)
|
||||||
|
{
|
||||||
|
totalcount += it->entries.size();
|
||||||
|
}
|
||||||
|
return totalcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t bdSpace::netSize()
|
|
||||||
{
|
|
||||||
calcSizes();
|
|
||||||
return mLastNetSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -146,6 +146,8 @@ class bdSpace
|
||||||
|
|
||||||
bdSpace(bdNodeId *ownId, bdDhtFunctions *fns);
|
bdSpace(bdNodeId *ownId, bdDhtFunctions *fns);
|
||||||
|
|
||||||
|
int clear();
|
||||||
|
|
||||||
/* accessors */
|
/* accessors */
|
||||||
int find_nearest_nodes(const bdNodeId *id, int number,
|
int find_nearest_nodes(const bdNodeId *id, int number,
|
||||||
std::list<bdId> excluding, std::multimap<bdMetric, bdId> &nearest);
|
std::list<bdId> excluding, std::multimap<bdMetric, bdId> &nearest);
|
||||||
|
@ -154,9 +156,9 @@ int out_of_date_peer(bdId &id); // side-effect updates, send flag on peer.
|
||||||
int add_peer(const bdId *id, uint32_t mode);
|
int add_peer(const bdId *id, uint32_t mode);
|
||||||
int printDHT();
|
int printDHT();
|
||||||
|
|
||||||
int calcSizes();
|
uint32_t calcNetworkSize();
|
||||||
uint32_t size();
|
uint32_t calcNetworkSizeWithFlag(uint32_t withFlag);
|
||||||
uint32_t netSize();
|
uint32_t calcSpaceSize();
|
||||||
|
|
||||||
/* to add later */
|
/* to add later */
|
||||||
int updateOwnId(bdNodeId *newOwnId);
|
int updateOwnId(bdNodeId *newOwnId);
|
||||||
|
@ -166,9 +168,6 @@ int updateOwnId(bdNodeId *newOwnId);
|
||||||
std::vector<bdBucket> buckets;
|
std::vector<bdBucket> buckets;
|
||||||
bdNodeId mOwnId;
|
bdNodeId mOwnId;
|
||||||
bdDhtFunctions *mFns;
|
bdDhtFunctions *mFns;
|
||||||
|
|
||||||
uint32_t mLastSize;
|
|
||||||
uint32_t mLastNetSize;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,14 +41,27 @@ bdStore::bdStore(std::string file, bdDhtFunctions *fns)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* read data from file */
|
/* read data from file */
|
||||||
mIndex = 0;
|
|
||||||
mStoreFile = file;
|
mStoreFile = file;
|
||||||
|
|
||||||
FILE *fd = fopen(file.c_str(), "r");
|
reloadFromStore();
|
||||||
|
}
|
||||||
|
|
||||||
|
int bdStore::clear()
|
||||||
|
{
|
||||||
|
mIndex = 0;
|
||||||
|
store.clear();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bdStore::reloadFromStore()
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
|
||||||
|
FILE *fd = fopen(mStoreFile.c_str(), "r");
|
||||||
if (!fd)
|
if (!fd)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to Open File: %s ... No Peers\n", file.c_str());
|
fprintf(stderr, "Failed to Open File: %s ... No Peers\n", mStoreFile.c_str());
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -84,6 +97,8 @@ bdStore::bdStore(std::string file, bdDhtFunctions *fns)
|
||||||
fprintf(stderr, "Read %ld Peers\n", (long) store.size());
|
fprintf(stderr, "Read %ld Peers\n", (long) store.size());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int bdStore::getPeer(bdPeer *peer)
|
int bdStore::getPeer(bdPeer *peer)
|
||||||
|
|
|
@ -36,6 +36,10 @@ class bdStore
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bdStore(std::string file, bdDhtFunctions *fns);
|
bdStore(std::string file, bdDhtFunctions *fns);
|
||||||
|
|
||||||
|
int reloadFromStore(); /* for restarts */
|
||||||
|
int clear();
|
||||||
|
|
||||||
int getPeer(bdPeer *peer);
|
int getPeer(bdPeer *peer);
|
||||||
void addStore(bdPeer *peer);
|
void addStore(bdPeer *peer);
|
||||||
void writeStore(std::string file);
|
void writeStore(std::string file);
|
||||||
|
|
|
@ -1,500 +1,500 @@
|
||||||
142.177.246.95 59112
|
117.207.214.217 54937
|
||||||
116.2.32.161 20124
|
|
||||||
188.126.46.50 44950
|
|
||||||
95.179.25.105 20206
|
|
||||||
95.68.47.164 30021
|
|
||||||
58.123.157.201 26652
|
|
||||||
201.153.228.202 21677
|
|
||||||
121.44.92.49 46001
|
|
||||||
80.98.231.47 26348
|
|
||||||
77.81.214.54 55140
|
|
||||||
188.2.177.127 18893
|
|
||||||
77.106.248.215 61010
|
|
||||||
92.40.218.25 17436
|
|
||||||
79.11.74.201 25511
|
|
||||||
124.217.18.33 52665
|
|
||||||
110.139.49.2 10021
|
|
||||||
116.75.93.225 17753
|
|
||||||
91.154.247.194 47519
|
|
||||||
85.157.34.95 39877
|
|
||||||
87.207.198.164 57380
|
|
||||||
76.88.103.96 6688
|
|
||||||
69.156.182.48 9745
|
|
||||||
174.118.75.21 57528
|
|
||||||
78.131.114.243 35625
|
|
||||||
85.120.227.7 39679
|
|
||||||
67.21.102.65 61696
|
|
||||||
90.20.253.243 17134
|
|
||||||
77.106.112.192 63044
|
|
||||||
89.132.70.154 54892
|
|
||||||
89.228.34.41 11402
|
|
||||||
99.16.45.162 58728
|
|
||||||
114.169.35.228 10609
|
|
||||||
119.247.254.79 5294
|
|
||||||
62.194.214.11 53956
|
|
||||||
86.140.220.164 63805
|
|
||||||
89.209.84.223 45645
|
|
||||||
71.176.151.158 34312
|
|
||||||
87.252.246.164 10004
|
|
||||||
174.6.184.150 55074
|
|
||||||
122.116.144.204 6881
|
|
||||||
188.126.95.124 51422
|
|
||||||
178.40.80.76 14409
|
|
||||||
71.167.112.211 6881
|
|
||||||
204.210.194.241 6881
|
|
||||||
99.0.82.216 51494
|
|
||||||
109.124.16.234 11636
|
|
||||||
220.131.73.187 20718
|
|
||||||
178.88.8.252 56292
|
|
||||||
83.87.238.214 6881
|
|
||||||
87.78.183.103 24204
|
|
||||||
92.249.133.6 6754
|
|
||||||
81.225.216.54 53358
|
|
||||||
89.166.108.48 47175
|
|
||||||
109.194.46.208 80
|
|
||||||
24.252.70.24 52516
|
|
||||||
78.154.10.6 35981
|
|
||||||
99.1.110.3 22440
|
|
||||||
201.53.55.59 61292
|
|
||||||
95.58.92.65 48802
|
|
||||||
89.178.134.24 64389
|
|
||||||
76.215.117.211 51413
|
|
||||||
114.27.89.171 43349
|
|
||||||
80.99.42.137 10566
|
|
||||||
187.20.103.130 16333
|
|
||||||
213.85.141.144 46456
|
|
||||||
85.186.48.10 25274
|
|
||||||
70.48.43.93 59364
|
|
||||||
114.154.228.24 14512
|
|
||||||
202.67.20.232 13380
|
|
||||||
94.15.164.174 45657
|
|
||||||
151.56.153.203 10006
|
|
||||||
92.243.177.118 26338
|
|
||||||
95.71.69.196 25226
|
|
||||||
98.117.36.191 56023
|
|
||||||
209.222.54.23 6881
|
|
||||||
79.141.52.134 48614
|
|
||||||
82.4.38.3 60580
|
|
||||||
77.160.150.63 12348
|
|
||||||
95.132.188.142 16747
|
|
||||||
89.123.135.44 12967
|
|
||||||
24.242.52.51 41199
|
|
||||||
84.3.164.209 38059
|
|
||||||
67.61.48.132 51772
|
|
||||||
75.51.92.53 46369
|
|
||||||
61.56.132.76 23439
|
|
||||||
112.104.6.195 21025
|
|
||||||
78.116.106.245 29797
|
|
||||||
62.205.245.195 43207
|
|
||||||
188.24.228.246 48433
|
|
||||||
188.241.183.77 41892
|
|
||||||
95.78.151.107 28055
|
|
||||||
91.144.104.160 40122
|
|
||||||
203.135.35.68 16058
|
|
||||||
94.180.34.231 18040
|
|
||||||
216.186.213.183 34057
|
|
||||||
182.88.83.202 6881
|
|
||||||
188.163.76.190 51413
|
|
||||||
77.71.45.107 63222
|
|
||||||
71.63.16.85 44949
|
|
||||||
68.215.227.132 50513
|
|
||||||
62.228.103.223 11249
|
|
||||||
118.168.199.192 21018
|
|
||||||
89.103.74.81 11790
|
|
||||||
77.110.201.72 55144
|
|
||||||
87.21.255.123 32743
|
|
||||||
72.39.132.149 11229
|
|
||||||
178.49.20.218 42235
|
|
||||||
87.121.209.168 27230
|
|
||||||
118.108.135.76 22708
|
|
||||||
112.144.249.69 17601
|
|
||||||
85.210.192.179 53929
|
|
||||||
95.143.216.174 25887
|
|
||||||
95.43.73.227 25933
|
|
||||||
208.70.61.203 18073
|
|
||||||
70.178.206.42 24881
|
|
||||||
189.24.23.171 60416
|
|
||||||
62.201.119.41 61849
|
|
||||||
87.206.75.146 6881
|
|
||||||
78.176.207.54 6881
|
|
||||||
78.163.164.237 24362
|
|
||||||
99.190.51.250 59551
|
|
||||||
76.252.236.215 19134
|
|
||||||
98.242.28.163 26145
|
|
||||||
99.50.200.151 53564
|
|
||||||
220.98.144.232 22922
|
|
||||||
79.113.121.141 35771
|
|
||||||
98.148.246.127 50300
|
|
||||||
142.68.210.47 63653
|
|
||||||
218.168.225.229 22678
|
|
||||||
92.104.49.179 8500
|
|
||||||
173.32.63.117 61054
|
|
||||||
87.121.173.150 6148
|
|
||||||
83.251.66.66 65052
|
|
||||||
91.154.137.162 11984
|
|
||||||
80.171.58.170 22797
|
|
||||||
94.27.109.220 36053
|
|
||||||
118.160.53.83 12731
|
|
||||||
216.138.216.227 49001
|
|
||||||
187.16.62.58 63388
|
|
||||||
121.80.39.231 18252
|
|
||||||
213.112.106.243 18786
|
|
||||||
79.113.182.121 42808
|
|
||||||
82.119.65.229 41614
|
|
||||||
121.124.190.173 50282
|
|
||||||
117.194.194.73 13257
|
|
||||||
93.102.129.104 36854
|
|
||||||
92.104.22.153 6881
|
|
||||||
68.203.251.86 18992
|
|
||||||
173.51.127.134 33785
|
|
||||||
98.232.90.6 53436
|
|
||||||
59.98.161.236 62056
|
|
||||||
201.87.32.172 36138
|
|
||||||
88.115.78.139 15273
|
|
||||||
123.117.107.29 19970
|
|
||||||
93.96.190.204 6883
|
|
||||||
78.96.174.224 60387
|
|
||||||
68.40.87.11 37253
|
|
||||||
77.101.133.246 14789
|
|
||||||
115.143.47.172 30429
|
|
||||||
93.100.92.224 27243
|
|
||||||
80.80.153.98 11832
|
|
||||||
91.206.4.9 3333
|
|
||||||
188.35.8.236 62459
|
|
||||||
24.22.195.49 6881
|
|
||||||
76.101.135.11 20009
|
|
||||||
193.106.25.130 57020
|
|
||||||
79.107.183.240 45683
|
|
||||||
71.229.83.233 45682
|
|
||||||
76.88.94.229 37557
|
|
||||||
76.21.110.223 51413
|
|
||||||
99.40.159.122 25946
|
|
||||||
88.173.24.47 41595
|
|
||||||
67.149.36.107 40347
|
|
||||||
201.155.152.51 10196
|
|
||||||
118.128.22.37 37251
|
|
||||||
95.143.25.198 47616
|
|
||||||
92.144.60.92 13751
|
|
||||||
86.197.129.179 47067
|
|
||||||
99.66.5.48 21364
|
|
||||||
99.48.229.94 25361
|
|
||||||
121.254.45.84 6800
|
|
||||||
188.248.58.21 50340
|
|
||||||
95.26.55.82 59164
|
|
||||||
62.221.151.184 20536
|
|
||||||
109.201.74.159 10207
|
|
||||||
203.185.36.12 19872
|
|
||||||
210.73.1.92 12469
|
|
||||||
218.171.240.219 10236
|
|
||||||
173.73.187.215 37840
|
|
||||||
86.10.229.246 27857
|
|
||||||
119.247.45.173 10745
|
|
||||||
79.113.175.185 50877
|
|
||||||
95.31.11.189 6886
|
|
||||||
90.49.27.240 50510
|
|
||||||
188.4.197.57 59491
|
|
||||||
84.101.189.175 19015
|
|
||||||
67.189.42.213 53943
|
|
||||||
113.199.242.93 35720
|
|
||||||
183.179.97.20 24840
|
|
||||||
121.45.215.192 58823
|
|
||||||
121.219.253.112 31161
|
|
||||||
118.137.194.171 26705
|
|
||||||
210.6.173.121 14972
|
|
||||||
87.194.243.159 64670
|
|
||||||
83.77.171.200 15846
|
|
||||||
84.52.63.250 14255
|
|
||||||
173.75.218.211 63205
|
|
||||||
122.118.67.231 23915
|
|
||||||
83.9.39.33 22798
|
|
||||||
94.69.249.98 48057
|
|
||||||
88.106.69.215 11924
|
|
||||||
88.89.180.142 10766
|
|
||||||
77.45.166.176 32802
|
|
||||||
24.14.73.12 40442
|
|
||||||
123.203.168.108 16828
|
|
||||||
110.4.246.105 15045
|
|
||||||
88.215.184.26 52757
|
|
||||||
74.68.145.105 11524
|
|
||||||
112.70.90.34 7793
|
|
||||||
89.216.145.232 57343
|
|
||||||
86.207.79.244 19560
|
|
||||||
67.86.153.146 61010
|
|
||||||
92.83.127.98 18709
|
|
||||||
116.15.128.30 9998
|
|
||||||
203.59.10.85 22847
|
|
||||||
182.93.10.208 13054
|
|
||||||
79.17.30.127 32896
|
|
||||||
123.118.137.119 25421
|
|
||||||
219.175.138.61 23739
|
|
||||||
95.96.188.23 12400
|
|
||||||
24.98.183.64 57540
|
|
||||||
93.123.41.127 23436
|
|
||||||
173.87.8.115 22866
|
|
||||||
189.19.100.69 1224
|
|
||||||
220.102.166.142 27156
|
|
||||||
82.25.111.214 21311
|
|
||||||
193.201.198.253 63408
|
|
||||||
173.71.152.93 50989
|
|
||||||
70.119.159.158 62727
|
|
||||||
86.176.212.56 53046
|
|
||||||
74.78.254.79 55775
|
|
||||||
124.37.161.214 10990
|
|
||||||
123.204.252.197 10037
|
|
||||||
78.233.97.234 28751
|
|
||||||
78.106.52.107 15048
|
|
||||||
89.211.154.147 57399
|
|
||||||
78.92.20.255 14850
|
|
||||||
76.22.26.195 10269
|
|
||||||
60.46.193.129 20326
|
|
||||||
89.132.136.252 51385
|
|
||||||
122.217.69.120 21438
|
|
||||||
24.184.162.88 20212
|
|
||||||
71.139.186.245 31114
|
|
||||||
93.94.21.27 15252
|
|
||||||
87.70.142.8 15960
|
|
||||||
98.135.71.79 29008
|
|
||||||
117.47.90.194 10016
|
|
||||||
76.65.18.45 7700
|
|
||||||
87.224.254.21 25388
|
|
||||||
93.84.84.155 51757
|
|
||||||
213.16.120.166 54701
|
|
||||||
92.81.249.11 11185
|
|
||||||
77.54.70.32 35815
|
|
||||||
60.244.140.57 12687
|
|
||||||
109.165.40.174 23806
|
|
||||||
147.46.216.167 50410
|
|
||||||
180.25.22.176 40005
|
|
||||||
71.12.16.186 11422
|
|
||||||
88.141.135.252 58810
|
|
||||||
92.112.66.105 55311
|
|
||||||
111.249.218.164 56509
|
|
||||||
41.223.241.48 38494
|
|
||||||
80.99.189.105 50001
|
|
||||||
95.32.38.47 31175
|
|
||||||
92.28.148.131 22902
|
|
||||||
114.42.222.199 22443
|
|
||||||
175.115.187.64 13038
|
|
||||||
114.44.107.200 17500
|
|
||||||
81.50.148.235 64081
|
|
||||||
88.230.2.13 41680
|
|
||||||
60.49.48.177 21184
|
|
||||||
86.43.195.228 39164
|
|
||||||
88.237.29.153 14665
|
|
||||||
86.126.237.42 49627
|
|
||||||
68.37.160.28 29734
|
|
||||||
123.123.0.174 16330
|
|
||||||
84.215.70.237 25116
|
|
||||||
200.118.51.152 23106
|
|
||||||
92.62.116.14 38298
|
|
||||||
189.115.242.12 16373
|
|
||||||
86.126.244.83 10358
|
|
||||||
93.86.94.198 12077
|
|
||||||
220.134.70.7 57682
|
|
||||||
81.101.108.205 62082
|
|
||||||
80.48.112.175 24917
|
|
||||||
94.27.95.56 25376
|
|
||||||
41.239.99.14 16942
|
|
||||||
89.190.216.86 53241
|
|
||||||
58.152.99.134 16001
|
|
||||||
124.181.115.135 34574
|
|
||||||
110.226.38.196 11614
|
|
||||||
117.254.176.138 24325
|
|
||||||
67.164.200.224 40281
|
|
||||||
94.125.247.162 22331
|
|
||||||
213.130.92.78 32973
|
|
||||||
70.26.64.139 26358
|
|
||||||
219.70.171.198 18038
|
|
||||||
189.78.31.162 39736
|
|
||||||
86.184.173.124 63265
|
|
||||||
118.170.7.23 26814
|
|
||||||
186.45.139.74 12756
|
|
||||||
116.88.194.226 8883
|
|
||||||
114.47.171.209 21087
|
|
||||||
76.177.235.15 13961
|
|
||||||
178.164.177.154 8929
|
|
||||||
77.41.69.144 58436
|
|
||||||
93.152.162.14 42404
|
|
||||||
72.39.29.128 22844
|
|
||||||
70.160.28.191 29602
|
|
||||||
24.87.88.9 49947
|
|
||||||
41.204.126.178 11275
|
|
||||||
71.227.139.224 32093
|
|
||||||
76.28.227.60 10277
|
|
||||||
212.80.48.31 11175
|
|
||||||
95.130.12.19 61050
|
|
||||||
66.197.165.38 6821
|
|
||||||
72.12.147.238 48200
|
|
||||||
80.190.139.91 6892
|
|
||||||
77.108.227.234 46150
|
|
||||||
69.61.67.154 51413
|
|
||||||
209.82.182.182 46512
|
|
||||||
76.83.2.223 51867
|
|
||||||
76.189.218.104 31714
|
|
||||||
174.100.244.175 32360
|
|
||||||
178.162.183.226 6821
|
|
||||||
78.72.106.34 53188
|
|
||||||
188.134.14.120 9089
|
|
||||||
94.31.232.73 47220
|
|
||||||
24.12.33.224 25976
|
|
||||||
24.250.154.26 52769
|
|
||||||
84.86.167.83 49250
|
|
||||||
109.87.83.228 48931
|
|
||||||
88.162.153.3 45698
|
|
||||||
178.82.201.203 12055
|
|
||||||
67.215.242.138 6881
|
|
||||||
173.50.147.111 55669
|
|
||||||
67.240.191.70 53081
|
|
||||||
68.62.10.72 22867
|
|
||||||
88.184.85.157 40478
|
|
||||||
24.35.86.183 48539
|
|
||||||
67.183.139.6 29721
|
|
||||||
219.112.140.25 16297
|
|
||||||
110.175.157.60 12000
|
|
||||||
70.178.210.213 38087
|
|
||||||
77.93.16.43 35431
|
|
||||||
222.164.18.139 6881
|
|
||||||
83.248.90.115 53778
|
|
||||||
98.254.244.165 56359
|
|
||||||
90.180.166.149 6880
|
|
||||||
88.177.195.185 20299
|
|
||||||
67.215.242.139 6881
|
|
||||||
86.13.80.190 51326
|
|
||||||
86.107.79.233 49905
|
|
||||||
212.242.219.216 47000
|
|
||||||
95.76.50.171 19698
|
|
||||||
81.106.247.102 19244
|
|
||||||
188.134.67.102 6882
|
|
||||||
81.236.226.106 6882
|
|
||||||
94.47.188.106 56342
|
|
||||||
200.29.72.19 46935
|
|
||||||
99.139.154.78 8877
|
|
||||||
84.124.205.238 23020
|
|
||||||
213.125.29.122 6881
|
|
||||||
68.149.168.121 64750
|
|
||||||
99.57.47.134 19965
|
|
||||||
24.49.177.89 40029
|
|
||||||
221.46.51.137 22507
|
|
||||||
85.12.239.118 64317
|
|
||||||
78.90.116.74 19466
|
|
||||||
95.79.41.39 40496
|
|
||||||
213.133.98.4 6881
|
|
||||||
71.170.86.79 20322
|
|
||||||
90.154.242.204 59379
|
|
||||||
195.184.205.254 14834
|
|
||||||
201.37.1.184 20996
|
|
||||||
183.179.244.186 17518
|
|
||||||
98.219.151.25 33246
|
|
||||||
99.25.55.50 63685
|
|
||||||
95.90.32.98 21015
|
|
||||||
66.197.165.51 6821
|
|
||||||
68.44.82.53 12371
|
|
||||||
24.186.168.108 36916
|
|
||||||
74.79.37.90 31551
|
|
||||||
207.38.168.53 44635
|
|
||||||
209.202.78.188 14812
|
|
||||||
76.101.24.82 13823
|
|
||||||
68.46.57.52 11695
|
|
||||||
189.122.64.147 24387
|
|
||||||
123.163.132.87 64425
|
|
||||||
125.24.191.183 32201
|
|
||||||
123.231.81.151 45682
|
|
||||||
76.189.50.158 29456
|
|
||||||
212.117.167.140 10005
|
|
||||||
82.75.135.251 49155
|
|
||||||
77.250.123.105 6884
|
|
||||||
83.25.71.129 43558
|
|
||||||
212.117.1.153 17845
|
|
||||||
95.84.155.141 21057
|
|
||||||
195.22.140.72 4214
|
|
||||||
84.40.91.202 42870
|
|
||||||
85.10.46.180 24142
|
|
||||||
174.112.6.77 6881
|
|
||||||
151.12.60.142 42488
|
|
||||||
70.162.99.44 54092
|
|
||||||
193.91.144.166 43190
|
|
||||||
213.60.233.181 34385
|
|
||||||
71.235.207.19 53148
|
|
||||||
114.42.20.220 14842
|
|
||||||
81.98.127.164 48895
|
|
||||||
213.10.67.211 17030
|
|
||||||
62.45.245.22 6881
|
|
||||||
80.82.92.76 29221
|
|
||||||
89.28.27.55 17886
|
|
||||||
69.151.72.98 12345
|
|
||||||
78.187.75.191 41182
|
|
||||||
122.173.206.18 21221
|
|
||||||
75.53.192.65 56862
|
|
||||||
123.204.71.15 12632
|
|
||||||
213.46.44.100 59580
|
|
||||||
76.115.102.119 40940
|
|
||||||
85.227.178.143 25158
|
|
||||||
79.129.187.145 16458
|
|
||||||
195.98.76.238 24480
|
|
||||||
85.227.228.157 51413
|
|
||||||
83.252.123.146 58345
|
|
||||||
86.110.176.106 30000
|
86.110.176.106 30000
|
||||||
74.13.82.92 6881
|
220.134.120.229 6881
|
||||||
92.33.129.197 16432
|
41.228.251.92 47814
|
||||||
109.252.111.191 33426
|
78.62.131.230 50104
|
||||||
188.17.177.14 23023
|
24.150.5.250 51413
|
||||||
94.232.104.14 59873
|
76.110.187.39 14164
|
||||||
60.54.43.194 14046
|
65.184.131.218 6881
|
||||||
122.211.106.11 14409
|
111.119.246.115 22046
|
||||||
113.10.81.130 18145
|
68.96.113.203 14608
|
||||||
193.23.54.47 23933
|
85.99.200.222 27808
|
||||||
151.46.167.111 14107
|
184.56.211.105 52867
|
||||||
74.73.144.128 8944
|
66.31.185.120 10317
|
||||||
188.168.34.126 50862
|
218.145.169.134 3149
|
||||||
85.30.148.74 34178
|
219.161.251.38 31529
|
||||||
83.99.166.208 32575
|
99.101.221.11 11764
|
||||||
109.226.90.250 59039
|
109.192.73.224 52318
|
||||||
216.252.93.187 10248
|
98.242.28.163 26145
|
||||||
201.127.74.88 23041
|
188.81.211.246 8080
|
||||||
220.232.101.77 10765
|
80.254.125.140 34296
|
||||||
64.53.28.136 10809
|
64.53.28.136 10809
|
||||||
111.254.1.128 17447
|
67.149.152.217 41077
|
||||||
74.44.148.55 34665
|
91.86.3.133 32176
|
||||||
84.10.244.103 48553
|
95.221.19.39 12976
|
||||||
109.173.50.36 49288
|
83.83.80.92 6881
|
||||||
84.3.119.233 45000
|
87.252.162.190 56515
|
||||||
216.121.134.38 10348
|
151.66.131.139 46954
|
||||||
77.49.255.137 38764
|
78.58.202.177 59464
|
||||||
96.252.163.120 35217
|
71.199.157.116 30520
|
||||||
72.89.151.90 17320
|
96.254.62.199 8200
|
||||||
89.168.85.181 15348
|
24.14.102.44 44245
|
||||||
124.84.78.74 10674
|
70.127.115.202 38183
|
||||||
190.188.199.13 62986
|
99.189.18.223 41292
|
||||||
94.254.73.152 44229
|
213.213.218.65 60981
|
||||||
192.188.244.1 10634
|
190.50.213.190 36891
|
||||||
84.215.248.234 40991
|
118.171.47.177 16001
|
||||||
79.119.111.31 63150
|
119.83.243.224 16654
|
||||||
95.155.230.83 54993
|
113.190.134.153 20216
|
||||||
83.85.60.232 6881
|
114.42.139.73 16001
|
||||||
178.130.32.118 14247
|
182.88.142.211 37365
|
||||||
|
119.6.28.67 18045
|
||||||
|
85.241.136.42 60048
|
||||||
|
68.40.16.60 11232
|
||||||
|
212.122.106.140 31783
|
||||||
|
109.173.59.147 12962
|
||||||
|
95.27.70.32 35054
|
||||||
|
77.37.202.193 36299
|
||||||
|
178.82.201.203 12055
|
||||||
|
109.161.85.240 44209
|
||||||
|
94.24.232.164 1500
|
||||||
|
75.73.169.64 22011
|
||||||
|
90.142.147.91 51488
|
||||||
|
76.92.206.199 14832
|
||||||
|
99.57.74.12 50424
|
||||||
|
173.60.116.127 55492
|
||||||
|
99.90.234.80 54989
|
||||||
|
99.192.38.145 50847
|
||||||
|
85.240.71.5 32193
|
||||||
|
98.219.151.25 33246
|
||||||
|
81.236.226.106 6882
|
||||||
|
89.88.117.136 50637
|
||||||
|
91.117.62.76 34004
|
||||||
|
99.230.133.39 9536
|
||||||
|
74.69.217.130 36242
|
||||||
|
86.23.42.71 50946
|
||||||
|
66.249.57.76 57217
|
||||||
|
210.89.51.164 52413
|
||||||
|
76.226.51.91 12663
|
||||||
|
24.64.83.1 45429
|
||||||
|
117.198.144.222 21855
|
||||||
|
64.166.166.167 22837
|
||||||
|
91.202.9.75 35691
|
||||||
|
24.158.190.101 30993
|
||||||
|
124.144.30.72 34172
|
||||||
|
98.220.212.46 13972
|
||||||
|
221.86.239.1 11798
|
||||||
|
68.190.208.15 50557
|
||||||
|
68.203.251.86 18992
|
||||||
|
178.92.94.213 56595
|
||||||
|
89.212.178.131 64999
|
||||||
|
178.140.66.146 47690
|
||||||
|
212.2.140.47 35691
|
||||||
|
93.100.231.80 33103
|
||||||
|
95.25.141.71 60569
|
||||||
|
109.87.58.45 36303
|
||||||
|
46.0.141.155 11396
|
||||||
|
87.97.230.29 21009
|
||||||
|
119.56.32.42 32382
|
||||||
|
92.124.53.28 46108
|
||||||
|
89.134.67.24 14172
|
||||||
|
114.38.122.171 40232
|
||||||
|
114.41.85.198 59723
|
||||||
|
122.148.239.163 6881
|
||||||
|
112.205.134.194 55288
|
||||||
|
78.147.163.160 14027
|
||||||
|
122.104.168.226 13618
|
||||||
|
138.217.156.134 63770
|
||||||
|
117.254.208.18 40438
|
||||||
|
75.3.113.99 6881
|
||||||
|
84.29.97.213 15577
|
||||||
|
91.211.83.75 61617
|
||||||
|
93.2.244.233 43565
|
||||||
|
86.139.36.0 12037
|
||||||
|
87.59.181.239 62153
|
||||||
|
174.112.6.77 6881
|
||||||
|
24.60.73.227 45502
|
||||||
|
69.137.165.233 6881
|
||||||
|
76.30.10.86 6881
|
||||||
|
24.79.144.209 34882
|
||||||
|
84.127.134.131 25717
|
||||||
|
98.193.20.11 58714
|
||||||
|
95.165.18.201 17170
|
||||||
|
189.12.171.99 13596
|
||||||
|
94.128.46.21 8827
|
||||||
|
60.34.66.88 25136
|
||||||
|
95.130.12.19 61050
|
||||||
|
77.250.121.26 51413
|
||||||
|
77.70.21.207 64309
|
||||||
|
213.133.98.4 6881
|
||||||
|
69.137.229.111 8500
|
||||||
|
109.184.173.10 10058
|
||||||
|
65.6.149.143 63622
|
||||||
|
82.194.190.194 36219
|
||||||
|
59.99.200.15 50007
|
||||||
|
98.180.221.118 37950
|
||||||
|
111.243.51.215 17517
|
||||||
|
125.27.60.193 55555
|
||||||
|
85.142.208.26 18256
|
||||||
|
87.120.157.123 6073
|
||||||
|
90.155.192.228 59169
|
||||||
|
91.103.205.231 30573
|
||||||
|
85.12.239.118 64317
|
||||||
|
174.64.9.192 25397
|
||||||
|
78.100.208.205 39074
|
||||||
|
66.229.163.248 41546
|
||||||
|
123.204.158.238 6881
|
||||||
|
94.6.215.232 35125
|
||||||
|
120.144.133.123 41889
|
||||||
|
203.218.92.102 13383
|
||||||
|
111.250.205.16 16001
|
||||||
|
91.179.186.59 12654
|
||||||
|
84.234.241.206 62793
|
||||||
|
84.211.40.116 26202
|
||||||
|
213.66.1.88 31701
|
||||||
|
109.93.197.4 15932
|
||||||
|
84.238.182.126 18755
|
||||||
|
86.107.219.33 29748
|
||||||
|
94.251.22.96 6890
|
||||||
|
94.28.27.245 10249
|
||||||
|
88.167.63.173 17155
|
||||||
|
95.160.98.229 19948
|
||||||
|
76.230.136.237 51413
|
||||||
|
88.160.107.217 33383
|
||||||
|
75.1.151.129 42526
|
||||||
|
80.99.198.116 51819
|
||||||
|
175.144.252.191 1722
|
||||||
|
67.140.208.226 44078
|
||||||
|
118.157.66.146 15267
|
||||||
|
88.89.93.181 6881
|
||||||
|
188.195.214.69 9089
|
||||||
|
90.214.16.2 10050
|
||||||
|
24.47.133.24 27457
|
||||||
|
88.186.78.58 53354
|
||||||
|
178.128.240.54 33591
|
||||||
|
67.215.242.139 6881
|
||||||
|
79.110.118.172 17827
|
||||||
|
85.17.74.169 6881
|
||||||
|
190.150.26.121 23765
|
||||||
|
189.5.90.211 16422
|
||||||
|
71.110.78.125 50924
|
||||||
|
112.104.174.102 25693
|
||||||
|
222.145.168.62 64457
|
||||||
|
125.25.169.12 46286
|
||||||
|
79.84.4.144 16887
|
||||||
|
95.52.76.243 27570
|
||||||
|
151.32.158.158 10464
|
||||||
|
189.4.13.169 60285
|
||||||
|
70.189.217.212 39037
|
||||||
|
119.117.135.178 13778
|
||||||
|
85.24.236.236 60224
|
||||||
|
77.110.26.188 19101
|
||||||
|
90.199.170.34 10491
|
||||||
|
212.187.127.4 42544
|
||||||
|
213.167.146.216 62238
|
||||||
|
24.36.225.41 13970
|
||||||
|
88.162.153.3 45698
|
||||||
|
67.167.185.252 36758
|
||||||
|
119.234.57.170 42523
|
||||||
|
118.93.145.87 27871
|
||||||
|
118.19.235.114 22136
|
||||||
|
124.244.75.29 50766
|
||||||
|
114.26.158.95 20185
|
||||||
|
143.238.237.25 14151
|
||||||
|
2.85.8.6 53180
|
||||||
|
112.105.159.195 21721
|
||||||
|
77.249.209.133 41620
|
||||||
|
109.230.14.32 30747
|
||||||
|
86.101.42.86 27426
|
||||||
|
213.149.144.24 23206
|
||||||
|
85.226.150.37 17020
|
||||||
|
95.42.53.21 50840
|
||||||
|
91.146.51.190 52891
|
||||||
|
79.139.234.104 16939
|
||||||
|
93.0.225.253 15592
|
||||||
|
98.254.244.165 56359
|
||||||
|
114.44.224.46 24232
|
||||||
|
60.50.37.37 63880
|
||||||
|
119.56.90.14 6884
|
||||||
|
222.134.253.50 25460
|
||||||
|
200.82.124.226 11216
|
||||||
|
86.124.181.25 41812
|
||||||
|
151.71.224.236 26022
|
||||||
|
78.128.123.63 22260
|
||||||
|
79.44.193.147 46988
|
||||||
|
81.88.124.26 25171
|
||||||
|
92.140.191.170 10583
|
||||||
|
74.192.41.234 12306
|
||||||
|
24.11.0.152 6881
|
||||||
|
98.162.214.118 6881
|
||||||
|
76.112.183.73 16254
|
||||||
|
217.217.35.121 32001
|
||||||
|
67.175.133.224 32772
|
||||||
78.36.196.61 59269
|
78.36.196.61 59269
|
||||||
76.29.12.37 12308
|
76.234.70.144 63498
|
||||||
78.180.216.41 17351
|
118.165.101.148 25966
|
||||||
61.231.198.76 14685
|
78.29.72.239 10169
|
||||||
118.14.157.125 21624
|
88.203.69.43 20846
|
||||||
71.62.37.197 7914
|
85.230.126.66 59655
|
||||||
71.29.78.193 55989
|
114.33.208.192 6881
|
||||||
118.18.244.181 25949
|
213.137.40.155 28447
|
||||||
92.97.196.183 42303
|
79.40.28.4 22978
|
||||||
118.104.11.221 21289
|
85.220.113.75 44116
|
||||||
190.174.204.226 42233
|
2.85.54.157 26621
|
||||||
89.134.203.232 17633
|
92.82.169.146 10122
|
||||||
95.26.152.248 60268
|
24.191.39.52 13692
|
||||||
46.0.3.147 27613
|
24.92.85.17 41738
|
||||||
24.49.32.34 28441
|
222.164.18.139 6881
|
||||||
99.23.91.163 15016
|
59.156.223.119 58460
|
||||||
90.209.174.130 21332
|
201.24.51.203 18936
|
||||||
71.17.47.149 53164
|
210.207.227.15 54112
|
||||||
119.246.176.132 6881
|
220.135.104.71 6885
|
||||||
111.249.153.64 21540
|
111.166.209.176 16001
|
||||||
123.119.85.79 24805
|
120.83.182.73 44755
|
||||||
116.15.111.133 44914
|
203.219.45.127 56366
|
||||||
109.154.116.92 24460
|
92.27.98.236 42249
|
||||||
142.167.215.241 12277
|
213.107.103.7 26498
|
||||||
78.8.106.8 50000
|
87.194.35.172 19102
|
||||||
78.8.193.215 64759
|
85.155.45.17 26814
|
||||||
|
80.190.139.91 6895
|
||||||
|
80.202.98.113 24874
|
||||||
|
95.143.217.5 26620
|
||||||
|
87.121.131.142 18291
|
||||||
|
68.37.105.85 18621
|
||||||
|
76.125.40.83 36132
|
||||||
|
76.83.2.223 51867
|
||||||
|
82.130.145.80 10145
|
||||||
|
116.49.130.251 42663
|
||||||
|
219.95.36.65 22024
|
||||||
|
93.138.138.25 36193
|
||||||
|
125.198.109.94 25391
|
||||||
|
118.166.52.195 7613
|
||||||
|
125.214.154.196 14295
|
||||||
|
189.93.138.193 30752
|
||||||
|
212.116.83.37 48862
|
||||||
|
89.178.0.217 51413
|
||||||
|
95.95.243.42 63297
|
||||||
|
92.63.29.186 35073
|
||||||
|
213.100.103.111 59606
|
||||||
|
212.40.113.62 19734
|
||||||
|
71.206.232.202 46400
|
||||||
|
70.119.92.84 32082
|
||||||
|
78.101.105.86 17183
|
||||||
|
173.58.66.221 26774
|
||||||
|
94.28.105.90 37707
|
||||||
|
86.26.47.187 20295
|
||||||
|
70.52.182.161 20499
|
||||||
|
95.111.185.235 48104
|
||||||
|
122.94.252.223 21574
|
||||||
|
113.20.82.4 11560
|
||||||
|
1.23.143.146 24679
|
||||||
|
114.40.118.14 21330
|
||||||
|
85.181.59.132 34288
|
||||||
|
118.154.53.162 16234
|
||||||
|
109.174.68.4 51490
|
||||||
|
109.201.74.210 20655
|
||||||
|
75.62.19.231 37592
|
||||||
|
97.85.74.36 14594
|
||||||
|
83.233.120.5 51800
|
||||||
|
64.231.15.87 45129
|
||||||
|
24.85.138.161 26724
|
||||||
|
147.32.8.69 6881
|
||||||
|
88.216.128.98 32122
|
||||||
|
142.167.5.37 29661
|
||||||
|
68.4.207.220 63881
|
||||||
|
98.237.164.36 52796
|
||||||
|
99.109.20.192 16385
|
||||||
|
91.105.126.138 33105
|
||||||
|
111.255.46.225 26839
|
||||||
|
85.10.3.55 58402
|
||||||
|
123.243.29.227 37451
|
||||||
|
94.153.114.233 34599
|
||||||
|
94.75.136.162 31042
|
||||||
|
112.204.106.67 48691
|
||||||
|
217.120.148.194 51615
|
||||||
|
109.121.134.46 64548
|
||||||
|
178.150.86.230 63371
|
||||||
|
188.153.7.124 29949
|
||||||
|
2.55.82.43 18407
|
||||||
|
95.58.44.125 11121
|
||||||
|
116.74.115.65 32886
|
||||||
|
83.131.71.123 39603
|
||||||
|
99.148.166.253 49200
|
||||||
|
99.179.93.192 26004
|
||||||
|
117.200.32.60 33696
|
||||||
|
190.193.153.225 26735
|
||||||
|
68.103.246.183 62692
|
||||||
|
92.23.100.103 20962
|
||||||
|
82.48.131.139 6881
|
||||||
|
96.50.99.76 40637
|
||||||
|
183.83.0.210 55716
|
||||||
|
94.156.160.208 1296
|
||||||
|
99.240.114.49 60001
|
||||||
|
123.238.20.56 11495
|
||||||
|
98.164.225.18 51413
|
||||||
|
83.248.115.125 48880
|
||||||
|
77.50.124.217 45561
|
||||||
|
195.13.160.107 40473
|
||||||
|
91.185.36.137 16415
|
||||||
|
68.189.164.175 35316
|
||||||
|
90.163.159.154 48436
|
||||||
|
124.8.223.66 16880
|
||||||
|
24.161.134.16 23585
|
||||||
|
72.12.147.238 48200
|
||||||
|
77.99.163.56 14408
|
||||||
|
79.165.239.5 41714
|
||||||
|
95.34.50.159 33001
|
||||||
|
92.150.184.16 57367
|
||||||
|
76.120.195.253 52729
|
||||||
|
87.238.1.77 20617
|
||||||
|
115.134.213.88 22989
|
||||||
|
94.59.123.17 45340
|
||||||
|
189.6.134.85 16228
|
||||||
|
201.198.78.18 24646
|
||||||
|
82.244.111.116 50102
|
||||||
|
78.159.163.4 16880
|
||||||
|
203.214.42.15 35239
|
||||||
|
142.177.246.150 41881
|
||||||
|
220.253.180.201 51413
|
||||||
|
86.16.190.229 51413
|
||||||
|
81.89.106.209 51413
|
||||||
|
88.207.84.240 34723
|
||||||
|
79.108.206.28 16866
|
||||||
|
193.11.162.109 40000
|
||||||
|
88.222.107.185 23367
|
||||||
|
85.73.84.231 52545
|
||||||
|
81.249.93.113 53727
|
||||||
|
69.119.12.235 16181
|
||||||
|
94.97.7.171 21608
|
||||||
|
88.194.178.213 36956
|
||||||
|
83.10.93.128 17371
|
||||||
|
121.166.23.3 19226
|
||||||
|
85.136.235.241 10889
|
||||||
|
219.69.115.178 21604
|
||||||
|
220.136.219.134 19860
|
||||||
|
112.118.91.195 25949
|
||||||
|
189.74.105.192 1730
|
||||||
|
72.53.76.39 55501
|
||||||
|
213.64.51.135 35114
|
||||||
|
74.105.9.97 62498
|
||||||
|
79.56.233.96 37086
|
||||||
|
95.84.0.84 20090
|
||||||
|
70.75.213.15 20077
|
||||||
|
24.21.100.94 28550
|
||||||
|
208.118.23.71 56690
|
||||||
|
88.109.14.155 34392
|
||||||
|
189.236.5.200 26306
|
||||||
|
80.184.65.55 12052
|
||||||
|
90.151.185.253 49653
|
||||||
|
140.136.239.153 51413
|
||||||
|
119.77.220.96 22438
|
||||||
|
75.11.180.71 21205
|
||||||
|
114.76.81.8 20869
|
||||||
|
93.81.137.222 59627
|
||||||
|
99.249.255.103 21609
|
||||||
|
82.207.43.123 12452
|
||||||
|
94.72.123.6 16660
|
||||||
|
67.168.18.61 46759
|
||||||
|
216.8.170.95 44302
|
||||||
|
95.59.128.199 30499
|
||||||
|
190.159.56.248 60787
|
||||||
|
24.15.32.32 32241
|
||||||
|
114.249.142.149 23363
|
||||||
|
78.86.71.118 23744
|
||||||
|
89.160.3.33 10132
|
||||||
|
89.152.240.196 32504
|
||||||
|
94.244.172.119 28248
|
||||||
|
95.245.89.123 7881
|
||||||
|
88.87.1.254 20493
|
||||||
|
195.182.132.66 64356
|
||||||
|
94.64.144.11 7110
|
||||||
|
99.240.139.107 6881
|
||||||
|
71.91.56.80 19492
|
||||||
|
82.245.161.72 29889
|
||||||
|
41.201.68.118 15497
|
||||||
|
119.239.155.80 55121
|
||||||
|
200.104.77.39 15443
|
||||||
|
201.34.97.64 61884
|
||||||
|
121.221.223.224 12114
|
||||||
|
123.192.140.58 17701
|
||||||
|
158.193.168.5 21798
|
||||||
|
78.86.111.253 23576
|
||||||
|
88.106.167.216 28781
|
||||||
|
188.94.39.175 15010
|
||||||
|
213.111.238.195 56312
|
||||||
|
78.56.7.200 21846
|
||||||
|
94.41.112.123 23918
|
||||||
|
85.117.33.27 19637
|
||||||
|
209.20.68.239 62368
|
||||||
|
190.11.108.123 35985
|
||||||
|
89.34.34.249 24474
|
||||||
|
89.79.136.193 51413
|
||||||
|
95.27.123.195 34348
|
||||||
|
87.126.188.76 25422
|
||||||
|
195.214.237.249 15300
|
||||||
|
80.80.116.100 55993
|
||||||
|
180.2.23.99 24383
|
||||||
|
76.27.231.95 11423
|
||||||
|
188.51.83.143 56717
|
||||||
|
92.47.229.200 10385
|
||||||
|
210.6.213.167 26301
|
||||||
|
112.119.40.105 62294
|
||||||
|
24.108.1.66 63373
|
||||||
|
184.36.90.143 37107
|
||||||
|
182.48.202.118 28011
|
||||||
|
114.26.162.140 24871
|
||||||
|
67.149.182.183 17372
|
||||||
|
220.255.183.95 10793
|
||||||
|
89.243.44.234 23297
|
||||||
|
118.173.35.219 19018
|
||||||
|
124.13.140.102 38007
|
||||||
|
112.118.43.128 27673
|
||||||
|
188.87.87.100 45595
|
||||||
|
173.33.201.88 34218
|
||||||
|
184.91.39.18 20931
|
||||||
|
208.103.246.149 61903
|
||||||
|
114.41.224.18 19562
|
||||||
|
91.121.177.18 53140
|
||||||
|
178.94.155.182 60556
|
||||||
|
211.74.67.111 14181
|
||||||
|
199.74.97.182 29255
|
||||||
|
94.9.44.224 52476
|
||||||
|
189.91.127.145 20801
|
||||||
|
109.87.34.215 51413
|
||||||
|
82.69.1.251 5001
|
||||||
|
125.3.4.166 51187
|
||||||
|
69.203.68.51 11758
|
||||||
|
96.22.31.154 43510
|
||||||
|
174.65.137.136 48100
|
||||||
|
190.228.94.165 26710
|
||||||
|
187.104.62.61 19789
|
||||||
|
188.82.144.27 52696
|
||||||
|
219.237.1.104 52827
|
||||||
|
82.1.75.63 13312
|
||||||
|
83.94.240.45 30864
|
||||||
|
87.89.12.207 37559
|
||||||
|
59.101.167.84 20459
|
||||||
|
203.217.50.120 56814
|
||||||
|
219.79.49.98 23007
|
||||||
|
221.140.188.163 58808
|
||||||
|
24.87.209.90 9344
|
||||||
|
82.40.248.27 16676
|
||||||
|
99.32.75.52 14690
|
||||||
|
220.137.140.31 26831
|
||||||
|
83.9.219.77 48034
|
||||||
|
79.97.250.119 19888
|
||||||
|
212.142.76.123 53413
|
||||||
|
94.180.157.168 35124
|
||||||
|
216.245.196.72 54821
|
||||||
|
116.72.169.167 14492
|
||||||
|
189.47.125.243 36874
|
||||||
|
94.112.8.99 29633
|
||||||
|
117.207.235.231 25849
|
||||||
|
173.183.106.57 58370
|
||||||
|
95.93.136.147 21175
|
||||||
|
99.247.172.168 22177
|
||||||
|
77.95.59.144 34007
|
||||||
|
111.167.216.189 6881
|
||||||
|
95.77.154.219 27317
|
||||||
|
71.7.161.68 12588
|
||||||
|
115.164.135.201 56196
|
||||||
|
122.100.221.107 24300
|
||||||
|
213.60.104.227 22642
|
||||||
|
113.151.72.159 16352
|
||||||
|
218.103.176.234 10519
|
||||||
|
88.247.49.186 11074
|
||||||
|
83.6.190.105 26554
|
||||||
|
76.181.160.45 23986
|
||||||
|
216.252.75.148 51413
|
||||||
|
88.162.86.247 8444
|
||||||
|
89.215.27.13 9200
|
||||||
|
|
|
@ -29,8 +29,106 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "utest.h"
|
||||||
|
|
||||||
|
bool test_metric_explicit();
|
||||||
|
bool test_metric_random();
|
||||||
|
|
||||||
|
INITTEST();
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
std::cerr << "libbitdht: " << argv[0] << std::endl;
|
||||||
|
|
||||||
|
test_metric_explicit();
|
||||||
|
|
||||||
|
FINALREPORT("libbitdht: Metric Tests");
|
||||||
|
return TESTRESULT();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool test_metric_explicit()
|
||||||
|
{
|
||||||
|
std::cerr << "test_metric_explicit:" << std::endl;
|
||||||
|
|
||||||
|
#define NUM_IDS 6
|
||||||
|
|
||||||
|
/* create some ids */
|
||||||
|
bdId id[NUM_IDS];
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
/* create a set of known ids ... and
|
||||||
|
* check the metrics are what we expect.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for(i = 0; i < NUM_IDS; i++)
|
||||||
|
{
|
||||||
|
bdZeroNodeId(&(id[i].id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* test the zero node works */
|
||||||
|
for(i = 0; i < NUM_IDS; i++)
|
||||||
|
{
|
||||||
|
for(j = 0; j < BITDHT_KEY_LEN; j++)
|
||||||
|
{
|
||||||
|
CHECK(id[i].id.data[j] == 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = 0; i < NUM_IDS; i++)
|
||||||
|
{
|
||||||
|
for(j = i; j < NUM_IDS; j++)
|
||||||
|
{
|
||||||
|
id[j].id.data[BITDHT_KEY_LEN - i - 1] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = 0; i < NUM_IDS; i++)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "id[%d]:", i+1);
|
||||||
|
bdStdPrintId(std::cerr,&(id[i]));
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now do the sums */
|
||||||
|
bdMetric met;
|
||||||
|
bdMetric met2;
|
||||||
|
int bdist = 0;
|
||||||
|
|
||||||
|
for(i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
for(j = i+1; j < 6; j++)
|
||||||
|
{
|
||||||
|
bdStdDistance(&(id[i].id), &(id[j].id), &met);
|
||||||
|
|
||||||
|
fprintf(stderr, "%d^%d:", i, j);
|
||||||
|
bdStdPrintNodeId(std::cerr,&met);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
|
||||||
|
bdist = bdStdBucketDistance(&met);
|
||||||
|
fprintf(stderr, " bucket: %d\n", bdist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
int c1 = met < met2;
|
||||||
|
int c2 = met2 < met;
|
||||||
|
|
||||||
|
fprintf(stderr, "1^2<1^3? : %d 1^3<1^2?: %d\n", c1, c2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
REPORT("Test Byte Manipulation");
|
||||||
|
//FAILED("Couldn't Bind to socket");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool test_metric_random()
|
||||||
|
{
|
||||||
|
std::cerr << "test_metric_random:" << std::endl;
|
||||||
|
|
||||||
/* create some ids */
|
/* create some ids */
|
||||||
bdId id1;
|
bdId id1;
|
||||||
|
|
|
@ -66,13 +66,21 @@ int main(int argc, char **argv)
|
||||||
std::string uid;
|
std::string uid;
|
||||||
bool setUid = false;
|
bool setUid = false;
|
||||||
bool doRandomQueries = false;
|
bool doRandomQueries = false;
|
||||||
|
bool doRestart = false;
|
||||||
|
bool doThreadJoin = false;
|
||||||
|
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
while((c = getopt(argc, argv,"p:b:u:r")) != -1)
|
while((c = getopt(argc, argv,"rjp:b:u:q")) != -1)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
|
case 'r':
|
||||||
|
doRestart = true;
|
||||||
|
break;
|
||||||
|
case 'j':
|
||||||
|
doThreadJoin = true;
|
||||||
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
{
|
{
|
||||||
int tmp_port = atoi(optarg);
|
int tmp_port = atoi(optarg);
|
||||||
|
@ -107,7 +115,7 @@ int main(int argc, char **argv)
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'q':
|
||||||
{
|
{
|
||||||
doRandomQueries = true;
|
doRandomQueries = true;
|
||||||
std::cerr << "Doing Random Queries";
|
std::cerr << "Doing Random Queries";
|
||||||
|
@ -183,9 +191,29 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
int running = 1;
|
||||||
|
|
||||||
|
std::cerr << "Starting Dht: ";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
bitdht->startDht();
|
||||||
|
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
sleep(60);
|
sleep(60);
|
||||||
|
|
||||||
|
std::cerr << "BitDht State: ";
|
||||||
|
std::cerr << bitdht->stateDht();
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
std::cerr << "Dht Network Size: ";
|
||||||
|
std::cerr << bitdht->statsNetworkSize();
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
std::cerr << "BitDht Network Size: ";
|
||||||
|
std::cerr << bitdht->statsBDVersionSize();
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
if (++count == 2)
|
if (++count == 2)
|
||||||
{
|
{
|
||||||
/* switch to one-shot searchs */
|
/* switch to one-shot searchs */
|
||||||
|
@ -196,10 +224,50 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
bdNodeId rndId;
|
bdNodeId rndId;
|
||||||
bdStdRandomNodeId(&rndId);
|
bdStdRandomNodeId(&rndId);
|
||||||
|
|
||||||
|
std::cerr << "BitDht Launching Random Search: ";
|
||||||
|
bdStdPrintNodeId(std::cerr, &rndId);
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
bitdht->addFindNode(&rndId, mode);
|
bitdht->addFindNode(&rndId, mode);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if (doThreadJoin)
|
||||||
|
{
|
||||||
|
/* change address */
|
||||||
|
if (count % 2 == 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
std::cerr << "Resetting UdpStack: ";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
udpstack->resetAddress(local);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (doRestart)
|
||||||
|
{
|
||||||
|
if (count % 2 == 1)
|
||||||
|
{
|
||||||
|
if (running)
|
||||||
|
{
|
||||||
|
|
||||||
|
std::cerr << "Stopping Dht: ";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
bitdht->stopDht();
|
||||||
|
running = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "Starting Dht: ";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
bitdht->startDht();
|
||||||
|
running = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
23
libbitdht/src/tests/utest.h
Normal file
23
libbitdht/src/tests/utest.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef _UNIT_TEST_MACROS_H__
|
||||||
|
#define _UNIT_TEST_MACROS_H__
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define TFAILURE( s ) printf( "FAILURE: " __FILE__ ":%-4d %s\n", __LINE__, s )
|
||||||
|
#define TSUCCESS( s ) printf( "SUCCESS: " __FILE__ ":%-4d %s\n", __LINE__, s )
|
||||||
|
|
||||||
|
/* careful with this line (no protection) */
|
||||||
|
#define INITTEST() int ok = 1; int gok = 1;
|
||||||
|
|
||||||
|
/* declare the variables */
|
||||||
|
extern int ok;
|
||||||
|
extern int gok;
|
||||||
|
|
||||||
|
#define CHECK( b ) do { if ( ! (b) ) { ok = 0; TFAILURE( #b ); } } while(0)
|
||||||
|
#define FAILED( s ) do { ok = 0; TFAILURE( s ); } while(0)
|
||||||
|
#define REPORT( s ) do { if ( ! (ok) ) { ok = 0; TFAILURE( s ); } else { TSUCCESS( s );} gok &= ok; ok = 1; } while(0)
|
||||||
|
#define REPORT2( b, s ) do { if ( ! (b) ) { ok = 0; TFAILURE( s ); } else { TSUCCESS( s );} gok &= ok; ok = 1; } while(0)
|
||||||
|
#define FINALREPORT( s ) do { gok &= ok; ok = 1; if ( ! (gok) ) { TFAILURE( s ); } else { TSUCCESS( s );} } while(0)
|
||||||
|
#define TESTRESULT() (!gok)
|
||||||
|
|
||||||
|
#endif
|
|
@ -131,6 +131,43 @@ int UdpBitDht::getDhtValue(const bdNodeId *id, std::string key, std::string &va
|
||||||
return mBitDhtManager->getDhtValue(id, key, value);
|
return mBitDhtManager->getDhtValue(id, key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* stats and Dht state */
|
||||||
|
int UdpBitDht:: startDht()
|
||||||
|
{
|
||||||
|
bdStackMutex stack(dhtMtx); /********** MUTEX LOCKED *************/
|
||||||
|
|
||||||
|
return mBitDhtManager->startDht();
|
||||||
|
}
|
||||||
|
|
||||||
|
int UdpBitDht:: stopDht()
|
||||||
|
{
|
||||||
|
bdStackMutex stack(dhtMtx); /********** MUTEX LOCKED *************/
|
||||||
|
|
||||||
|
return mBitDhtManager->stopDht();
|
||||||
|
}
|
||||||
|
|
||||||
|
int UdpBitDht::stateDht()
|
||||||
|
{
|
||||||
|
bdStackMutex stack(dhtMtx); /********** MUTEX LOCKED *************/
|
||||||
|
|
||||||
|
return mBitDhtManager->stateDht();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t UdpBitDht::statsNetworkSize()
|
||||||
|
{
|
||||||
|
bdStackMutex stack(dhtMtx); /********** MUTEX LOCKED *************/
|
||||||
|
|
||||||
|
return mBitDhtManager->statsNetworkSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t UdpBitDht::statsBDVersionSize()
|
||||||
|
{
|
||||||
|
bdStackMutex stack(dhtMtx); /********** MUTEX LOCKED *************/
|
||||||
|
|
||||||
|
return mBitDhtManager->statsBDVersionSize();
|
||||||
|
}
|
||||||
|
|
||||||
/******************* Internals *************************/
|
/******************* Internals *************************/
|
||||||
|
|
||||||
/***** Iteration / Loop Management *****/
|
/***** Iteration / Loop Management *****/
|
||||||
|
|
|
@ -71,6 +71,13 @@ virtual void removeCallback(BitDhtCallback *cb);
|
||||||
virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from);
|
virtual int getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &from);
|
||||||
virtual int getDhtValue(const bdNodeId *id, std::string key, std::string &value);
|
virtual int getDhtValue(const bdNodeId *id, std::string key, std::string &value);
|
||||||
|
|
||||||
|
/* stats and Dht state */
|
||||||
|
virtual int startDht();
|
||||||
|
virtual int stopDht();
|
||||||
|
virtual int stateDht();
|
||||||
|
virtual uint32_t statsNetworkSize();
|
||||||
|
virtual uint32_t statsBDVersionSize();
|
||||||
|
|
||||||
/******************* Internals *************************/
|
/******************* Internals *************************/
|
||||||
/***** Iteration / Loop Management *****/
|
/***** Iteration / Loop Management *****/
|
||||||
|
|
||||||
|
|
|
@ -32,15 +32,26 @@
|
||||||
* #define DEBUG_THREADS 1
|
* #define DEBUG_THREADS 1
|
||||||
*******/
|
*******/
|
||||||
|
|
||||||
|
#define DEBUG_THREADS 1
|
||||||
|
|
||||||
#ifdef DEBUG_THREADS
|
#ifdef DEBUG_THREADS
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern "C" void* bdthread_init(void* p)
|
extern "C" void* bdthread_init(void* p)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "bdthread_init()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
bdThread *thread = (bdThread *) p;
|
bdThread *thread = (bdThread *) p;
|
||||||
if (!thread)
|
if (!thread)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "bdthread_init() Error Invalid thread pointer.";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
thread -> run();
|
thread -> run();
|
||||||
|
@ -53,19 +64,45 @@ pthread_t createThread(bdThread &thread)
|
||||||
pthread_t tid;
|
pthread_t tid;
|
||||||
void *data = (void *) (&thread);
|
void *data = (void *) (&thread);
|
||||||
|
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "createThread() creating a bdThread";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
thread.mMutex.lock();
|
thread.mMutex.lock();
|
||||||
{
|
{
|
||||||
pthread_create(&tid, 0, &bdthread_init, data);
|
pthread_create(&tid, 0, &bdthread_init, data);
|
||||||
thread.mTid = tid;
|
thread.mTid = tid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "createThread() created Thread.mTid: ";
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(__MINGW32__)
|
||||||
|
std::cerr << "WIN32: Cannot print mTid ";
|
||||||
|
#else
|
||||||
|
std::cerr << thread.mTid;
|
||||||
|
#endif
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
thread.mMutex.unlock();
|
thread.mMutex.unlock();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return tid;
|
return tid;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bdThread::bdThread()
|
bdThread::bdThread()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "bdThread::bdThread()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(__MINGW32__)
|
#if defined(_WIN32) || defined(__MINGW32__)
|
||||||
memset (&mTid, 0, sizeof(mTid));
|
memset (&mTid, 0, sizeof(mTid));
|
||||||
#else
|
#else
|
||||||
|
@ -75,16 +112,59 @@ bdThread::bdThread()
|
||||||
|
|
||||||
void bdThread::join() /* waits for the the mTid thread to stop */
|
void bdThread::join() /* waits for the the mTid thread to stop */
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "bdThread::join() Called! Waiting for Thread.mTid: ";
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(__MINGW32__)
|
||||||
|
std::cerr << "WIN32: Cannot print mTid ";
|
||||||
|
#else
|
||||||
|
std::cerr << mTid;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
mMutex.lock();
|
||||||
|
{
|
||||||
#if defined(_WIN32) || defined(__MINGW32__)
|
#if defined(_WIN32) || defined(__MINGW32__)
|
||||||
/* Its a struct in Windows compile and the member .p ist checked in the pthreads library */
|
/* Its a struct in Windows compile and the member .p ist checked in the pthreads library */
|
||||||
#else
|
#else
|
||||||
if(mTid > 0)
|
if(mTid > 0)
|
||||||
#endif
|
#endif
|
||||||
pthread_join(mTid, NULL);
|
pthread_join(mTid, NULL);
|
||||||
|
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "bdThread::join() Joined Thread.mTid: ";
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(__MINGW32__)
|
||||||
|
std::cerr << "WIN32: Cannot print mTid ";
|
||||||
|
#else
|
||||||
|
std::cerr << mTid;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "bdThread::join() Setting mTid = 0";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(__MINGW32__)
|
||||||
|
memset (&mTid, 0, sizeof(mTid));
|
||||||
|
#else
|
||||||
|
mTid = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
mMutex.unlock();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bdThread::stop()
|
void bdThread::stop()
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_THREADS
|
||||||
|
std::cerr << "bdThread::stop() Called!";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue