Switched most of the services to use p3ServiceControl instead of p3LinkMgr.

- Added a couple of utility fns to p3ServiceControl too.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7211 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2014-03-29 03:57:44 +00:00
parent efe9503c3a
commit 190988c3cc
33 changed files with 387 additions and 329 deletions

View file

@ -98,13 +98,15 @@ ftFileControl::ftFileControl(std::string fname,
return;
}
ftController::ftController(CacheStrapper *cs, ftDataMultiplex *dm, std::string /*configDir*/)
ftController::ftController(CacheStrapper *cs, ftDataMultiplex *dm, p3ServiceControl *sc, uint32_t ftServiceId)
:CacheTransfer(cs), p3Config(CONFIG_TYPE_FT_CONTROL),
last_save_time(0),
last_clean_time(0),
mDataplex(dm),
mTurtle(NULL),
mFtServer(NULL),
mServiceCtrl(sc),
mFtServiceId(ftServiceId),
ctrlMutex("ftController"),
doneMutex("ftController"),
mFtActive(false),
@ -173,7 +175,7 @@ void ftController::addFileSource(const RsFileHash& hash,const RsPeerId& peer_id)
if(it != mDownloads.end())
{
it->second->mTransfer->addFileSource(peer_id);
setPeerState(it->second->mTransfer, peer_id, FT_CNTRL_STANDARD_RATE, mLinkMgr->isOnline( peer_id ));
setPeerState(it->second->mTransfer, peer_id, FT_CNTRL_STANDARD_RATE, mServiceCtrl->isPeerConnected(mFtServiceId, peer_id ));
#ifdef CONTROL_DEBUG
std::cerr << "... added." << std::endl ;
@ -295,7 +297,7 @@ void ftController::searchForDirectSources()
for(std::list<TransferInfo>::const_iterator pit = info.peers.begin(); pit != info.peers.end(); pit++)
if(rsPeers->servicePermissionFlags(pit->peerId) & RS_SERVICE_PERM_DIRECT_DL)
if(it->second->mTransfer->addFileSource(pit->peerId)) /* if the sources don't exist already - add in */
setPeerState(it->second->mTransfer, pit->peerId, FT_CNTRL_STANDARD_RATE, mLinkMgr->isOnline( pit->peerId ));
setPeerState(it->second->mTransfer, pit->peerId, FT_CNTRL_STANDARD_RATE, mServiceCtrl->isPeerConnected(mFtServiceId, pit->peerId));
}
}
@ -1208,7 +1210,7 @@ bool ftController::FileRequest(const std::string& fname, const RsFileHash& hash
std::cerr << std::endl;
#endif
(dit->second)->mTransfer->addFileSource(*it);
setPeerState(dit->second->mTransfer, *it, rate, mLinkMgr->isOnline(*it));
setPeerState(dit->second->mTransfer, *it, rate, mServiceCtrl->isPeerConnected(mFtServiceId, *it));
IndicateConfigChanged(); /* new peer for transfer -> save */
}
@ -1305,7 +1307,7 @@ bool ftController::FileRequest(const std::string& fname, const RsFileHash& hash
std::cerr << "ftController::FileRequest() adding peer: " << *it;
std::cerr << std::endl;
#endif
setPeerState(tm, *it, rate, mLinkMgr->isOnline(*it));
setPeerState(tm, *it, rate, mServiceCtrl->isPeerConnected(mFtServiceId, *it));
}
/* add structures into the accessible data. Needs to be locked */
@ -1333,7 +1335,7 @@ bool ftController::FileRequest(const std::string& fname, const RsFileHash& hash
bool ftController::setPeerState(ftTransferModule *tm, const RsPeerId& id, uint32_t maxrate, bool online)
{
if (id == mLinkMgr->getOwnId())
if (id == mServiceCtrl->getOwnId())
{
#ifdef CONTROL_DEBUG
std::cerr << "ftController::setPeerState() is Self";
@ -1815,14 +1817,14 @@ bool ftController::FileDetails(const RsFileHash &hash, FileInfo &info)
/* pqiMonitor callback:
* Used to tell TransferModules new available peers
*/
void ftController::statusChange(const std::list<pqipeer> &plist)
void ftController::statusChange(const std::list<pqiServicePeer> &plist)
{
RsStackMutex stack(ctrlMutex); /******* LOCKED ********/
uint32_t rate = FT_CNTRL_STANDARD_RATE;
/* add online to all downloads */
std::map<RsFileHash, ftFileControl*>::iterator it;
std::list<pqipeer>::const_iterator pit;
std::list<pqiServicePeer>::const_iterator pit;
#ifdef CONTROL_DEBUG
std::cerr << "ftController::statusChange()";
@ -1842,7 +1844,7 @@ void ftController::statusChange(const std::list<pqipeer> &plist)
#ifdef CONTROL_DEBUG
std::cerr << "Peer: " << pit->id;
#endif
if (pit->actions & RS_PEER_CONNECTED)
if (pit->actions & RS_SERVICE_PEER_CONNECTED)
{
#ifdef CONTROL_DEBUG
std::cerr << " is Newly Connected!";
@ -1850,7 +1852,7 @@ void ftController::statusChange(const std::list<pqipeer> &plist)
#endif
setPeerState(it->second->mTransfer, pit->id, rate, true);
}
else if (pit->actions & RS_PEER_DISCONNECTED)
else if (pit->actions & RS_SERVICE_PEER_DISCONNECTED)
{
#ifdef CONTROL_DEBUG
std::cerr << " is Just disconnected!";
@ -1858,7 +1860,7 @@ void ftController::statusChange(const std::list<pqipeer> &plist)
#endif
setPeerState(it->second->mTransfer, pit->id, rate, false);
}
else
else // Added or Removed.
{
#ifdef CONTROL_DEBUG
std::cerr << " had something happen to it: ";
@ -1872,41 +1874,42 @@ void ftController::statusChange(const std::list<pqipeer> &plist)
// Now also look at turtle virtual peers.
//
std::list<pqipeer> vlist ;
std::list<pqipeer>::const_iterator vit;
mTurtle->getSourceVirtualPeersList(it->first,vlist) ;
#ifdef CONTROL_DEBUG
std::cerr << "vlist.size() = " << vlist.size() << std::endl;
#endif
for(pit = vlist.begin(); pit != vlist.end(); pit++)
for(vit = vlist.begin(); vit != vlist.end(); vit++)
{
#ifdef CONTROL_DEBUG
std::cerr << "Peer: " << pit->id;
std::cerr << "Peer: " << vit->id;
#endif
if (pit->actions & RS_PEER_CONNECTED)
if (vit->actions & RS_PEER_CONNECTED)
{
#ifdef CONTROL_DEBUG
std::cerr << " is Newly Connected!";
std::cerr << std::endl;
#endif
setPeerState(it->second->mTransfer, pit->id, rate, true);
setPeerState(it->second->mTransfer, vit->id, rate, true);
}
else if (pit->actions & RS_PEER_DISCONNECTED)
else if (vit->actions & RS_PEER_DISCONNECTED)
{
#ifdef CONTROL_DEBUG
std::cerr << " is Just disconnected!";
std::cerr << std::endl;
#endif
setPeerState(it->second->mTransfer, pit->id, rate, false);
setPeerState(it->second->mTransfer, vit->id, rate, false);
}
else
{
#ifdef CONTROL_DEBUG
std::cerr << " had something happen to it: ";
std::cerr << pit-> actions;
std::cerr << vit-> actions;
std::cerr << std::endl;
#endif
setPeerState(it->second->mTransfer, pit->id, rate, false);
setPeerState(it->second->mTransfer, vit->id, rate, false);
}
}
}

View file

@ -46,10 +46,11 @@ class ftServer;
class ftExtraList;
class ftDataMultiplex;
class p3turtle ;
class p3ServiceControl;
#include "dbase/cachestrapper.h"
#include "util/rsthreads.h"
#include "pqi/pqimonitor.h"
#include "pqi/pqiservicemonitor.h"
#include "pqi/p3cfgmgr.h"
#include "retroshare/rsfiles.h"
@ -112,12 +113,12 @@ class ftPendingRequest
};
class ftController: public CacheTransfer, public RsThread, public pqiMonitor, public p3Config
class ftController: public CacheTransfer, public RsThread, public pqiServiceMonitor, public p3Config
{
public:
/* Setup */
ftController(CacheStrapper *cs, ftDataMultiplex *dm, std::string configDir);
ftController(CacheStrapper *cs, ftDataMultiplex *dm, p3ServiceControl *sc, uint32_t ftServiceId);
void setFtSearchNExtra(ftSearch *, ftExtraList *);
void setTurtleRouter(p3turtle *) ;
@ -187,7 +188,8 @@ class ftController: public CacheTransfer, public RsThread, public pqiMonitor, pu
bool assumeAvailability(const RsPeerId& peer_id) const ;
/* pqiMonitor callback (also provided mConnMgr pointer!) */
virtual void statusChange(const std::list<pqipeer> &plist);
virtual void statusChange(const std::list<pqiServicePeer> &plist);
void addFileSource(const RsFileHash& hash,const RsPeerId& peer_id) ;
void removeFileSource(const RsFileHash& hash,const RsPeerId& peer_id) ;
@ -238,6 +240,8 @@ class ftController: public CacheTransfer, public RsThread, public pqiMonitor, pu
ftExtraList *mExtraList;
p3turtle *mTurtle ;
ftServer *mFtServer ;
p3ServiceControl *mServiceCtrl;
uint32_t mFtServiceId;
RsMutex ctrlMutex;

View file

@ -378,8 +378,8 @@ void ftFiMonitor::setSharedDirectories(const std::list<SharedDirInfo>& dirList)
ftCacheStrapper::ftCacheStrapper(p3LinkMgr *lm)
:CacheStrapper(lm)
ftCacheStrapper::ftCacheStrapper(p3ServiceControl *sc, uint32_t ftServiceId)
:CacheStrapper(sc, ftServiceId)
{
return;
}

View file

@ -35,6 +35,7 @@
class p3LinkMgr ;
class p3PeerMgr ;
class p3ServiceControl ;
#include "ft/ftsearch.h"
@ -91,7 +92,7 @@ virtual bool loadList(std::list<RsItem *>& load);
class ftCacheStrapper: public CacheStrapper, public ftSearch
{
public:
ftCacheStrapper(p3LinkMgr *cm);
ftCacheStrapper(p3ServiceControl *cm, uint32_t ftServiceId);
/* overloaded search function */
virtual bool search(const RsFileHash &hash, FileSearchFlags hintflags, FileInfo &info) const;

View file

@ -63,16 +63,16 @@ const int ftserverzone = 29539;
static const time_t FILE_TRANSFER_LOW_PRIORITY_TASKS_PERIOD = 5 ; // low priority tasks handling every 5 seconds
/* Setup */
ftServer::ftServer(p3PeerMgr *pm, p3LinkMgr *lm)
ftServer::ftServer(p3PeerMgr *pm, p3ServiceControl *sc)
: p3Service(),
mPeerMgr(pm),
mLinkMgr(lm),
mServiceCtrl(sc),
mCacheStrapper(NULL),
mFiStore(NULL), mFiMon(NULL),
mFtController(NULL), mFtExtra(NULL),
mFtDataplex(NULL), mFtSearch(NULL), srvMutex("ftServer")
{
mCacheStrapper = new ftCacheStrapper(lm);
mCacheStrapper = new ftCacheStrapper(sc, getServiceInfo().mServiceType);
addSerialType(new RsFileTransferSerialiser()) ;
}
@ -123,8 +123,8 @@ const RsPeerId& ftServer::OwnId()
{
static RsPeerId null_id ;
if (mLinkMgr)
return mLinkMgr->getOwnId();
if (mServiceCtrl)
return mServiceCtrl->getOwnId();
else
return null_id ;
}
@ -136,7 +136,7 @@ void ftServer::SetupFtServer()
/* setup FiStore/Monitor */
std::string localcachedir = mConfigPath + "/cache/local";
std::string remotecachedir = mConfigPath + "/cache/remote";
RsPeerId ownId = mLinkMgr->getOwnId();
RsPeerId ownId = mServiceCtrl->getOwnId();
/* search/extras List */
mFtExtra = new ftExtraList();
@ -146,7 +146,7 @@ void ftServer::SetupFtServer()
mFtDataplex = new ftDataMultiplex(ownId, this, mFtSearch);
/* make Controller */
mFtController = new ftController(mCacheStrapper, mFtDataplex, mConfigPath);
mFtController = new ftController(mCacheStrapper, mFtDataplex, mServiceCtrl, getServiceInfo().mServiceType);
mFtController -> setFtSearchNExtra(mFtSearch, mFtExtra);
std::string tmppath = ".";
mFtController->setPartialsDirectory(tmppath);
@ -167,8 +167,8 @@ void ftServer::SetupFtServer()
mFtSearch->addSearchMode(mFiMon, RS_FILE_HINTS_LOCAL);
mFtSearch->addSearchMode(mFiStore, RS_FILE_HINTS_REMOTE);
mLinkMgr->addMonitor(mFtController);
mLinkMgr->addMonitor(mCacheStrapper);
mServiceCtrl->registerServiceMonitor(mFtController, getServiceInfo().mServiceType);
mServiceCtrl->registerServiceMonitor(mCacheStrapper, getServiceInfo().mServiceType);
return;
}
@ -562,7 +562,7 @@ int ftServer::RequestDirDetails(const RsPeerId& uid, const std::string& path, Di
std::cerr << std::endl;
}
#endif
if(uid == mLinkMgr->getOwnId())
if(uid == mServiceCtrl->getOwnId())
return mFiMon->RequestDirDetails(path, details);
else
return mFiStore->RequestDirDetails(uid, path, details);

View file

@ -72,7 +72,7 @@ class p3turtle;
class ftDwlQueue;
class p3PeerMgr;
class p3LinkMgr;
class p3ServiceControl;
class ftServer: public p3Service, public RsFiles, public ftDataSend, public RsTurtleClientService
{
@ -83,7 +83,7 @@ class ftServer: public p3Service, public RsFiles, public ftDataSend, public RsTu
/******************** Setup ************************************/
/***************************************************************/
ftServer(p3PeerMgr *peerMgr, p3LinkMgr *linkMgr);
ftServer(p3PeerMgr *peerMgr, p3ServiceControl *serviceCtrl);
virtual RsServiceInfo getServiceInfo();
/* Assign important variables */
@ -274,7 +274,7 @@ class ftServer: public p3Service, public RsFiles, public ftDataSend, public RsTu
* as each component is protected independently.
*/
p3PeerMgr *mPeerMgr;
p3LinkMgr *mLinkMgr;
p3ServiceControl *mServiceCtrl;
ftCacheStrapper *mCacheStrapper;
ftFiStore *mFiStore;