mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-14 00:49:41 -05:00
updated network simulator to new class layout and ids
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7224 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
46fd60f1e4
commit
afcded6c3b
@ -1,8 +1,8 @@
|
||||
#include "MonitoredTurtle.h"
|
||||
|
||||
bool MonitoredTurtleRouter::performLocalHashSearch(const TurtleFileHash& hash,const std::string& peer_id,FileInfo& info)
|
||||
bool MonitoredTurtleRouter::performLocalHashSearch(const TurtleFileHash& hash,const RsPeerId& peer_id,FileInfo& info)
|
||||
{
|
||||
std::map<std::string,FileInfo>::const_iterator it( _local_files.find(hash) ) ;
|
||||
std::map<RsFileHash,FileInfo>::const_iterator it( _local_files.find(hash) ) ;
|
||||
|
||||
if(it != _local_files.end() )
|
||||
{
|
||||
@ -13,7 +13,7 @@ bool MonitoredTurtleRouter::performLocalHashSearch(const TurtleFileHash& hash,co
|
||||
return false ;
|
||||
}
|
||||
|
||||
void MonitoredTurtleRouter::provideFileHash(const std::string& hash)
|
||||
void MonitoredTurtleRouter::provideFileHash(const RsFileHash& hash)
|
||||
{
|
||||
FileInfo& info( _local_files[hash] ) ;
|
||||
|
||||
|
@ -3,21 +3,21 @@
|
||||
class MonitoredTurtleRouter: public p3turtle
|
||||
{
|
||||
public:
|
||||
MonitoredTurtleRouter(p3LinkMgr *lmgr,ftServer *fts)
|
||||
: p3turtle(lmgr)
|
||||
MonitoredTurtleRouter(p3ServiceControl *sc,p3LinkMgr *lmgr,ftServer *fts)
|
||||
: p3turtle(sc,lmgr)
|
||||
{
|
||||
}
|
||||
|
||||
// Overload functions that I don't want to be called for real!
|
||||
|
||||
virtual bool loadConfiguration(std::string& loadHash) { return true ;}
|
||||
virtual bool loadConfiguration(RsFileHash& loadHash) { return true ;}
|
||||
virtual bool saveConfiguration() { return true ;}
|
||||
virtual bool performLocalHashSearch(const TurtleFileHash& hash,const std::string& peer_id,FileInfo& info) ;
|
||||
virtual bool performLocalHashSearch(const TurtleFileHash& hash,const RsPeerId& peer_id,FileInfo& info) ;
|
||||
|
||||
// new functions to replace somme internal functionalities
|
||||
|
||||
void provideFileHash(const std::string& hash) ;
|
||||
void provideFileHash(const RsFileHash& hash) ;
|
||||
|
||||
private:
|
||||
std::map<std::string,FileInfo> _local_files ;
|
||||
std::map<RsFileHash,FileInfo> _local_files ;
|
||||
};
|
||||
|
@ -4,12 +4,13 @@
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <string.h>
|
||||
#include <util/rsid.h>
|
||||
#include <retroshare/rsids.h>
|
||||
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <turtle/p3turtle.h>
|
||||
#include <serialiser/rsserial.h>
|
||||
#include <pqi/p3linkmgr.h>
|
||||
#include <pqi/p3peermgr.h>
|
||||
#include <ft/ftserver.h>
|
||||
#include <ft/ftcontroller.h>
|
||||
#include <services/p3service.h>
|
||||
@ -21,18 +22,14 @@ bool Network::initRandom(uint32_t nb_nodes,float connexion_probability)
|
||||
_nodes.clear() ;
|
||||
_neighbors.clear() ;
|
||||
|
||||
std::vector<std::string> ids ;
|
||||
std::vector<RsPeerId> ids ;
|
||||
|
||||
_neighbors.resize(nb_nodes) ;
|
||||
ids.resize(nb_nodes) ;
|
||||
|
||||
for(uint32_t i=0;i<nb_nodes;++i)
|
||||
{
|
||||
unsigned char bytes[20] ;
|
||||
for(int k=0;k<20;++k)
|
||||
bytes[k] = lrand48() & 0xff ;
|
||||
|
||||
ids[i] = t_RsGenericIdType<20>(bytes).toStdString(false) ;
|
||||
ids[i] = RsPeerId::random() ;
|
||||
_node_ids[ids[i]] = i ;
|
||||
}
|
||||
|
||||
@ -57,7 +54,7 @@ bool Network::initRandom(uint32_t nb_nodes,float connexion_probability)
|
||||
{
|
||||
std::cerr << "Added new node with id " << ids[i] << std::endl;
|
||||
|
||||
std::list<std::string> friends ;
|
||||
std::list<RsPeerId> friends ;
|
||||
for(std::set<uint32_t>::const_iterator it(_neighbors[i].begin());it!=_neighbors[i].end();++it)
|
||||
friends.push_back( ids[*it] ) ;
|
||||
|
||||
@ -93,12 +90,12 @@ void Network::tick()
|
||||
}
|
||||
}
|
||||
|
||||
PeerNode& Network::node_by_id(const std::string& id)
|
||||
PeerNode& Network::node_by_id(const RsPeerId& id)
|
||||
{
|
||||
std::map<std::string,uint32_t>::const_iterator it = _node_ids.find(id) ;
|
||||
std::map<RsPeerId,uint32_t>::const_iterator it = _node_ids.find(id) ;
|
||||
|
||||
if(it == _node_ids.end())
|
||||
throw std::runtime_error("Error. Bad id passed to node_by_id ("+id+")") ;
|
||||
throw std::runtime_error("Error. Bad id passed to node_by_id ("+id.toStdString()+")") ;
|
||||
|
||||
return node(it->second) ;
|
||||
}
|
||||
@ -106,20 +103,54 @@ PeerNode& Network::node_by_id(const std::string& id)
|
||||
class FakeLinkMgr: public p3LinkMgrIMPL
|
||||
{
|
||||
public:
|
||||
FakeLinkMgr(const std::string& own_id,const std::list<std::string>& friends)
|
||||
FakeLinkMgr(const RsPeerId& own_id,const std::list<RsPeerId>& friends)
|
||||
: p3LinkMgrIMPL(NULL,NULL),_own_id(own_id),_friends(friends)
|
||||
{
|
||||
}
|
||||
|
||||
virtual const std::string getOwnId() { return _own_id ; }
|
||||
virtual void getOnlineList(std::list<std::string>& lst) { lst = _friends ; }
|
||||
virtual uint32_t getLinkType(const std::string&) { return RS_NET_CONN_TCP_ALL | RS_NET_CONN_SPEED_NORMAL; }
|
||||
virtual const RsPeerId& getOwnId() { return _own_id ; }
|
||||
virtual void getOnlineList(std::list<RsPeerId>& lst) { lst = _friends ; }
|
||||
virtual uint32_t getLinkType(const RsPeerId&) { return RS_NET_CONN_TCP_ALL | RS_NET_CONN_SPEED_NORMAL; }
|
||||
|
||||
virtual bool getPeerName(const std::string &ssl_id, std::string &name) { name = ssl_id ; return true ;}
|
||||
virtual bool getPeerName(const RsPeerId &ssl_id, std::string &name) { name = ssl_id.toStdString() ; return true ;}
|
||||
|
||||
private:
|
||||
std::string _own_id ;
|
||||
std::list<std::string> _friends ;
|
||||
RsPeerId _own_id ;
|
||||
std::list<RsPeerId> _friends ;
|
||||
};
|
||||
|
||||
class FakePublisher: public pqiPublisher
|
||||
{
|
||||
public:
|
||||
virtual bool sendItem(RsRawItem *item)
|
||||
{
|
||||
_item_queue.push_back(item) ;
|
||||
}
|
||||
|
||||
RsRawItem *outgoing()
|
||||
{
|
||||
RsRawItem *item = _item_queue.front() ;
|
||||
_item_queue.pop_front() ;
|
||||
return item ;
|
||||
}
|
||||
|
||||
private:
|
||||
std::list<RsRawItem*> _item_queue ;
|
||||
};
|
||||
|
||||
class FakePeerMgr: public p3PeerMgrIMPL
|
||||
{
|
||||
public:
|
||||
FakePeerMgr(const RsPeerId& own,const std::list<RsPeerId>& ids)
|
||||
: p3PeerMgrIMPL(own,RsPgpId(),"no name","location name")
|
||||
{
|
||||
for(std::list<RsPeerId>::const_iterator it(ids.begin());it!=ids.end();++it)
|
||||
_ids.insert(*it) ;
|
||||
}
|
||||
|
||||
virtual bool idFriend(const RsPeerId& ssl_id) { return _ids.find(ssl_id) != _ids.end() ; }
|
||||
|
||||
std::set<RsPeerId> _ids ;
|
||||
};
|
||||
|
||||
const RsTurtle *PeerNode::turtle_service() const
|
||||
@ -127,17 +158,22 @@ const RsTurtle *PeerNode::turtle_service() const
|
||||
return _turtle ;
|
||||
}
|
||||
|
||||
PeerNode::PeerNode(const std::string& id,const std::list<std::string>& friends)
|
||||
PeerNode::PeerNode(const RsPeerId& id,const std::list<RsPeerId>& friends)
|
||||
: _id(id)
|
||||
{
|
||||
// add a service server.
|
||||
|
||||
_service_server = new p3ServiceServer ;
|
||||
|
||||
p3LinkMgr *link_mgr = new FakeLinkMgr(id, friends) ;
|
||||
ftServer *ft_server = new ftServer(NULL,link_mgr) ;
|
||||
p3PeerMgr *peer_mgr = new FakePeerMgr(id, friends) ;
|
||||
|
||||
_service_server->addService(_turtle = new MonitoredTurtleRouter(link_mgr,ft_server)) ;
|
||||
_publisher = new FakePublisher ;
|
||||
p3ServiceControl *ctrl = new p3ServiceControl(link_mgr) ;
|
||||
|
||||
_service_server = new p3ServiceServer(_publisher,ctrl);
|
||||
|
||||
ftServer *ft_server = new ftServer(peer_mgr,ctrl) ;
|
||||
|
||||
_service_server->addService(_turtle = new MonitoredTurtleRouter(ctrl,link_mgr,ft_server),true) ;
|
||||
|
||||
// add a turtle router.
|
||||
//
|
||||
@ -156,20 +192,20 @@ void PeerNode::tick()
|
||||
|
||||
void PeerNode::incoming(RsRawItem *item)
|
||||
{
|
||||
_service_server->incoming(item) ;
|
||||
_service_server->recvItem(item) ;
|
||||
}
|
||||
RsRawItem *PeerNode::outgoing()
|
||||
{
|
||||
return _service_server->outgoing() ;
|
||||
return dynamic_cast<FakePublisher*>(_publisher)->outgoing() ;
|
||||
}
|
||||
|
||||
void PeerNode::provideFileHash(const std::string& hash)
|
||||
void PeerNode::provideFileHash(const RsFileHash& hash)
|
||||
{
|
||||
_provided_hashes.insert(hash) ;
|
||||
_turtle->provideFileHash(hash) ;
|
||||
}
|
||||
|
||||
void PeerNode::manageFileHash(const std::string& hash)
|
||||
void PeerNode::manageFileHash(const RsFileHash& hash)
|
||||
{
|
||||
_managed_hashes.insert(hash) ;
|
||||
_turtle->monitorTunnels(hash,_ftserver) ;
|
||||
|
@ -22,13 +22,13 @@ class PeerNode
|
||||
std::map<std::string,std::string> local_dst ;
|
||||
};
|
||||
|
||||
PeerNode(const std::string& id,const std::list<std::string>& friends) ;
|
||||
PeerNode(const RsPeerId& id,const std::list<RsPeerId>& friends) ;
|
||||
~PeerNode() ;
|
||||
|
||||
RsRawItem *outgoing() ;
|
||||
void incoming(RsRawItem *) ;
|
||||
|
||||
const std::string& id() const { return _id ;}
|
||||
const RsPeerId& id() const { return _id ;}
|
||||
|
||||
void tick() ;
|
||||
|
||||
@ -36,8 +36,8 @@ class PeerNode
|
||||
|
||||
// Turtle-related methods
|
||||
//
|
||||
void manageFileHash(const std::string& hash) ;
|
||||
void provideFileHash(const std::string& hash) ;
|
||||
void manageFileHash(const RsFileHash& hash) ;
|
||||
void provideFileHash(const RsFileHash& hash) ;
|
||||
|
||||
const std::set<TurtleFileHash>& providedHashes() const { return _provided_hashes; }
|
||||
const std::set<TurtleFileHash>& managedHashes() const { return _managed_hashes; }
|
||||
@ -48,7 +48,8 @@ class PeerNode
|
||||
p3ServiceServer *_service_server ;
|
||||
MonitoredTurtleRouter *_turtle ;
|
||||
ftServer *_ftserver ;
|
||||
std::string _id ;
|
||||
pqiPublisher *_publisher ;
|
||||
RsPeerId _id ;
|
||||
|
||||
std::set<TurtleFileHash> _provided_hashes ;
|
||||
std::set<TurtleFileHash> _managed_hashes ;
|
||||
@ -85,9 +86,9 @@ class Network: public Graph<PeerNode>
|
||||
//
|
||||
void tick() ;
|
||||
|
||||
PeerNode& node_by_id(const std::string& node_id) ;
|
||||
PeerNode& node_by_id(const RsPeerId& node_id) ;
|
||||
|
||||
private:
|
||||
std::map<std::string,uint32_t> _node_ids ;
|
||||
std::map<RsPeerId,uint32_t> _node_ids ;
|
||||
};
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
|
||||
#include <util/rsid.h>
|
||||
#include <retroshare/rsids.h>
|
||||
|
||||
#include "Network.h"
|
||||
#include "NetworkViewer.h"
|
||||
@ -72,7 +72,7 @@ void NetworkViewer::draw()
|
||||
|
||||
for(std::set<uint32_t>::const_iterator it(neighs.begin());it!=neighs.end();++it)
|
||||
{
|
||||
if(traffic_info.local_src.find(_network.node(*it).id())!=traffic_info.local_src.end() || traffic_info.local_dst.find(_network.node(*it).id())!=traffic_info.local_dst.end())
|
||||
if(traffic_info.local_src.find(_network.node(*it).id().toStdString())!=traffic_info.local_src.end() || traffic_info.local_dst.find(_network.node(*it).id().toStdString())!=traffic_info.local_dst.end())
|
||||
{
|
||||
glColor3f(0.9f,0.4f,0.2f) ;
|
||||
tunnel_nodes.insert(i) ;
|
||||
@ -137,18 +137,18 @@ void NetworkViewer::draw()
|
||||
int offset = 0 ;
|
||||
int text_height = 15 ;
|
||||
|
||||
drawText(10+_node_coords[_current_displayed_node].x,offset + height()-_node_coords[_current_displayed_node].y, "Node id = " + QString::fromStdString(node.id())) ;
|
||||
drawText(10+_node_coords[_current_displayed_node].x,offset + height()-_node_coords[_current_displayed_node].y, "Node id = " + QString::fromStdString(node.id().toStdString())) ;
|
||||
offset += text_height ;
|
||||
|
||||
for(std::set<TurtleFileHash>::const_iterator it(node.providedHashes().begin());it!=node.providedHashes().end();++it)
|
||||
{
|
||||
drawText(10+_node_coords[_current_displayed_node].x,offset + height()-_node_coords[_current_displayed_node].y, "Server for hash " + QString::fromStdString(*it) );
|
||||
drawText(10+_node_coords[_current_displayed_node].x,offset + height()-_node_coords[_current_displayed_node].y, "Server for hash " + QString::fromStdString((*it).toStdString()) );
|
||||
offset += text_height ;
|
||||
}
|
||||
|
||||
for(std::set<TurtleFileHash>::const_iterator it(node.managedHashes().begin());it!=node.managedHashes().end();++it)
|
||||
{
|
||||
drawText(10+_node_coords[_current_displayed_node].x,offset + height()-_node_coords[_current_displayed_node].y, "Client for hash " + QString::fromStdString(*it) ) ;
|
||||
drawText(10+_node_coords[_current_displayed_node].x,offset + height()-_node_coords[_current_displayed_node].y, "Client for hash " + QString::fromStdString((*it).toStdString()) ) ;
|
||||
offset += text_height ;
|
||||
}
|
||||
}
|
||||
@ -538,7 +538,7 @@ void NetworkViewer::contextMenu(QPoint p)
|
||||
|
||||
for(std::set<TurtleFileHash>::const_iterator it(managed_hashes.begin());it!=managed_hashes.end();++it)
|
||||
{
|
||||
QAction* provide_hash_action = new QAction(QString::fromStdString(*it), Mnu2);
|
||||
QAction* provide_hash_action = new QAction(QString::fromStdString((*it).toStdString()), Mnu2);
|
||||
connect(provide_hash_action, SIGNAL(triggered()), this, SLOT(actionProvideHash()));
|
||||
Mnu2->addAction(provide_hash_action);
|
||||
}
|
||||
@ -549,7 +549,7 @@ void NetworkViewer::contextMenu(QPoint p)
|
||||
|
||||
for(std::set<TurtleFileHash>::const_iterator it(provided_hashes.begin());it!=provided_hashes.end();++it)
|
||||
{
|
||||
QAction* manage_hash_action = new QAction(QString::fromStdString(*it), Mnu2);
|
||||
QAction* manage_hash_action = new QAction(QString::fromStdString((*it).toStdString()), Mnu2);
|
||||
connect(manage_hash_action, SIGNAL(triggered()), this, SLOT(actionManageHash()));
|
||||
Mnu2->addAction(manage_hash_action);
|
||||
}
|
||||
@ -562,11 +562,11 @@ void NetworkViewer::actionManageHash()
|
||||
if(_current_acted_node < 0)
|
||||
return ;
|
||||
|
||||
std::string hash ;
|
||||
RsFileHash hash ;
|
||||
|
||||
if(qobject_cast<QAction*>(sender())->text().length() == 20) //data().toString().toStdString();
|
||||
{
|
||||
hash = qobject_cast<QAction*>(sender())->text().toStdString() ;
|
||||
hash = RsFileHash(qobject_cast<QAction*>(sender())->text().toStdString()) ;
|
||||
|
||||
std::cerr << "Managing existing hash " << hash << std::endl;
|
||||
}
|
||||
@ -574,11 +574,7 @@ void NetworkViewer::actionManageHash()
|
||||
{
|
||||
std::cerr << "Managing random hash..." << std::endl;
|
||||
|
||||
unsigned char hash_bytes[20] ;
|
||||
for(int i=0;i<20;++i)
|
||||
hash_bytes[i] = lrand48() & 0xff ;
|
||||
|
||||
hash = t_RsGenericIdType<20>(hash_bytes).toStdString(false) ;
|
||||
hash = RsFileHash::random() ;
|
||||
}
|
||||
|
||||
|
||||
@ -598,7 +594,7 @@ void NetworkViewer::actionProvideHash()
|
||||
return ;
|
||||
|
||||
std::cerr << "Providing hash " << hash.toStdString() << std::endl;
|
||||
_network.node(_current_acted_node).provideFileHash(hash.toStdString()) ;
|
||||
_network.node(_current_acted_node).provideFileHash(RsFileHash(hash.toStdString())) ;
|
||||
|
||||
updateGL() ;
|
||||
}
|
||||
|
@ -61,9 +61,9 @@ class TRHistogram
|
||||
return ;
|
||||
|
||||
ox += 10 ;
|
||||
std::map<std::string,std::vector<int> > hits ;
|
||||
std::map<std::string,std::vector<int> > depths ;
|
||||
std::map<std::string,std::vector<int> >::iterator it ;
|
||||
std::map<RsPeerId,std::vector<int> > hits ;
|
||||
std::map<RsPeerId,std::vector<int> > depths ;
|
||||
std::map<RsPeerId,std::vector<int> >::iterator it ;
|
||||
|
||||
int max_hits = 1;
|
||||
int max_depth = 1;
|
||||
@ -211,11 +211,11 @@ void TurtleRouterStatistics::updateDisplay()
|
||||
_tst_CW->update();
|
||||
}
|
||||
|
||||
QString TurtleRouterStatistics::getPeerName(const std::string& peer_id)
|
||||
QString TurtleRouterStatistics::getPeerName(const RsPeerId& peer_id)
|
||||
{
|
||||
static std::map<std::string, QString> names ;
|
||||
static std::map<RsPeerId, QString> names ;
|
||||
|
||||
std::map<std::string,QString>::const_iterator it = names.find(peer_id) ;
|
||||
std::map<RsPeerId,QString>::const_iterator it = names.find(peer_id) ;
|
||||
|
||||
if( it != names.end())
|
||||
return it->second ;
|
||||
|
@ -37,7 +37,7 @@ class TurtleRouterStatistics: public RsAutoUpdatePage, public Ui::TurtleRouterSt
|
||||
~TurtleRouterStatistics();
|
||||
|
||||
// Cache for peer names.
|
||||
static QString getPeerName(const std::string& peer_id) ;
|
||||
static QString getPeerName(const RsPeerId& peer_id) ;
|
||||
|
||||
void setTurtleRouter(const RsTurtle *turtle) { _turtle = turtle ; }
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "NetworkSimulatorGUI.h"
|
||||
#include "MonitoredRsPeers.h"
|
||||
#include <QApplication>
|
||||
#include <common/argstream.h>
|
||||
#include <util/argstream.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
@ -21,8 +21,8 @@ int main(int argc, char *argv[])
|
||||
float connexion_probability = 0.2 ;
|
||||
|
||||
as >> option('i',"gui",show_gui,"show gui (vs. do the pipeline automatically)")
|
||||
>> parameter('n',"nodes",nb_nodes,"number of nodes in the network")
|
||||
>> parameter('p',"connexion probability",connexion_probability,"probability that two nodes are connected (exponential law)")
|
||||
>> parameter('n',"nodes",nb_nodes,"number of nodes in the network",false)
|
||||
>> parameter('p',"connexion probability",connexion_probability,"probability that two nodes are connected (exponential law)",false)
|
||||
>> help() ;
|
||||
|
||||
as.defaultErrorHandling() ;
|
||||
|
@ -16,4 +16,4 @@ HEADERS = Network.h MonitoredTurtle.h NetworkViewer.h NetworkSimulatorGUI.h \
|
||||
|
||||
FORMS = NetworkSimulatorGUI.ui TurtleRouterStatistics.ui
|
||||
|
||||
LIBS *= ../../lib/libretroshare.a ../../../../libbitdht/src/lib/libbitdht.a ../../../../openpgpsdk/src/lib/libops.a -lgnome-keyring -lupnp -lssl -lcrypto -lbz2 -lixml
|
||||
LIBS *= ../../lib/libretroshare.a ../../../../libbitdht/src/lib/libbitdht.a ../../../../../lib/sqlcipher/.libs/libsqlcipher.a ../../../../openpgpsdk/src/lib/libops.a -lgnome-keyring -lupnp -lssl -lcrypto -lbz2 -lixml
|
||||
|
Loading…
Reference in New Issue
Block a user