mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-14 17:07:17 -05:00
Changes to support the delay / bandwidth changes in libbitdht
* switched off the TESTING PERIODS. * added BASE PROXY wait time. * Increased PEERNET_CONNECT_TIMEOUT to 120 * Prevented connection startup with Request underway (dpd->mPeerReqState == RSDHT_PEERREQ_RUNNING) * corrected calculation of Exclusive Delay (Target of MIN_DETERMINISTIC_SWITCH_PERIOD = 60 secs). * don't do UDP Failed ConnectLogic update when connection was initiated remotely. * Extended UdpRelay to allow flexible Bandwidth limits in the future. * Added Timeout for Relays (30min for unknowns - 2hrs for friends). * Extract bandwidth from UdpRelay, at installation. git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-netupgrade@4463 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
551e2594bb
commit
96ec46478a
@ -31,7 +31,11 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#define TESTING_PERIODS 1
|
/**
|
||||||
|
*
|
||||||
|
* #define TESTING_PERIODS 1
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
/* Have made the PROXY Attempts + MAX_TIME much larger,
|
/* Have made the PROXY Attempts + MAX_TIME much larger,
|
||||||
* have have potential for this to take a while.
|
* have have potential for this to take a while.
|
||||||
@ -41,6 +45,7 @@
|
|||||||
#define FAILED_WAIT_TIME (1800) // 5 minutes.
|
#define FAILED_WAIT_TIME (1800) // 5 minutes.
|
||||||
#define TCP_WAIT_TIME (10) // 1/6 minutes.
|
#define TCP_WAIT_TIME (10) // 1/6 minutes.
|
||||||
#define DIRECT_MAX_WAIT_TIME (30) // 1/6 minutes.
|
#define DIRECT_MAX_WAIT_TIME (30) // 1/6 minutes.
|
||||||
|
#define PROXY_BASE_WAIT_TIME (30) // 1/6 minutes.
|
||||||
#define PROXY_MAX_WAIT_TIME (120) // 1/6 minutes.
|
#define PROXY_MAX_WAIT_TIME (120) // 1/6 minutes.
|
||||||
#define RELAY_MAX_WAIT_TIME (30) // 1/6 minutes.
|
#define RELAY_MAX_WAIT_TIME (30) // 1/6 minutes.
|
||||||
#define REVERSE_WAIT_TIME (30) // 1/2 minutes.
|
#define REVERSE_WAIT_TIME (30) // 1/2 minutes.
|
||||||
@ -54,15 +59,18 @@
|
|||||||
#define MAX_RELAY_FAILED_ATTEMPTS (1)
|
#define MAX_RELAY_FAILED_ATTEMPTS (1)
|
||||||
#else
|
#else
|
||||||
#define FAILED_WAIT_TIME (1800) // 30 minutes.
|
#define FAILED_WAIT_TIME (1800) // 30 minutes.
|
||||||
#define TCP_WAIT_TIME (60) // 1 minutes.
|
#define TCP_WAIT_TIME (30) // 1 minutes.
|
||||||
#define DIRECT_MAX_WAIT_TIME (60) // 1 minutes.
|
#define DIRECT_MAX_WAIT_TIME (60) // 1 minutes.
|
||||||
|
|
||||||
|
#define PROXY_BASE_WAIT_TIME (30) // 1/2 minutes.
|
||||||
#define PROXY_MAX_WAIT_TIME (120) // 1 minutes.
|
#define PROXY_MAX_WAIT_TIME (120) // 1 minutes.
|
||||||
|
|
||||||
#define RELAY_MAX_WAIT_TIME (60) // 1 minutes.
|
#define RELAY_MAX_WAIT_TIME (60) // 1 minutes.
|
||||||
#define REVERSE_WAIT_TIME (300) // 5 minutes.
|
#define REVERSE_WAIT_TIME (300) // 5 minutes.
|
||||||
|
|
||||||
#define MAX_DIRECT_ATTEMPTS (10)
|
#define MAX_DIRECT_ATTEMPTS (5)
|
||||||
#define MAX_PROXY_ATTEMPTS (20)
|
#define MAX_PROXY_ATTEMPTS (10)
|
||||||
#define MAX_RELAY_ATTEMPTS (10)
|
#define MAX_RELAY_ATTEMPTS (5)
|
||||||
|
|
||||||
#define MAX_DIRECT_FAILED_ATTEMPTS (3)
|
#define MAX_DIRECT_FAILED_ATTEMPTS (3)
|
||||||
#define MAX_PROXY_FAILED_ATTEMPTS (3)
|
#define MAX_PROXY_FAILED_ATTEMPTS (3)
|
||||||
@ -844,7 +852,7 @@ uint32_t PeerConnectStateBox::updateCb(uint32_t update)
|
|||||||
case CSB_PROXY_ATTEMPT:
|
case CSB_PROXY_ATTEMPT:
|
||||||
mState = CSB_PROXY_WAIT;
|
mState = CSB_PROXY_WAIT;
|
||||||
mStateTS = now;
|
mStateTS = now;
|
||||||
mNextAttemptTS = now + RSRandom::random_u32() % PROXY_MAX_WAIT_TIME;
|
mNextAttemptTS = now + PROXY_BASE_WAIT_TIME + (RSRandom::random_u32() % (PROXY_MAX_WAIT_TIME - PROXY_BASE_WAIT_TIME));
|
||||||
break;
|
break;
|
||||||
case CSB_RELAY_ATTEMPT:
|
case CSB_RELAY_ATTEMPT:
|
||||||
mState = CSB_RELAY_WAIT;
|
mState = CSB_RELAY_WAIT;
|
||||||
@ -874,7 +882,7 @@ uint32_t PeerConnectStateBox::updateCb(uint32_t update)
|
|||||||
case CSB_PROXY_ATTEMPT:
|
case CSB_PROXY_ATTEMPT:
|
||||||
mState = CSB_PROXY_WAIT;
|
mState = CSB_PROXY_WAIT;
|
||||||
mStateTS = now;
|
mStateTS = now;
|
||||||
mNextAttemptTS = now + RSRandom::random_u32() % PROXY_MAX_WAIT_TIME;
|
mNextAttemptTS = now + PROXY_BASE_WAIT_TIME + (RSRandom::random_u32() % (PROXY_MAX_WAIT_TIME - PROXY_BASE_WAIT_TIME));
|
||||||
break;
|
break;
|
||||||
case CSB_RELAY_ATTEMPT:
|
case CSB_RELAY_ATTEMPT:
|
||||||
mState = CSB_RELAY_WAIT;
|
mState = CSB_RELAY_WAIT;
|
||||||
|
@ -65,9 +65,9 @@ virtual int dhtValueCallback(const bdNodeId *id, std::string key, uint32_t statu
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual int dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
virtual int dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
||||||
uint32_t mode, uint32_t point, uint32_t cbtype, uint32_t errcode)
|
uint32_t mode, uint32_t point, uint32_t param, uint32_t cbtype, uint32_t errcode)
|
||||||
{
|
{
|
||||||
return mParent->ConnectCallback(srcId, proxyId, destId, mode, point, cbtype, errcode);
|
return mParent->ConnectCallback(srcId, proxyId, destId, mode, point, param, cbtype, errcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -204,17 +204,17 @@ int NodeCallback(const bdId *id, uint32_t peerflags);
|
|||||||
int PeerCallback(const bdId *id, uint32_t status);
|
int PeerCallback(const bdId *id, uint32_t status);
|
||||||
int ValueCallback(const bdNodeId *id, std::string key, uint32_t status);
|
int ValueCallback(const bdNodeId *id, std::string key, uint32_t status);
|
||||||
int ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
int ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
||||||
uint32_t mode, uint32_t point, uint32_t cbtype, uint32_t errcode);
|
uint32_t mode, uint32_t point, uint32_t param, uint32_t cbtype, uint32_t errcode);
|
||||||
|
|
||||||
int OnlinePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd);
|
int OnlinePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd);
|
||||||
int UnreachablePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd);
|
int UnreachablePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd);
|
||||||
//int tick();
|
//int tick();
|
||||||
int minuteTick();
|
int minuteTick();
|
||||||
int doActions();
|
int doActions();
|
||||||
int checkProxyAllowed(const bdId *srcId, const bdId *destId, int mode);
|
int checkProxyAllowed(const bdId *srcId, const bdId *destId, int mode, uint32_t &bandwidth);
|
||||||
int checkConnectionAllowed(const bdId *peerId, int mode);
|
int checkConnectionAllowed(const bdId *peerId, int mode);
|
||||||
void initiateConnection(const bdId *srcId, const bdId *proxyId, const bdId *destId, uint32_t mode, uint32_t loc, uint32_t answer);
|
void initiateConnection(const bdId *srcId, const bdId *proxyId, const bdId *destId, uint32_t mode, uint32_t loc, uint32_t delayOrBandwidth);
|
||||||
int installRelayConnection(const bdId *srcId, const bdId *destId);
|
int installRelayConnection(const bdId *srcId, const bdId *destId, uint32_t &bandwidth);
|
||||||
int removeRelayConnection(const bdId *srcId, const bdId *destId);
|
int removeRelayConnection(const bdId *srcId, const bdId *destId);
|
||||||
void monitorConnections();
|
void monitorConnections();
|
||||||
|
|
||||||
|
@ -20,7 +20,9 @@
|
|||||||
#include "pqi/p3netmgr.h"
|
#include "pqi/p3netmgr.h"
|
||||||
#include "pqi/pqimonitor.h"
|
#include "pqi/pqimonitor.h"
|
||||||
|
|
||||||
#define PEERNET_CONNECT_TIMEOUT 90 // Should be BIGGER than Higher level (but okay if not!)
|
#define PEERNET_CONNECT_TIMEOUT 120 // Should be BIGGER than Higher level (but okay if not!)
|
||||||
|
|
||||||
|
#define MIN_DETERMINISTIC_SWITCH_PERIOD 60
|
||||||
|
|
||||||
/***
|
/***
|
||||||
*
|
*
|
||||||
@ -298,7 +300,8 @@ int p3BitDht::PeerCallback(const bdId *id, uint32_t status)
|
|||||||
int p3BitDht::OnlinePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd)
|
int p3BitDht::OnlinePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (dpd->mPeerConnectState != RSDHT_PEERCONN_DISCONNECTED)
|
if ((dpd->mPeerConnectState != RSDHT_PEERCONN_DISCONNECTED) ||
|
||||||
|
(dpd->mPeerReqState == RSDHT_PEERREQ_RUNNING))
|
||||||
{
|
{
|
||||||
|
|
||||||
std::cerr << "p3BitDht::OnlinePeerCallback_locked() WARNING Ignoring Callback: connection already underway: ";
|
std::cerr << "p3BitDht::OnlinePeerCallback_locked() WARNING Ignoring Callback: connection already underway: ";
|
||||||
@ -395,7 +398,8 @@ int p3BitDht::OnlinePeerCallback_locked(const bdId *id, uint32_t status, DhtPeer
|
|||||||
int p3BitDht::UnreachablePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd)
|
int p3BitDht::UnreachablePeerCallback_locked(const bdId *id, uint32_t status, DhtPeerDetails *dpd)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (dpd->mPeerConnectState != RSDHT_PEERCONN_DISCONNECTED)
|
if ((dpd->mPeerConnectState != RSDHT_PEERCONN_DISCONNECTED) ||
|
||||||
|
(dpd->mPeerReqState == RSDHT_PEERREQ_RUNNING))
|
||||||
{
|
{
|
||||||
|
|
||||||
std::cerr << "p3BitDht::UnreachablePeerCallback_locked() WARNING Ignoring Callback: connection already underway: ";
|
std::cerr << "p3BitDht::UnreachablePeerCallback_locked() WARNING Ignoring Callback: connection already underway: ";
|
||||||
@ -498,7 +502,7 @@ int p3BitDht::ValueCallback(const bdNodeId *id, std::string key, uint32_t status
|
|||||||
}
|
}
|
||||||
|
|
||||||
int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
||||||
uint32_t mode, uint32_t point, uint32_t cbtype, uint32_t errcode)
|
uint32_t mode, uint32_t point, uint32_t param, uint32_t cbtype, uint32_t errcode)
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::ConnectCallback()";
|
std::cerr << "p3BitDht::ConnectCallback()";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
@ -512,7 +516,8 @@ int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId
|
|||||||
bdStdPrintId(std::cerr, destId);
|
bdStdPrintId(std::cerr, destId);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
std::cerr << "mode: " << mode;
|
std::cerr << " mode: " << mode;
|
||||||
|
std::cerr << " param: " << param;
|
||||||
std::cerr << " point: " << point;
|
std::cerr << " point: " << point;
|
||||||
std::cerr << " cbtype: " << cbtype;
|
std::cerr << " cbtype: " << cbtype;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
@ -554,9 +559,11 @@ int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId
|
|||||||
std::cerr << " and ";
|
std::cerr << " and ";
|
||||||
bdStdPrintId(std::cerr, destId);
|
bdStdPrintId(std::cerr, destId);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
uint32_t bandwidth = 0;
|
||||||
|
|
||||||
int connectionAllowed = BITDHT_CONNECT_ERROR_GENERIC;
|
int connectionAllowed = BITDHT_CONNECT_ERROR_GENERIC;
|
||||||
if (checkProxyAllowed(srcId, destId, mode))
|
if (checkProxyAllowed(srcId, destId, mode, bandwidth))
|
||||||
{
|
{
|
||||||
connectionAllowed = BITDHT_CONNECT_ANSWER_OKAY;
|
connectionAllowed = BITDHT_CONNECT_ANSWER_OKAY;
|
||||||
std::cerr << "dhtConnectionCallback() Connection Allowed";
|
std::cerr << "dhtConnectionCallback() Connection Allowed";
|
||||||
@ -580,7 +587,7 @@ int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId
|
|||||||
ca.mDestId = *destId;
|
ca.mDestId = *destId;
|
||||||
ca.mPoint = point;
|
ca.mPoint = point;
|
||||||
ca.mAnswer = connectionAllowed;
|
ca.mAnswer = connectionAllowed;
|
||||||
ca.mDelayOrBandwidth = 0;
|
ca.mDelayOrBandwidth = bandwidth;
|
||||||
|
|
||||||
mActions.push_back(ca);
|
mActions.push_back(ca);
|
||||||
}
|
}
|
||||||
@ -768,11 +775,22 @@ 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;
|
||||||
int delay = mProxyStunner->grabExclusiveMode();
|
int stun_age = mProxyStunner->grabExclusiveMode();
|
||||||
if (delay > 0)
|
if (stun_age > 0)
|
||||||
{
|
{
|
||||||
|
int delay = 0;
|
||||||
|
if (stun_age < MIN_DETERMINISTIC_SWITCH_PERIOD)
|
||||||
|
{
|
||||||
|
delay = MIN_DETERMINISTIC_SWITCH_PERIOD - stun_age;
|
||||||
|
}
|
||||||
|
|
||||||
/* great we got it! */
|
/* great we got it! */
|
||||||
ca.mDelayOrBandwidth = delay;
|
ca.mDelayOrBandwidth = delay;
|
||||||
|
|
||||||
|
std::cerr << "dhtConnectionCallback: GotExclusiveLock With Delay: " << delay;
|
||||||
|
std::cerr << " for stable port";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
DhtPeerDetails *dpd = findInternalDhtPeer_locked(&(peerId.id), RSDHT_PEERTYPE_FRIEND);
|
DhtPeerDetails *dpd = findInternalDhtPeer_locked(&(peerId.id), RSDHT_PEERTYPE_FRIEND);
|
||||||
if (dpd)
|
if (dpd)
|
||||||
{
|
{
|
||||||
@ -853,6 +871,7 @@ int p3BitDht::ConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId
|
|||||||
ca.mSrcId = *srcId;
|
ca.mSrcId = *srcId;
|
||||||
ca.mDestId = *destId;
|
ca.mDestId = *destId;
|
||||||
ca.mPoint = point;
|
ca.mPoint = point;
|
||||||
|
ca.mDelayOrBandwidth = param;
|
||||||
ca.mAnswer = BITDHT_CONNECT_ERROR_NONE;
|
ca.mAnswer = BITDHT_CONNECT_ERROR_NONE;
|
||||||
|
|
||||||
mActions.push_back(ca);
|
mActions.push_back(ca);
|
||||||
@ -1183,9 +1202,19 @@ 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 delay = mProxyStunner->grabExclusiveMode();
|
int stun_age = mProxyStunner->grabExclusiveMode();
|
||||||
if (delay > 0)
|
if (stun_age > 0)
|
||||||
{
|
{
|
||||||
|
int delay = 0;
|
||||||
|
if (stun_age < MIN_DETERMINISTIC_SWITCH_PERIOD)
|
||||||
|
{
|
||||||
|
delay = MIN_DETERMINISTIC_SWITCH_PERIOD - stun_age;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << "PeerAction: Stunner has indicated a Delay of " << delay;
|
||||||
|
std::cerr << " to ensure a stable Port!";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
/* great we got it! */
|
/* great we got it! */
|
||||||
connAddr = extaddr;
|
connAddr = extaddr;
|
||||||
connDelay = delay;
|
connDelay = delay;
|
||||||
@ -1244,9 +1273,7 @@ int p3BitDht::doActions()
|
|||||||
|
|
||||||
if (doConnectionRequest)
|
if (doConnectionRequest)
|
||||||
{
|
{
|
||||||
// XXX TO DO.
|
if (mUdpBitDht->ConnectionRequest(&connAddr, &(action.mDestId.id), action.mMode, connDelay, connStart))
|
||||||
//if (mUdpBitDht->ConnectionRequest(&connAddr, &(action.mDestId.id), action.mMode, connStart, connDelay))
|
|
||||||
if (mUdpBitDht->ConnectionRequest(&connAddr, &(action.mDestId.id), action.mMode, connStart))
|
|
||||||
{
|
{
|
||||||
RsStackMutex stack(dhtMtx); /********** LOCKED MUTEX ***************/
|
RsStackMutex stack(dhtMtx); /********** LOCKED MUTEX ***************/
|
||||||
|
|
||||||
@ -1321,12 +1348,19 @@ int p3BitDht::doActions()
|
|||||||
std::cerr << " delay/bandwidth: " << action.mDelayOrBandwidth;
|
std::cerr << " delay/bandwidth: " << action.mDelayOrBandwidth;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
// XXX TODO
|
int delay = 0;
|
||||||
//mUdpBitDht->ConnectionAuth(&(action.mSrcId), &(action.mProxyId), &(action.mDestId),
|
int bandwidth = 0;
|
||||||
// action.mMode, action.mPoint, action.mAnswer, action.mDelayOrBandwidth);
|
if (action.mMode == BITDHT_CONNECT_MODE_RELAY)
|
||||||
|
{
|
||||||
|
bandwidth = action.mDelayOrBandwidth;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delay = action.mDelayOrBandwidth;
|
||||||
|
}
|
||||||
|
|
||||||
mUdpBitDht->ConnectionAuth(&(action.mSrcId), &(action.mProxyId), &(action.mDestId),
|
mUdpBitDht->ConnectionAuth(&(action.mSrcId), &(action.mProxyId), &(action.mDestId),
|
||||||
action.mMode, action.mPoint, action.mAnswer);
|
action.mMode, action.mPoint, bandwidth, delay, action.mAnswer);
|
||||||
|
|
||||||
// Only feedback to the gui if we are at END.
|
// Only feedback to the gui if we are at END.
|
||||||
if (action.mPoint == BD_PROXY_CONNECTION_END_POINT)
|
if (action.mPoint == BD_PROXY_CONNECTION_END_POINT)
|
||||||
@ -1379,12 +1413,8 @@ int p3BitDht::doActions()
|
|||||||
std::cerr << " delay/bandwidth: " << action.mDelayOrBandwidth;
|
std::cerr << " delay/bandwidth: " << action.mDelayOrBandwidth;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
// XXX TO DO.
|
|
||||||
//initiateConnection(&(action.mSrcId), &(action.mProxyId), &(action.mDestId),
|
|
||||||
// action.mMode, action.mPoint, action.mAnswer, action.mDelayOrBandwidth);
|
|
||||||
|
|
||||||
initiateConnection(&(action.mSrcId), &(action.mProxyId), &(action.mDestId),
|
initiateConnection(&(action.mSrcId), &(action.mProxyId), &(action.mDestId),
|
||||||
action.mMode, action.mPoint, action.mAnswer);
|
action.mMode, action.mPoint, action.mDelayOrBandwidth);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1399,10 +1429,9 @@ int p3BitDht::doActions()
|
|||||||
struct sockaddr_in laddr;
|
struct sockaddr_in laddr;
|
||||||
sockaddr_clear(&laddr);
|
sockaddr_clear(&laddr);
|
||||||
uint32_t start = 1;
|
uint32_t start = 1;
|
||||||
// XXX TO DO.
|
uint32_t delay = 0;
|
||||||
//mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode, start, 0);
|
|
||||||
|
|
||||||
mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode, start);
|
mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode, delay, start);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1417,10 +1446,9 @@ int p3BitDht::doActions()
|
|||||||
struct sockaddr_in laddr;
|
struct sockaddr_in laddr;
|
||||||
sockaddr_clear(&laddr);
|
sockaddr_clear(&laddr);
|
||||||
uint32_t start = 0;
|
uint32_t start = 0;
|
||||||
|
uint32_t delay = 0;
|
||||||
|
|
||||||
// XXX TO DO.
|
mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode, delay, start);
|
||||||
//mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode, start, 0);
|
|
||||||
mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode, start);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1481,7 +1509,7 @@ int p3BitDht::doActions()
|
|||||||
* Can also validate addresses with own secure connections.
|
* Can also validate addresses with own secure connections.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int p3BitDht::checkProxyAllowed(const bdId *srcId, const bdId *destId, int mode)
|
int p3BitDht::checkProxyAllowed(const bdId *srcId, const bdId *destId, int mode, uint32_t &bandwidth)
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::checkProxyAllowed()";
|
std::cerr << "p3BitDht::checkProxyAllowed()";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
@ -1497,6 +1525,7 @@ int p3BitDht::checkProxyAllowed(const bdId *srcId, const bdId *destId, int mode)
|
|||||||
std::cerr << "p3BitDht::checkProxyAllowed() Allowing all PROXY connections, OKAY";
|
std::cerr << "p3BitDht::checkProxyAllowed() Allowing all PROXY connections, OKAY";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
bandwidth = 0; // unlimited as p2p.
|
||||||
return 1;
|
return 1;
|
||||||
//return CONNECTION_OKAY;
|
//return CONNECTION_OKAY;
|
||||||
}
|
}
|
||||||
@ -1508,8 +1537,10 @@ int p3BitDht::checkProxyAllowed(const bdId *srcId, const bdId *destId, int mode)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* will install the Relay Here... so that we reserve the Relay Space for later. */
|
/* will install the Relay Here... so that we reserve the Relay Space for later.
|
||||||
if (installRelayConnection(srcId, destId))
|
* decide on relay bandwidth limitation as well
|
||||||
|
*/
|
||||||
|
if (installRelayConnection(srcId, destId, bandwidth))
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::checkProxyAllowed() Successfully added Relay, Connection OKAY";
|
std::cerr << "p3BitDht::checkProxyAllowed() Successfully added Relay, Connection OKAY";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
@ -1666,7 +1697,8 @@ void p3BitDht::ConnectCalloutRelay(const std::string &peerId,
|
|||||||
// uint32_t source, uint32_t flags, uint32_t delay, uint32_t bandwidth) = 0;
|
// uint32_t source, uint32_t flags, uint32_t delay, uint32_t bandwidth) = 0;
|
||||||
|
|
||||||
|
|
||||||
void p3BitDht::initiateConnection(const bdId *srcId, const bdId *proxyId, const bdId *destId, uint32_t mode, uint32_t loc, uint32_t answer)
|
void p3BitDht::initiateConnection(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
||||||
|
uint32_t mode, uint32_t loc, uint32_t delayOrBandwidth)
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::initiateConnection()";
|
std::cerr << "p3BitDht::initiateConnection()";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
@ -1682,12 +1714,15 @@ void p3BitDht::initiateConnection(const bdId *srcId, const bdId *proxyId, const
|
|||||||
bdStdPrintId(std::cerr, destId);
|
bdStdPrintId(std::cerr, destId);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
std::cerr << "\t Mode: " << mode << " loc: " << loc << " answer: " << answer;
|
std::cerr << "\t Mode: " << mode << " loc: " << loc;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "\t DelayOrBandwidth: " << delayOrBandwidth;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
bdId peerConnectId;
|
bdId peerConnectId;
|
||||||
|
|
||||||
uint32_t connectFlags = 0;
|
uint32_t connectFlags = 0;
|
||||||
|
|
||||||
uint32_t delay = 0;
|
uint32_t delay = 0;
|
||||||
uint32_t bandwidth = 0;
|
uint32_t bandwidth = 0;
|
||||||
|
|
||||||
@ -1764,7 +1799,7 @@ void p3BitDht::initiateConnection(const bdId *srcId, const bdId *proxyId, const
|
|||||||
case BITDHT_CONNECT_MODE_DIRECT:
|
case BITDHT_CONNECT_MODE_DIRECT:
|
||||||
touConnectMode = RSDHT_TOU_MODE_DIRECT;
|
touConnectMode = RSDHT_TOU_MODE_DIRECT;
|
||||||
connectFlags |= RS_CB_FLAG_MODE_UDP_DIRECT;
|
connectFlags |= RS_CB_FLAG_MODE_UDP_DIRECT;
|
||||||
delay = answer;
|
delay = delayOrBandwidth;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BITDHT_CONNECT_MODE_PROXY:
|
case BITDHT_CONNECT_MODE_PROXY:
|
||||||
@ -1776,7 +1811,7 @@ void p3BitDht::initiateConnection(const bdId *srcId, const bdId *proxyId, const
|
|||||||
std::cerr << " UseProxyPort? " << useProxyPort;
|
std::cerr << " UseProxyPort? " << useProxyPort;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
delay = answer;
|
delay = delayOrBandwidth;
|
||||||
if (useProxyPort)
|
if (useProxyPort)
|
||||||
{
|
{
|
||||||
touConnectMode = RSDHT_TOU_MODE_PROXY;
|
touConnectMode = RSDHT_TOU_MODE_PROXY;
|
||||||
@ -1794,7 +1829,7 @@ void p3BitDht::initiateConnection(const bdId *srcId, const bdId *proxyId, const
|
|||||||
case BITDHT_CONNECT_MODE_RELAY:
|
case BITDHT_CONNECT_MODE_RELAY:
|
||||||
touConnectMode = RSDHT_TOU_MODE_RELAY;
|
touConnectMode = RSDHT_TOU_MODE_RELAY;
|
||||||
connectFlags |= RS_CB_FLAG_MODE_UDP_RELAY;
|
connectFlags |= RS_CB_FLAG_MODE_UDP_RELAY;
|
||||||
bandwidth = answer;
|
bandwidth = delayOrBandwidth;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1834,7 +1869,7 @@ void p3BitDht::initiateConnection(const bdId *srcId, const bdId *proxyId, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int p3BitDht::installRelayConnection(const bdId *srcId, const bdId *destId)
|
int p3BitDht::installRelayConnection(const bdId *srcId, const bdId *destId, uint32_t &bandwidth)
|
||||||
{
|
{
|
||||||
RsStackMutex stack(dhtMtx); /********** LOCKED MUTEX ***************/
|
RsStackMutex stack(dhtMtx); /********** LOCKED MUTEX ***************/
|
||||||
|
|
||||||
@ -1876,7 +1911,7 @@ int p3BitDht::installRelayConnection(const bdId *srcId, const bdId *destId)
|
|||||||
|
|
||||||
/* will install the Relay Here... so that we reserve the Relay Space for later. */
|
/* will install the Relay Here... so that we reserve the Relay Space for later. */
|
||||||
UdpRelayAddrSet relayAddrs(&(srcId->addr), &(destId->addr));
|
UdpRelayAddrSet relayAddrs(&(srcId->addr), &(destId->addr));
|
||||||
if (mRelay->addUdpRelay(&relayAddrs, relayClass))
|
if (mRelay->addUdpRelay(&relayAddrs, relayClass, bandwidth))
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::installRelayConnection() Successfully added Relay, Connection OKAY";
|
std::cerr << "p3BitDht::installRelayConnection() Successfully added Relay, Connection OKAY";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
@ -1944,7 +1979,8 @@ void p3BitDht::monitorConnections()
|
|||||||
|
|
||||||
if (now - it->second.mPeerConnectUdpTS > PEERNET_CONNECT_TIMEOUT)
|
if (now - it->second.mPeerConnectUdpTS > PEERNET_CONNECT_TIMEOUT)
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::monitorConnections() ERROR InProgress Connection Failed: ";
|
/* This CAN happen ;( */
|
||||||
|
std::cerr << "p3BitDht::monitorConnections() WARNING InProgress Connection Failed: ";
|
||||||
bdStdPrintNodeId(std::cerr, &(it->second.mDhtId.id));
|
bdStdPrintNodeId(std::cerr, &(it->second.mDhtId.id));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
@ -2082,8 +2118,13 @@ void p3BitDht::UdpConnectionFailed_locked(DhtPeerDetails *dpd)
|
|||||||
bdStdPrintNodeId(std::cerr, &(dpd->mDhtId.id));
|
bdStdPrintNodeId(std::cerr, &(dpd->mDhtId.id));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
/* shut id down */
|
/* shut it down */
|
||||||
dpd->mConnectLogic.updateCb(CSB_UPDATE_FAILED_ATTEMPT);
|
|
||||||
|
/* ONLY need to update ConnectLogic - if it was our Attempt Running */
|
||||||
|
if (dpd->mPeerReqState == RSDHT_PEERREQ_RUNNING)
|
||||||
|
{
|
||||||
|
dpd->mConnectLogic.updateCb(CSB_UPDATE_FAILED_ATTEMPT);
|
||||||
|
}
|
||||||
dpd->mPeerConnectState = RSDHT_PEERCONN_DISCONNECTED;
|
dpd->mPeerConnectState = RSDHT_PEERCONN_DISCONNECTED;
|
||||||
dpd->mPeerConnectMsg = "UDP Failed";
|
dpd->mPeerConnectMsg = "UDP Failed";
|
||||||
|
|
||||||
|
@ -213,10 +213,12 @@ int UdpRelayReceiver::checkRelays()
|
|||||||
std::cerr << " using bandwidth: " << rit->second.mBandwidth;
|
std::cerr << " using bandwidth: " << rit->second.mBandwidth;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
if (rit->second.mBandwidth > RELAY_MAX_BANDWIDTH)
|
if (rit->second.mBandwidth > rit->second.mBandwidthLimit)
|
||||||
{
|
{
|
||||||
std::cerr << "UdpRelayReceiver::checkRelays()";
|
std::cerr << "UdpRelayReceiver::checkRelays() ";
|
||||||
std::cerr << "Dropping Relay due to excessive Bandwidth: " << rit->first;
|
std::cerr << "Dropping Relay due to excessive Bandwidth: " << rit->second.mBandwidth;
|
||||||
|
std::cerr << " Exceeding Limit: " << rit->second.mBandwidthLimit;
|
||||||
|
std::cerr << " Relay: " << rit->first;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
/* if exceeding bandwidth -> drop */
|
/* if exceeding bandwidth -> drop */
|
||||||
@ -225,11 +227,39 @@ int UdpRelayReceiver::checkRelays()
|
|||||||
else if (now - rit->second.mLastTS > RELAY_TIMEOUT)
|
else if (now - rit->second.mLastTS > RELAY_TIMEOUT)
|
||||||
{
|
{
|
||||||
/* if haven't transmitted for ages -> drop */
|
/* if haven't transmitted for ages -> drop */
|
||||||
std::cerr << "UdpRelayReceiver::checkRelays()";
|
std::cerr << "UdpRelayReceiver::checkRelays() ";
|
||||||
std::cerr << "Dropping Relay due to Timeout: " << rit->first;
|
std::cerr << "Dropping Relay due to Timeout: " << rit->first;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
eraseList.push_back(rit->first);
|
eraseList.push_back(rit->first);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* check the length of the relay - we will drop them after a certain amount of time */
|
||||||
|
int lifetime = 0;
|
||||||
|
switch(rit->second.mRelayClass)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case UDP_RELAY_CLASS_GENERAL:
|
||||||
|
lifetime = UDP_RELAY_LIFETIME_GENERAL;
|
||||||
|
break;
|
||||||
|
case UDP_RELAY_CLASS_FOF:
|
||||||
|
lifetime = UDP_RELAY_LIFETIME_FOF;
|
||||||
|
break;
|
||||||
|
case UDP_RELAY_CLASS_FRIENDS:
|
||||||
|
lifetime = UDP_RELAY_LIFETIME_FRIENDS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (now - rit->second.mStartTS > lifetime)
|
||||||
|
{
|
||||||
|
std::cerr << "UdpRelayReceiver::checkRelays() ";
|
||||||
|
std::cerr << "Dropping Relay due to Passing Lifetime Limit: " << lifetime;
|
||||||
|
std::cerr << " for class: " << rit->second.mRelayClass;
|
||||||
|
std::cerr << " Relay: " << rit->first;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
eraseList.push_back(rit->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<UdpRelayAddrSet>::iterator it;
|
std::list<UdpRelayAddrSet>::iterator it;
|
||||||
@ -249,7 +279,7 @@ int UdpRelayReceiver::removeUdpRelay(UdpRelayAddrSet *addrSet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int UdpRelayReceiver::addUdpRelay(UdpRelayAddrSet *addrSet, int relayClass)
|
int UdpRelayReceiver::addUdpRelay(UdpRelayAddrSet *addrSet, int relayClass, uint32_t &bandwidth)
|
||||||
{
|
{
|
||||||
RsStackMutex stack(relayMtx); /********** LOCK MUTEX *********/
|
RsStackMutex stack(relayMtx); /********** LOCK MUTEX *********/
|
||||||
|
|
||||||
@ -279,6 +309,9 @@ int UdpRelayReceiver::addUdpRelay(UdpRelayAddrSet *addrSet, int relayClass)
|
|||||||
mRelays[*addrSet] = udpRelay;
|
mRelays[*addrSet] = udpRelay;
|
||||||
mRelays[alt] = altUdpRelay;
|
mRelays[alt] = altUdpRelay;
|
||||||
|
|
||||||
|
/* grab bandwidth from one set */
|
||||||
|
bandwidth = altUdpRelay.mBandwidthLimit;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -799,6 +832,9 @@ UdpRelayProxy::UdpRelayProxy()
|
|||||||
mLastBandwidthTS = 0;
|
mLastBandwidthTS = 0;
|
||||||
mLastTS = time(NULL); // Must be set here, otherwise Proxy Timesout before anything can happen!
|
mLastTS = time(NULL); // Must be set here, otherwise Proxy Timesout before anything can happen!
|
||||||
mRelayClass = 0;
|
mRelayClass = 0;
|
||||||
|
|
||||||
|
mStartTS = time(NULL);
|
||||||
|
mBandwidthLimit = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
UdpRelayProxy::UdpRelayProxy(UdpRelayAddrSet *addrSet, int relayClass)
|
UdpRelayProxy::UdpRelayProxy(UdpRelayAddrSet *addrSet, int relayClass)
|
||||||
@ -810,6 +846,22 @@ UdpRelayProxy::UdpRelayProxy(UdpRelayAddrSet *addrSet, int relayClass)
|
|||||||
mDataSize = 0;
|
mDataSize = 0;
|
||||||
mLastBandwidthTS = 0;
|
mLastBandwidthTS = 0;
|
||||||
mLastTS = time(NULL);
|
mLastTS = time(NULL);
|
||||||
|
|
||||||
|
|
||||||
|
mStartTS = time(NULL);
|
||||||
|
switch(relayClass)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case UDP_RELAY_CLASS_GENERAL:
|
||||||
|
mBandwidthLimit = RELAY_MAX_BANDWIDTH;
|
||||||
|
break;
|
||||||
|
case UDP_RELAY_CLASS_FOF:
|
||||||
|
mBandwidthLimit = RELAY_MAX_BANDWIDTH;
|
||||||
|
break;
|
||||||
|
case UDP_RELAY_CLASS_FRIENDS:
|
||||||
|
mBandwidthLimit = RELAY_MAX_BANDWIDTH;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UdpRelayEnd::UdpRelayEnd()
|
UdpRelayEnd::UdpRelayEnd()
|
||||||
|
@ -57,6 +57,9 @@ class UdpRelayProxy
|
|||||||
time_t mLastBandwidthTS;
|
time_t mLastBandwidthTS;
|
||||||
time_t mLastTS;
|
time_t mLastTS;
|
||||||
|
|
||||||
|
time_t mStartTS;
|
||||||
|
double mBandwidthLimit;
|
||||||
|
|
||||||
int mRelayClass;
|
int mRelayClass;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -100,6 +103,15 @@ std::ostream &operator<<(std::ostream &out, const UdpRelayEnd &ure);
|
|||||||
#define UDP_RELAY_CLASS_FOF 2
|
#define UDP_RELAY_CLASS_FOF 2
|
||||||
#define UDP_RELAY_CLASS_FRIENDS 3
|
#define UDP_RELAY_CLASS_FRIENDS 3
|
||||||
|
|
||||||
|
// Just for some testing fun!
|
||||||
|
//#define UDP_RELAY_LIFETIME_GENERAL 180 // 3 minutes
|
||||||
|
//#define UDP_RELAY_LIFETIME_FOF 360 // 6 minutes.
|
||||||
|
//#define UDP_RELAY_LIFETIME_FRIENDS 720 // 12 minutes.
|
||||||
|
|
||||||
|
#define UDP_RELAY_LIFETIME_GENERAL 1800 // 30 minutes
|
||||||
|
#define UDP_RELAY_LIFETIME_FOF 3600 // 1 Hour.
|
||||||
|
#define UDP_RELAY_LIFETIME_FRIENDS 7200 // 2 Hour.
|
||||||
|
|
||||||
#define STD_RELAY_TTL 64
|
#define STD_RELAY_TTL 64
|
||||||
|
|
||||||
class UdpRelayReceiver: public UdpSubReceiver
|
class UdpRelayReceiver: public UdpSubReceiver
|
||||||
@ -119,7 +131,7 @@ int removeUdpPeer(UdpPeer *peer);
|
|||||||
* the end-points drop the connections
|
* the end-points drop the connections
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int addUdpRelay(UdpRelayAddrSet *addrs, int classIdx);
|
int addUdpRelay(UdpRelayAddrSet *addrSet, int relayClass, uint32_t &bandwidth);
|
||||||
int removeUdpRelay(UdpRelayAddrSet *addrs);
|
int removeUdpRelay(UdpRelayAddrSet *addrs);
|
||||||
|
|
||||||
/* Need some stats, to work out how many relays we are supporting */
|
/* Need some stats, to work out how many relays we are supporting */
|
||||||
|
Loading…
Reference in New Issue
Block a user