mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-04-19 14:55:54 -04:00
* Moved DataRate interface from rsiface (old) -> rsConfig.
* Internally moved storage of data rate from pqipersongroup -> p3serverconfig * made DataRate + Operating Mode work together. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@5889 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
0fa8d55062
commit
de80f2aa3e
@ -108,7 +108,7 @@ int pqipersongrp::tickServiceSend()
|
||||
|
||||
// init
|
||||
pqipersongrp::pqipersongrp(SecurityPolicy *glob, unsigned long flags)
|
||||
:pqihandler(glob), pqil(NULL), config(NULL), initFlags(flags)
|
||||
:pqihandler(glob), pqil(NULL), initFlags(flags)
|
||||
{
|
||||
}
|
||||
|
||||
@ -222,57 +222,6 @@ bool pqipersongrp::resetListener(struct sockaddr_in &local)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* NOT bothering to protect Config with a mutex.... it is not going to change
|
||||
* and has its own internal mutexs.
|
||||
*/
|
||||
int pqipersongrp::setConfig(p3GeneralConfig *cfg)
|
||||
{
|
||||
config = cfg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const std::string pqih_ftr("PQIH_FTR");
|
||||
|
||||
int pqipersongrp::save_config()
|
||||
{
|
||||
char line[512];
|
||||
sprintf(line, "%f %f", getMaxRate(true), getMaxRate(false));
|
||||
if (config)
|
||||
{
|
||||
config -> setSetting(pqih_ftr, std::string(line));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int pqipersongrp::load_config()
|
||||
{
|
||||
std::string line;
|
||||
if (config)
|
||||
{
|
||||
line = config -> getSetting(pqih_ftr);
|
||||
}
|
||||
|
||||
float mri, mro;
|
||||
|
||||
if (2 == sscanf(line.c_str(), "%f %f", &mri, &mro))
|
||||
{
|
||||
setMaxRate(true, mri);
|
||||
setMaxRate(false, mro);
|
||||
}
|
||||
else
|
||||
{
|
||||
pqioutput(PQL_DEBUG_BASIC, pqipersongrpzone,
|
||||
"pqipersongrp::load_config() Loading Default Rates!");
|
||||
|
||||
|
||||
setMaxRate(true, DEFAULT_DOWNLOAD_KB_RATE);
|
||||
setMaxRate(false, DEFAULT_UPLOAD_KB_RATE);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void pqipersongrp::statusChange(const std::list<pqipeer> &plist)
|
||||
{
|
||||
|
||||
|
@ -57,10 +57,6 @@ class pqipersongrp: public pqihandler, public pqiMonitor, public p3ServiceServer
|
||||
virtual bool resetListener(struct sockaddr_in &local); // overloaded from pqiNetListener
|
||||
int init_listener();
|
||||
|
||||
int setConfig(p3GeneralConfig *cfg);
|
||||
int save_config();
|
||||
int load_config();
|
||||
|
||||
/*************** pqiMonitor callback ***********************/
|
||||
virtual void statusChange(const std::list<pqipeer> &plist);
|
||||
|
||||
@ -119,7 +115,6 @@ virtual int checkOutgoingRsItem(RsItem *item, int global)
|
||||
int tickServiceSend();
|
||||
|
||||
pqilistener *pqil;
|
||||
p3GeneralConfig *config;
|
||||
unsigned long initFlags;
|
||||
};
|
||||
|
||||
|
@ -278,8 +278,9 @@ virtual uint32_t getOperatingMode() = 0;
|
||||
virtual bool setOperatingMode(uint32_t opMode) = 0;
|
||||
|
||||
/* Data Rate Control - to be moved here */
|
||||
virtual int SetDataRates( int downKb, int upKb ) = 0;
|
||||
virtual int GetDataRates( float &inKb, float &outKb ) = 0;
|
||||
virtual int SetMaxDataRates( int downKb, int upKb ) = 0;
|
||||
virtual int GetMaxDataRates( int &inKb, int &outKb ) = 0;
|
||||
virtual int GetCurrentDataRates( float &inKb, float &outKb ) = 0;
|
||||
|
||||
};
|
||||
|
||||
|
@ -157,8 +157,6 @@ class RsControl /* The Main Interface Class - for controlling the server */
|
||||
/****************************************/
|
||||
/* Config */
|
||||
|
||||
virtual int ConfigSetDataRates( int totalDownload, int totalUpload ) = 0;
|
||||
virtual int ConfigGetDataRates( float &inKb, float &outKb) = 0;
|
||||
virtual int ConfigSetBootPrompt( bool on ) = 0;
|
||||
virtual void ConfigFinalSave( ) = 0;
|
||||
virtual void rsGlobalShutDown( ) = 0;
|
||||
|
@ -112,7 +112,6 @@ class RsConfig
|
||||
{
|
||||
localPort = extPort = 0 ;
|
||||
firewalled = forwardPort = false ;
|
||||
maxDownloadDataRate = maxUploadDataRate = maxIndivDataRate = 0 ;
|
||||
promptAtBoot = 0 ;
|
||||
DHTActive = uPnPActive = netLocalOk = netUpnpOk = netDhtOk = netStunOk = netExtraAddressOk = false ;
|
||||
uPnPState = DHTPeers = 0 ;
|
||||
@ -129,10 +128,6 @@ class RsConfig
|
||||
bool firewalled;
|
||||
bool forwardPort;
|
||||
|
||||
int maxDownloadDataRate; /* kb */
|
||||
int maxUploadDataRate; /* kb */
|
||||
int maxIndivDataRate; /* kb */
|
||||
|
||||
int promptAtBoot; /* popup the password prompt */
|
||||
|
||||
/* older data types */
|
||||
|
@ -45,49 +45,6 @@ const int p3facemsgzone = 11453;
|
||||
/* RsIface Config */
|
||||
/* Config */
|
||||
|
||||
int RsServer::ConfigSetDataRates( int totalDownload, int totalUpload ) /* in kbrates */
|
||||
{
|
||||
/* fill the rsiface class */
|
||||
RsIface &iface = getIface();
|
||||
|
||||
/* lock Mutexes */
|
||||
lockRsCore(); /* LOCK */
|
||||
iface.lockData(); /* LOCK */
|
||||
|
||||
pqih -> setMaxRate(true, totalDownload);
|
||||
pqih -> setMaxRate(false, totalUpload);
|
||||
|
||||
pqih -> save_config();
|
||||
|
||||
/* unlock Mutexes */
|
||||
iface.unlockData(); /* UNLOCK */
|
||||
unlockRsCore(); /* UNLOCK */
|
||||
|
||||
/* does its own locking */
|
||||
UpdateAllConfig();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int RsServer::ConfigGetDataRates( float &inKb, float &outKb ) /* in kbrates */
|
||||
{
|
||||
/* fill the rsiface class */
|
||||
RsIface &iface = getIface();
|
||||
|
||||
/* lock Mutexes */
|
||||
lockRsCore(); /* LOCK */
|
||||
iface.lockData(); /* LOCK */
|
||||
|
||||
pqih -> getCurrentRates(inKb, outKb);
|
||||
|
||||
/* unlock Mutexes */
|
||||
iface.unlockData(); /* UNLOCK */
|
||||
unlockRsCore(); /* UNLOCK */
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int RsServer::ConfigSetBootPrompt( bool /*on*/ )
|
||||
{
|
||||
|
||||
@ -120,11 +77,6 @@ int RsServer::UpdateAllConfig()
|
||||
|
||||
config.extAddr = rs_inet_ntoa(pstate.serveraddr.sin_addr);
|
||||
config.extPort = ntohs(pstate.serveraddr.sin_port);
|
||||
|
||||
/* data rates */
|
||||
config.maxDownloadDataRate = (int) pqih -> getMaxRate(true); /* kb */
|
||||
config.maxUploadDataRate = (int) pqih -> getMaxRate(false); /* kb */
|
||||
|
||||
config.promptAtBoot = true; /* popup the password prompt */
|
||||
|
||||
/* update network configuration */
|
||||
|
@ -128,8 +128,6 @@ class RsServer: public RsControl, public RsThread
|
||||
public:
|
||||
/* Config */
|
||||
|
||||
virtual int ConfigGetDataRates(float &inKb, float &outKb);
|
||||
virtual int ConfigSetDataRates( int totalDownload, int totalUpload );
|
||||
virtual int ConfigSetBootPrompt( bool on );
|
||||
|
||||
virtual void ConfigFinalSave( );
|
||||
|
@ -28,17 +28,27 @@
|
||||
|
||||
RsServerConfig *rsConfig = NULL;
|
||||
|
||||
static const std::string pqih_ftr("PQIH_FTR");
|
||||
|
||||
p3ServerConfig::p3ServerConfig(p3PeerMgr *peerMgr, p3LinkMgr *linkMgr, p3NetMgr *netMgr, p3GeneralConfig *genCfg)
|
||||
#define DEFAULT_DOWNLOAD_KB_RATE (200.0)
|
||||
#define DEFAULT_UPLOAD_KB_RATE (50.0)
|
||||
|
||||
#define MIN_MINIMAL_RATE (5.0)
|
||||
|
||||
|
||||
p3ServerConfig::p3ServerConfig(p3PeerMgr *peerMgr, p3LinkMgr *linkMgr, p3NetMgr *netMgr, pqihandler *pqih, p3GeneralConfig *genCfg)
|
||||
:configMtx("p3ServerConfig")
|
||||
{
|
||||
mPeerMgr = peerMgr;
|
||||
mLinkMgr = linkMgr;
|
||||
mNetMgr = netMgr;
|
||||
mPqiHandler = pqih;
|
||||
|
||||
mGeneralConfig = genCfg;
|
||||
|
||||
mUserLevel = RSCONFIG_USER_LEVEL_NEW; /* START LEVEL */
|
||||
mRateDownload = DEFAULT_DOWNLOAD_KB_RATE;
|
||||
mRateUpload = DEFAULT_UPLOAD_KB_RATE;
|
||||
|
||||
rsConfig = this;
|
||||
}
|
||||
@ -50,6 +60,33 @@ p3ServerConfig::~p3ServerConfig()
|
||||
}
|
||||
|
||||
|
||||
void p3ServerConfig::load_config()
|
||||
{
|
||||
/* get the real bandwidth setting from GeneralConfig */
|
||||
std::string rates = mGeneralConfig -> getSetting(pqih_ftr);
|
||||
|
||||
float mri, mro;
|
||||
if (2 == sscanf(rates.c_str(), "%f %f", &mri, &mro))
|
||||
{
|
||||
RsStackMutex stack(configMtx); /******* LOCKED MUTEX *****/
|
||||
|
||||
mRateDownload = mri;
|
||||
mRateUpload = mro;
|
||||
}
|
||||
else
|
||||
{
|
||||
RsStackMutex stack(configMtx); /******* LOCKED MUTEX *****/
|
||||
|
||||
mRateDownload = DEFAULT_DOWNLOAD_KB_RATE;
|
||||
mRateUpload = DEFAULT_UPLOAD_KB_RATE;
|
||||
}
|
||||
|
||||
/* enable operating mode */
|
||||
uint32_t opMode = getOperatingMode();
|
||||
switchToOperatingMode(opMode);
|
||||
}
|
||||
|
||||
|
||||
#define RS_CONFIG_ADVANCED_STRING "AdvMode"
|
||||
|
||||
bool p3ServerConfig::findConfigurationOption(uint32_t key, std::string &keystr)
|
||||
@ -305,6 +342,7 @@ uint32_t p3ServerConfig::getOperatingMode()
|
||||
return mode;
|
||||
}
|
||||
|
||||
|
||||
bool p3ServerConfig::setOperatingMode(uint32_t opMode)
|
||||
{
|
||||
std::string modestr = "FULL";
|
||||
@ -329,8 +367,18 @@ bool p3ServerConfig::setOperatingMode(uint32_t opMode)
|
||||
return switchToOperatingMode(opMode);
|
||||
}
|
||||
|
||||
|
||||
bool p3ServerConfig::switchToOperatingMode(uint32_t opMode)
|
||||
{
|
||||
float dl_rate = 0;
|
||||
float ul_rate = 0;
|
||||
|
||||
{
|
||||
RsStackMutex stack(configMtx); /******* LOCKED MUTEX *****/
|
||||
dl_rate = mRateDownload;
|
||||
ul_rate = mRateUpload;
|
||||
}
|
||||
|
||||
switch (opMode)
|
||||
{
|
||||
default:
|
||||
@ -338,6 +386,8 @@ bool p3ServerConfig::switchToOperatingMode(uint32_t opMode)
|
||||
/* switch on all transfers */
|
||||
/* 100% bandwidth */
|
||||
/* switch on popups, enable hashing */
|
||||
//setMaxRate(true, mri); // In / Download
|
||||
//setMaxRate(false, mro); // Out / Upload.
|
||||
break;
|
||||
case RS_OPMODE_NOTURTLE:
|
||||
/* switch on all transfers - except turtle, enable hashing */
|
||||
@ -349,13 +399,36 @@ bool p3ServerConfig::switchToOperatingMode(uint32_t opMode)
|
||||
/* switch on all transfers */
|
||||
/* reduce bandwidth to 25% */
|
||||
/* switch off popups, enable hashing */
|
||||
|
||||
dl_rate *= 0.25;
|
||||
ul_rate *= 0.25;
|
||||
break;
|
||||
case RS_OPMODE_MINIMAL:
|
||||
/* switch off all transfers */
|
||||
/* reduce bandwidth to 10%, but make sure there is enough for VoIP */
|
||||
/* switch on popups, enable hashing */
|
||||
|
||||
|
||||
dl_rate *= 0.10;
|
||||
ul_rate *= 0.10;
|
||||
if (dl_rate < MIN_MINIMAL_RATE)
|
||||
{
|
||||
dl_rate = MIN_MINIMAL_RATE;
|
||||
}
|
||||
if (ul_rate < MIN_MINIMAL_RATE)
|
||||
{
|
||||
ul_rate = MIN_MINIMAL_RATE;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (mPqiHandler)
|
||||
{
|
||||
mPqiHandler -> setMaxRate(true, dl_rate);
|
||||
mPqiHandler -> setMaxRate(false, ul_rate);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -363,20 +436,36 @@ bool p3ServerConfig::switchToOperatingMode(uint32_t opMode)
|
||||
/* handle data rates.
|
||||
* Mutex must be handled at the lower levels: TODO */
|
||||
|
||||
int p3ServerConfig::SetDataRates( int downKb, int upKb ) /* in kbrates */
|
||||
int p3ServerConfig::SetMaxDataRates( int downKb, int upKb ) /* in kbrates */
|
||||
{
|
||||
//pqih -> setMaxRate(true, totalDownload);
|
||||
//pqih -> setMaxRate(false, totalUpload);
|
||||
char line[512];
|
||||
|
||||
//pqih -> save_config();
|
||||
{
|
||||
RsStackMutex stack(configMtx); /******* LOCKED MUTEX *****/
|
||||
mRateDownload = downKb;
|
||||
mRateUpload = upKb;
|
||||
sprintf(line, "%f %f", mRateDownload, mRateUpload);
|
||||
}
|
||||
mGeneralConfig->setSetting(pqih_ftr, std::string(line));
|
||||
|
||||
load_config(); // load and setup everything.
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int p3ServerConfig::GetDataRates( float &inKb, float &outKb ) /* in kbrates */
|
||||
int p3ServerConfig::GetMaxDataRates( int &inKb, int &outKb ) /* in kbrates */
|
||||
{
|
||||
//pqih -> getCurrentRates(inKb, outKb);
|
||||
RsStackMutex stack(configMtx); /******* LOCKED MUTEX *****/
|
||||
|
||||
inKb = mRateDownload;
|
||||
outKb = mRateUpload;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int p3ServerConfig::GetCurrentDataRates( float &inKb, float &outKb )
|
||||
{
|
||||
mPqiHandler->getCurrentRates(inKb, outKb);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "pqi/p3linkmgr.h"
|
||||
#include "pqi/p3netmgr.h"
|
||||
#include "pqi/p3cfgmgr.h"
|
||||
#include "pqi/pqihandler.h"
|
||||
|
||||
|
||||
#define RS_CONFIG_ADVANCED_STRING "AdvMode"
|
||||
@ -42,9 +43,11 @@ class p3ServerConfig: public RsServerConfig
|
||||
{
|
||||
public:
|
||||
|
||||
p3ServerConfig(p3PeerMgr *peerMgr, p3LinkMgr *linkMgr, p3NetMgr *netMgr, p3GeneralConfig *genCfg);
|
||||
p3ServerConfig(p3PeerMgr *peerMgr, p3LinkMgr *linkMgr, p3NetMgr *netMgr, pqihandler *pqih, p3GeneralConfig *genCfg);
|
||||
virtual ~p3ServerConfig();
|
||||
|
||||
void load_config();
|
||||
|
||||
/* From RsIface::RsConfig */
|
||||
|
||||
virtual int getConfigNetStatus(RsConfigNetStatus &status);
|
||||
@ -88,8 +91,9 @@ virtual bool setConfigurationOption(uint32_t key, const std::string &opt);
|
||||
virtual uint32_t getOperatingMode();
|
||||
virtual bool setOperatingMode(uint32_t opMode);
|
||||
|
||||
virtual int SetDataRates( int downKb, int upKb );
|
||||
virtual int GetDataRates( float &inKb, float &outKb );
|
||||
virtual int SetMaxDataRates( int downKb, int upKb );
|
||||
virtual int GetMaxDataRates( int &downKb, int &upKb );
|
||||
virtual int GetCurrentDataRates( float &inKb, float &outKb );
|
||||
|
||||
/********************* ABOVE is RsConfig Interface *******/
|
||||
|
||||
@ -102,10 +106,13 @@ bool findConfigurationOption(uint32_t key, std::string &keystr);
|
||||
p3PeerMgr *mPeerMgr;
|
||||
p3LinkMgr *mLinkMgr;
|
||||
p3NetMgr *mNetMgr;
|
||||
pqihandler *mPqiHandler;
|
||||
p3GeneralConfig *mGeneralConfig;
|
||||
|
||||
RsMutex configMtx;
|
||||
uint32_t mUserLevel; // store last one... will later be a config Item too.
|
||||
float mRateDownload;
|
||||
float mRateUpload;
|
||||
|
||||
};
|
||||
|
||||
|
@ -2407,9 +2407,8 @@ int RsServer::StartupRetroShare()
|
||||
/**************************************************************************/
|
||||
/* trigger generalConfig loading for classes that require it */
|
||||
/**************************************************************************/
|
||||
pqih->setConfig(mGeneralConfig);
|
||||
|
||||
pqih->load_config();
|
||||
p3ServerConfig *serverConfig = new p3ServerConfig(mPeerMgr, mLinkMgr, mNetMgr, pqih, mGeneralConfig);
|
||||
serverConfig->load_config();
|
||||
|
||||
/**************************************************************************/
|
||||
/* Force Any Configuration before Startup (After Load) */
|
||||
@ -2543,7 +2542,7 @@ int RsServer::StartupRetroShare()
|
||||
|
||||
rsDisc = new p3Discovery(ad);
|
||||
rsBandwidthControl = mBwCtrl;
|
||||
rsConfig = new p3ServerConfig(mPeerMgr, mLinkMgr, mNetMgr, mGeneralConfig);
|
||||
rsConfig = serverConfig;
|
||||
|
||||
rsMsgs = new p3Msgs(msgSrv, chatSrv);
|
||||
rsForums = mForums;
|
||||
|
Loading…
x
Reference in New Issue
Block a user