mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-02 14:16:16 -04:00
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:
parent
efe9503c3a
commit
190988c3cc
33 changed files with 387 additions and 329 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue