mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
* modified code to add PeerId to stunner->exclusiveMode.
* fixed missing releaseExclusiveMode. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4490 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
461378a3de
commit
f67da9f8ce
@ -560,6 +560,11 @@ int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId
|
|||||||
|
|
||||||
/* if we get here, we are an endpoint (peer specified in peerId) */
|
/* if we get here, we are an endpoint (peer specified in peerId) */
|
||||||
|
|
||||||
|
/* translate id into string for exclusive mode */
|
||||||
|
std::ostringstream idstr;
|
||||||
|
bdStdPrintNodeId(idstr, &(peerId.id));
|
||||||
|
std::string pid = idstr.str();
|
||||||
|
|
||||||
switch(cbtype)
|
switch(cbtype)
|
||||||
{
|
{
|
||||||
case BITDHT_CONNECT_CB_AUTH:
|
case BITDHT_CONNECT_CB_AUTH:
|
||||||
@ -701,7 +706,8 @@ int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId
|
|||||||
std::cerr << "dhtConnectionCallback: Attempting to Grab ExclusiveLock of UdpStunner";
|
std::cerr << "dhtConnectionCallback: Attempting to Grab ExclusiveLock of UdpStunner";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
int stun_age = mProxyStunner->grabExclusiveMode();
|
|
||||||
|
int stun_age = mProxyStunner->grabExclusiveMode(pid);
|
||||||
if (stun_age > 0)
|
if (stun_age > 0)
|
||||||
{
|
{
|
||||||
int delay = 0;
|
int delay = 0;
|
||||||
@ -735,7 +741,7 @@ int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId
|
|||||||
std::cerr << "PeerAction: Connect Proxy: ERROR Cannot find PeerStatus";
|
std::cerr << "PeerAction: Connect Proxy: ERROR Cannot find PeerStatus";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
connectionAllowed = BITDHT_CONNECT_ERROR_TEMPUNAVAIL;
|
connectionAllowed = BITDHT_CONNECT_ERROR_TEMPUNAVAIL;
|
||||||
mProxyStunner->releaseExclusiveMode(false);
|
mProxyStunner->releaseExclusiveMode(pid,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1075,6 +1081,12 @@ int p3BitDht::doActions()
|
|||||||
bool connectionReqFailed = false;
|
bool connectionReqFailed = false;
|
||||||
bool grabbedExclusivePort = false;
|
bool grabbedExclusivePort = false;
|
||||||
|
|
||||||
|
/* translate id into string for exclusive mode */
|
||||||
|
std::ostringstream idstr;
|
||||||
|
bdStdPrintNodeId(idstr, &(action.mDestId.id));
|
||||||
|
std::string pid = idstr.str();
|
||||||
|
|
||||||
|
|
||||||
// Parameters that will be used for the Connect Request.
|
// Parameters that will be used for the Connect Request.
|
||||||
struct sockaddr_in connAddr; // We zero this address. (DHT Layer handles most cases)
|
struct sockaddr_in connAddr; // We zero this address. (DHT Layer handles most cases)
|
||||||
sockaddr_clear(&connAddr);
|
sockaddr_clear(&connAddr);
|
||||||
@ -1143,6 +1155,8 @@ int p3BitDht::doActions()
|
|||||||
stunner = mDhtStunner;
|
stunner = mDhtStunner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ((connectOk) && (stunner) && (stunner->externalAddr(extaddr, extStable)))
|
if ((connectOk) && (stunner) && (stunner->externalAddr(extaddr, extStable)))
|
||||||
{
|
{
|
||||||
if (extStable)
|
if (extStable)
|
||||||
@ -1157,7 +1171,7 @@ int p3BitDht::doActions()
|
|||||||
/* check if we require exclusive use of the proxy port */
|
/* check if we require exclusive use of the proxy port */
|
||||||
if (exclusivePort)
|
if (exclusivePort)
|
||||||
{
|
{
|
||||||
int stun_age = mProxyStunner->grabExclusiveMode();
|
int stun_age = mProxyStunner->grabExclusiveMode(pid);
|
||||||
if (stun_age > 0)
|
if (stun_age > 0)
|
||||||
{
|
{
|
||||||
int delay = 0;
|
int delay = 0;
|
||||||
@ -1285,10 +1299,10 @@ int p3BitDht::doActions()
|
|||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (grabbedExclusivePort)
|
//if (grabbedExclusivePort)
|
||||||
{
|
//{
|
||||||
mProxyStunner->releaseExclusiveMode(false);
|
// mProxyStunner->releaseExclusiveMode(pid,false);
|
||||||
}
|
//}
|
||||||
|
|
||||||
RsStackMutex stack(dhtMtx); /********** LOCKED MUTEX ***************/
|
RsStackMutex stack(dhtMtx); /********** LOCKED MUTEX ***************/
|
||||||
DhtPeerDetails *dpd = findInternalDhtPeer_locked(&(action.mDestId.id), RSDHT_PEERTYPE_FRIEND);
|
DhtPeerDetails *dpd = findInternalDhtPeer_locked(&(action.mDestId.id), RSDHT_PEERTYPE_FRIEND);
|
||||||
@ -1300,6 +1314,25 @@ int p3BitDht::doActions()
|
|||||||
dpd->mPeerReqState = RSDHT_PEERREQ_STOPPED;
|
dpd->mPeerReqState = RSDHT_PEERREQ_STOPPED;
|
||||||
dpd->mPeerReqMode = action.mMode;
|
dpd->mPeerReqMode = action.mMode;
|
||||||
dpd->mPeerReqTS = now;
|
dpd->mPeerReqTS = now;
|
||||||
|
|
||||||
|
if (grabbedExclusivePort)
|
||||||
|
{
|
||||||
|
ReleaseProxyExclusiveMode_locked(dpd, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "PeerAction: ERROR Connection Attempt to: ";
|
||||||
|
bdStdPrintId(std::cerr, &(action.mDestId));
|
||||||
|
std::cerr << " has no Internal Dht Peer!";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
if (grabbedExclusivePort)
|
||||||
|
{
|
||||||
|
std::cerr << "PeerAction: ERROR ERROR, we grabd Exclusive Port to do this, trying emergency release";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
mProxyStunner->releaseExclusiveMode(pid,false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2176,7 +2209,8 @@ void p3BitDht::UdpConnectionFailed_locked(DhtPeerDetails *dpd)
|
|||||||
if (dpd->mPeerReqState == RSDHT_PEERREQ_RUNNING)
|
if (dpd->mPeerReqState == RSDHT_PEERREQ_RUNNING)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_PEERNET
|
#ifdef DEBUG_PEERNET
|
||||||
std::cerr << "p3BitDht::monitorConnections() Request Active (Paused)... Killing for next Attempt";
|
std::cerr << "p3BitDht::UdpConnectionFailed_locked() ";
|
||||||
|
std::cerr << "Request Active (Paused)... Killing for next Attempt";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2195,7 +2229,8 @@ void p3BitDht::UdpConnectionFailed_locked(DhtPeerDetails *dpd)
|
|||||||
// only an error if we initiated the connection.
|
// only an error if we initiated the connection.
|
||||||
else if (dpd->mPeerConnectPoint == BD_PROXY_CONNECTION_START_POINT)
|
else if (dpd->mPeerConnectPoint == BD_PROXY_CONNECTION_START_POINT)
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::monitorConnections() ERROR Request not active, can't stop";
|
std::cerr << "p3BitDht::UdpConnectionFailed_locked() ";
|
||||||
|
std::cerr << "ERROR Request not active, can't stop";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2207,22 +2242,28 @@ void p3BitDht::UdpConnectionFailed_locked(DhtPeerDetails *dpd)
|
|||||||
void p3BitDht::ReleaseProxyExclusiveMode_locked(DhtPeerDetails *dpd, bool addrChgLikely)
|
void p3BitDht::ReleaseProxyExclusiveMode_locked(DhtPeerDetails *dpd, bool addrChgLikely)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_BITDHT_COMMON
|
#ifdef DEBUG_BITDHT_COMMON
|
||||||
|
#endif
|
||||||
std::cerr << "p3BitDht::ReleaseProxyExclusiveMode_locked()";
|
std::cerr << "p3BitDht::ReleaseProxyExclusiveMode_locked()";
|
||||||
bdStdPrintNodeId(std::cerr, &(dpd->mDhtId.id));
|
bdStdPrintNodeId(std::cerr, &(dpd->mDhtId.id));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
|
||||||
|
/* translate id into string for exclusive mode */
|
||||||
|
std::ostringstream idstr;
|
||||||
|
bdStdPrintNodeId(idstr, &(dpd->mDhtId.id));
|
||||||
|
std::string pid = idstr.str();
|
||||||
|
|
||||||
|
|
||||||
if (dpd->mExclusiveProxyLock)
|
if (dpd->mExclusiveProxyLock)
|
||||||
{
|
{
|
||||||
if (mProxyStunner->releaseExclusiveMode(addrChgLikely))
|
if (mProxyStunner->releaseExclusiveMode(pid, addrChgLikely))
|
||||||
{
|
{
|
||||||
dpd->mExclusiveProxyLock = false;
|
dpd->mExclusiveProxyLock = false;
|
||||||
|
|
||||||
#ifdef DEBUG_PEERNET
|
#ifdef DEBUG_PEERNET
|
||||||
|
#endif
|
||||||
std::cerr << "p3BitDht::ReleaseProxyExclusiveMode_locked() Lock released by Connection to peer: ";
|
std::cerr << "p3BitDht::ReleaseProxyExclusiveMode_locked() Lock released by Connection to peer: ";
|
||||||
bdStdPrintNodeId(std::cerr, &(dpd->mDhtId.id));
|
bdStdPrintNodeId(std::cerr, &(dpd->mDhtId.id));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2237,9 +2278,9 @@ void p3BitDht::ReleaseProxyExclusiveMode_locked(DhtPeerDetails *dpd, bool addrCh
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_BITDHT_COMMON
|
#ifdef DEBUG_BITDHT_COMMON
|
||||||
|
#endif
|
||||||
std::cerr << "p3BitDht::ReleaseProxyExclusiveMode_locked() Don't Have a Lock";
|
std::cerr << "p3BitDht::ReleaseProxyExclusiveMode_locked() Don't Have a Lock";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user