- removed global GROUTER define. Enabled now by default (except for a ifdef ENABLE_GROUTER in rsinit.cc)

- added code to actualy receive messages
- fixed a few bugs in the GUI



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-IdCleaning@7198 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2014-03-22 09:32:33 +00:00
parent 52d836225c
commit 0b812e636d
8 changed files with 57 additions and 92 deletions

View file

@ -49,7 +49,7 @@ class GRouterClientService
// //
// GRouter stays owner of the item, so the client should not delete it! // GRouter stays owner of the item, so the client should not delete it!
// //
virtual void receiveGRouterData(RsGRouterGenericDataItem * /*item*/,const GRouterKeyId& destination_key) virtual void receiveGRouterData(const GRouterKeyId& destination_key, const RsGRouterGenericDataItem * /*item*/)
{ {
std::cerr << "!!!!!! Received Data from global router, but the client service is not handling it !!!!!!!!!!" << std::endl ; std::cerr << "!!!!!! Received Data from global router, but the client service is not handling it !!!!!!!!!!" << std::endl ;
std::cerr << " destination key_id = " << destination_key.toStdString() << std::endl; std::cerr << " destination key_id = " << destination_key.toStdString() << std::endl;

View file

@ -215,7 +215,8 @@ int p3GRouter::tick()
{ {
last_publish_campaign_time = now ; last_publish_campaign_time = now ;
publishKeys() ; //publishKeys() ; // we don't publish keys anymore.
//
_routing_matrix.updateRoutingProbabilities() ; _routing_matrix.updateRoutingProbabilities() ;
} }
@ -701,7 +702,7 @@ void p3GRouter::handleRecvDataItem(RsGRouterGenericDataItem *item)
if(its != _registered_services.end()) if(its != _registered_services.end())
{ {
std::cerr << " Key is owned by us. Notifying service for this item." << std::endl; std::cerr << " Key is owned by us. Notifying service for this item." << std::endl;
its->second->receiveGRouterData(item_copy,it->first) ; its->second->receiveGRouterData(it->first,item_copy) ;
} }
else else
std::cerr << " (EE) weird situation. No service registered for a key that we own. Key id = " << item->destination_key.toStdString() << ", service id = " << it->second.service_id << std::endl; std::cerr << " (EE) weird situation. No service registered for a key that we own. Key id = " << item->destination_key.toStdString() << ", service id = " << it->second.service_id << std::endl;

View file

@ -7,7 +7,7 @@ TARGET = retroshare
#GXS Stuff. #GXS Stuff.
# This should be disabled for releases until further notice. # This should be disabled for releases until further notice.
CONFIG += gxs debug CONFIG += gxs debug
#CONFIG += grouter
#CONFIG += dsdv #CONFIG += dsdv
profiling { profiling {
@ -34,23 +34,6 @@ debug {
QMAKE_CXXFLAGS *= -g -fno-omit-frame-pointer QMAKE_CXXFLAGS *= -g -fno-omit-frame-pointer
} }
grouter {
DEFINES *= GROUTER
HEADERS += grouter/groutercache.h \
grouter/rsgrouter.h \
grouter/grouteritems.h \
grouter/p3grouter.h \
grouter/rsgroutermatrix.h \
grouter/rsgrouterclient.h
SOURCES += grouter/p3grouter.cc \
grouter/grouteritems.cc \
grouter/groutermatrix.cc
# grouter/groutercache.cc \
# grouter/rsgrouterclient.cc
}
dsdv { dsdv {
DEFINES *= SERVICES_DSDV DEFINES *= SERVICES_DSDV
HEADERS += services/p3dsdv.h \ HEADERS += services/p3dsdv.h \
@ -396,6 +379,13 @@ HEADERS += rsserver/p3face.h \
rsserver/rsaccounts.h \ rsserver/rsaccounts.h \
rsserver/p3serverconfig.h rsserver/p3serverconfig.h
HEADERS += grouter/groutercache.h \
grouter/rsgrouter.h \
grouter/grouteritems.h \
grouter/p3grouter.h \
grouter/rsgroutermatrix.h \
grouter/rsgrouterclient.h
HEADERS += serialiser/rsbaseserial.h \ HEADERS += serialiser/rsbaseserial.h \
serialiser/rsfiletransferitems.h \ serialiser/rsfiletransferitems.h \
serialiser/rsserviceserialiser.h \ serialiser/rsserviceserialiser.h \
@ -523,6 +513,10 @@ SOURCES += rsserver/p3face-config.cc \
rsserver/rstypes.cc \ rsserver/rstypes.cc \
rsserver/p3serverconfig.cc rsserver/p3serverconfig.cc
SOURCES += grouter/p3grouter.cc \
grouter/grouteritems.cc \
grouter/groutermatrix.cc
SOURCES += plugins/pluginmanager.cc \ SOURCES += plugins/pluginmanager.cc \
plugins/dlfcn_win32.cc \ plugins/dlfcn_win32.cc \
serialiser/rspluginitems.cc serialiser/rspluginitems.cc

View file

@ -56,6 +56,8 @@
#include <openssl/rand.h> #include <openssl/rand.h>
#include <fcntl.h> #include <fcntl.h>
#define ENABLE_GROUTER
#if (defined(__unix__) || defined(unix)) && !defined(USG) #if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h> #include <sys/param.h>
#endif #endif
@ -69,7 +71,7 @@
#include "pqi/sslfns.h" #include "pqi/sslfns.h"
#include "pqi/authgpg.h" #include "pqi/authgpg.h"
#ifdef GROUTER #ifdef ENABLE_GROUTER
#include "grouter/p3grouter.h" #include "grouter/p3grouter.h"
#endif #endif
@ -839,7 +841,7 @@ bool RsInit::SetHiddenLocation(const std::string& hiddenaddress, uint16_t port)
RsFiles *rsFiles = NULL; RsFiles *rsFiles = NULL;
RsTurtle *rsTurtle = NULL ; RsTurtle *rsTurtle = NULL ;
#ifdef GROUTER #ifdef ENABLE_GROUTER
RsGRouter *rsGRouter = NULL ; RsGRouter *rsGRouter = NULL ;
#endif #endif
@ -1487,7 +1489,7 @@ int RsServer::StartupRetroShare()
chatSrv = new p3ChatService(mLinkMgr, mHistoryMgr); chatSrv = new p3ChatService(mLinkMgr, mHistoryMgr);
mStatusSrv = new p3StatusService(mLinkMgr); mStatusSrv = new p3StatusService(mLinkMgr);
#ifdef GROUTER #ifdef ENABLE_GROUTER
p3GRouter *gr = new p3GRouter(mLinkMgr) ; p3GRouter *gr = new p3GRouter(mLinkMgr) ;
rsGRouter = gr ; rsGRouter = gr ;
pqih->addService(gr) ; pqih->addService(gr) ;
@ -1505,7 +1507,7 @@ int RsServer::StartupRetroShare()
ftserver->connectToTurtleRouter(tr) ; ftserver->connectToTurtleRouter(tr) ;
chatSrv->connectToTurtleRouter(tr) ; chatSrv->connectToTurtleRouter(tr) ;
#ifdef GROUTER #ifdef ENABLE_GROUTER
msgSrv->connectToGlobalRouter(gr) ; msgSrv->connectToGlobalRouter(gr) ;
#endif #endif
pqih -> addService(mHeart); pqih -> addService(mHeart);
@ -1618,7 +1620,7 @@ int RsServer::StartupRetroShare()
mConfigMgr->addConfiguration("p3History.cfg", mHistoryMgr); mConfigMgr->addConfiguration("p3History.cfg", mHistoryMgr);
mConfigMgr->addConfiguration("p3Status.cfg", mStatusSrv); mConfigMgr->addConfiguration("p3Status.cfg", mStatusSrv);
mConfigMgr->addConfiguration("turtle.cfg", tr); mConfigMgr->addConfiguration("turtle.cfg", tr);
#ifdef GROUTER #ifdef ENABLE_GROUTER
mConfigMgr->addConfiguration("grouter.cfg", gr); mConfigMgr->addConfiguration("grouter.cfg", gr);
#endif #endif

View file

@ -42,10 +42,9 @@
#include "pgp/pgpkeyutil.h" #include "pgp/pgpkeyutil.h"
#include "rsserver/p3face.h" #include "rsserver/p3face.h"
#include "serialiser/rsconfigitems.h" #include "serialiser/rsconfigitems.h"
#ifdef GROUTER
#include "grouter/p3grouter.h" #include "grouter/p3grouter.h"
#include "grouter/groutertypes.h" #include "grouter/groutertypes.h"
#endif
#include "util/rsdebug.h" #include "util/rsdebug.h"
#include "util/rsdir.h" #include "util/rsdir.h"
@ -335,42 +334,8 @@ int p3MsgService::checkOutgoingMessages()
/* find the certificate */ /* find the certificate */
RsPeerId pid = mit->second->PeerId(); RsPeerId pid = mit->second->PeerId();
bool tunnel_is_ok = false ;
if(mit->second->msgFlags & RS_MSG_FLAGS_DISTANT) if( (mit->second->msgFlags & RS_MSG_FLAGS_DISTANT) || mLinkMgr->isOnline(pid) || pid == ownId) /* FEEDBACK Msg to Ourselves */
{
// Do we have a tunnel already?
//
#ifdef GROUTER
tunnel_is_ok = true ;
#else
// const RsPeerId& hash = mit->second->PeerId() ;
// std::map<Sha1CheckSum,DistantMessengingContact>::iterator it = _messenging_contacts.find(hash) ;
//
// if(it != _messenging_contacts.end())
// {
// tunnel_is_ok = (it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_OK) ;
//#ifdef DEBUG_DISTANT_MSG
// std::cerr << "checkOutGoingMessages(): distant contact found. tunnel_is_ok = " << tunnel_is_ok << std::endl;
//#endif
// }
// else
// {
//#ifdef DEBUG_DISTANT_MSG
// std::cerr << "checkOutGoingMessages(): distant contact not found. Asking for tunnels for hash " << hash << std::endl;
//#endif
// // no. Ask for monitoring tunnels.
// rsTurtle->monitorTunnels(hash,this) ;
// tunnel_is_ok = false ;
//
// DistantMessengingContact& contact( _messenging_contacts[hash] ) ;
// contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ;
// contact.pending_messages = true ;
// }
#endif
}
if(tunnel_is_ok || mLinkMgr->isOnline(pid) || pid == ownId) /* FEEDBACK Msg to Ourselves */
{ {
/* send msg */ /* send msg */
pqioutput(PQL_DEBUG_BASIC, msgservicezone, pqioutput(PQL_DEBUG_BASIC, msgservicezone,
@ -2056,13 +2021,11 @@ bool p3MsgService::decryptMessage(const std::string& mId)
} }
} }
#ifdef GROUTER
void p3MsgService::connectToGlobalRouter(p3GRouter *gr) void p3MsgService::connectToGlobalRouter(p3GRouter *gr)
{ {
mGRouter = gr ; mGRouter = gr ;
gr->registerClientService(RS_SERVICE_TYPE_MSG,this) ; gr->registerClientService(RS_SERVICE_TYPE_MSG,this) ;
} }
#endif
void p3MsgService::enableDistantMessaging(bool b) void p3MsgService::enableDistantMessaging(bool b)
{ {
@ -2129,7 +2092,6 @@ void p3MsgService::manageDistantPeers()
} }
} }
#ifdef GROUTER
void p3MsgService::sendGRouterData(const GRouterKeyId& key_id,RsMsgItem *msgitem) void p3MsgService::sendGRouterData(const GRouterKeyId& key_id,RsMsgItem *msgitem)
{ {
// The item is serialized and turned into a generic turtle item. // The item is serialized and turned into a generic turtle item.
@ -2154,18 +2116,28 @@ void p3MsgService::sendGRouterData(const GRouterKeyId& key_id,RsMsgItem *msgitem
mGRouter->sendData(key_id,item) ; mGRouter->sendData(key_id,item) ;
} }
void p3MsgService::receiveGRouterData(RsGRouterGenericDataItem *gitem,const GRouterKeyId& key) void p3MsgService::receiveGRouterData(const GRouterKeyId& key, const RsGRouterGenericDataItem *gitem)
{ {
std::cerr << "(WW) p3msgservice::receiveGRouterData(): received message. Not handled yet. Needs implementing." << std::endl; std::cerr << "p3MsgService::receiveGRouterData(): received message item of size " << gitem->data_size << ", for key " << key << std::endl;
uint32_t size = gitem->data_size ;
RsItem *item = _serialiser->deserialise(gitem->data_bytes,&size) ;
RsMsgItem *encrypted_msg_item = dynamic_cast<RsMsgItem*>(item) ;
if(encrypted_msg_item != NULL)
{
std::cerr << " Encrypted item correctly deserialised. Passing on to incoming list." << std::endl;
encrypted_msg_item->PeerId(RsPeerId(key)) ; // hack to pass on GXS id.
handleIncomingItem(encrypted_msg_item) ;
}
else
std::cerr << " Item could not be deserialised. Format error??" << std::endl;
} }
#endif
void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem) void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
{ {
#ifndef GROUTER
std::cerr << "GRouter is not enabled. Cannot send distant message." << std::endl;
return ;
#else
#ifdef DEBUG_DISTANT_MSG #ifdef DEBUG_DISTANT_MSG
std::cerr << "p3MsgService::sendDistanteMsgItem(): sending distant msg item to peer " << msgitem->PeerId() << std::endl; std::cerr << "p3MsgService::sendDistanteMsgItem(): sending distant msg item to peer " << msgitem->PeerId() << std::endl;
#endif #endif
@ -2192,7 +2164,6 @@ void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
#endif #endif
sendGRouterData(key_id,msgitem) ; sendGRouterData(key_id,msgitem) ;
#endif
} }

View file

@ -54,10 +54,7 @@ class p3LinkMgr;
class p3IdService; class p3IdService;
// Temp tweak to test grouter // Temp tweak to test grouter
class p3MsgService: public p3Service, public p3Config, public pqiMonitor class p3MsgService: public p3Service, public p3Config, public pqiMonitor, public GRouterClientService
#ifdef GROUTER
, public GRouterClientService
#endif
{ {
public: public:
p3MsgService(p3LinkMgr *lm,p3IdService *id_service); p3MsgService(p3LinkMgr *lm,p3IdService *id_service);
@ -112,9 +109,8 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor
/*** overloaded from p3turtle ***/ /*** overloaded from p3turtle ***/
#ifdef GROUTER
virtual void connectToGlobalRouter(p3GRouter *) ; virtual void connectToGlobalRouter(p3GRouter *) ;
#endif
struct DistantMessengingInvite struct DistantMessengingInvite
{ {
time_t time_of_validity ; time_t time_of_validity ;
@ -137,25 +133,19 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor
// //
std::map<GRouterKeyId,DistantMessengingContact> _messenging_contacts ; std::map<GRouterKeyId,DistantMessengingContact> _messenging_contacts ;
// Overloaded from RsTurtleClientService // Overloaded from GRouterClientService
virtual void receiveGRouterData(const GRouterKeyId& key,const RsGRouterGenericDataItem *item) ;
#ifdef GROUTER
virtual void receiveGRouterData(RsGRouterGenericDataItem *item, const GRouterKeyId& key) ;
#endif
// Utility functions // Utility functions
bool createDistantMessage(const RsGxsId& destination_gxs_id,const RsGxsId& source_gxs_id,RsMsgItem *msg) ; bool createDistantMessage(const RsGxsId& destination_gxs_id,const RsGxsId& source_gxs_id,RsMsgItem *msg) ;
bool locked_findHashForVirtualPeerId(const RsPeerId& pid,Sha1CheckSum& hash) ; bool locked_findHashForVirtualPeerId(const RsPeerId& pid,Sha1CheckSum& hash) ;
void sendGRouterData(const GRouterKeyId &key_id,RsMsgItem *) ;
void manageDistantPeers() ; void manageDistantPeers() ;
#ifdef GROUTER
void sendGRouterData(const GRouterKeyId &key_id,RsMsgItem *) ;
#endif
void handleIncomingItem(RsMsgItem *) ;
#ifdef GROUTER void handleIncomingItem(RsMsgItem *) ;
p3GRouter *mGRouter ;
#endif
uint32_t getNewUniqueMsgId(); uint32_t getNewUniqueMsgId();
int sendMessage(RsMsgItem *item); int sendMessage(RsMsgItem *item);
@ -176,6 +166,7 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor
p3LinkMgr *mLinkMgr; p3LinkMgr *mLinkMgr;
p3IdService *mIdService ; p3IdService *mIdService ;
p3GRouter *mGRouter ;
/* Mutex Required for stuff below */ /* Mutex Required for stuff below */

View file

@ -86,7 +86,7 @@ const QString PeerDefs::rsidFromId(const RsPeerId &id, QString *name /* = NULL*/
rsIdentity->getOwnIds(gxs_ids) ; rsIdentity->getOwnIds(gxs_ids) ;
for(std::list<RsGxsId>::const_iterator it(gxs_ids.begin());it!=gxs_ids.end();++it) for(std::list<RsGxsId>::const_iterator it(gxs_ids.begin());it!=gxs_ids.end();++it)
if(rsMsgs->getDistantMessagePeerId(*it,pid) && RsPeerId(pid) == id) if(RsPeerId(*it) == id)
{ {
// not a real peer. Try from hash for distant messages // not a real peer. Try from hash for distant messages

View file

@ -1237,8 +1237,11 @@ bool MessageComposer::sendMessage_internal(bool bDraftbox)
switch (type) switch (type)
{ {
case TO: addUnique(mi.rspeerid_msgto,pid); case TO: addUnique(mi.rspeerid_msgto,pid);
break ;
case CC: addUnique(mi.rspeerid_msgcc,pid); case CC: addUnique(mi.rspeerid_msgcc,pid);
break ;
case BCC:addUnique(mi.rspeerid_msgbcc,pid); case BCC:addUnique(mi.rspeerid_msgbcc,pid);
break ;
} }
} }
break ; break ;
@ -1249,8 +1252,11 @@ bool MessageComposer::sendMessage_internal(bool bDraftbox)
switch (type) switch (type)
{ {
case TO: addUnique(mi.rsgxsid_msgto,gid) ; case TO: addUnique(mi.rsgxsid_msgto,gid) ;
break ;
case CC: addUnique(mi.rsgxsid_msgcc,gid) ; case CC: addUnique(mi.rsgxsid_msgcc,gid) ;
break ;
case BCC:addUnique(mi.rsgxsid_msgbcc,gid) ; case BCC:addUnique(mi.rsgxsid_msgbcc,gid) ;
break ;
} }
} }
break ; break ;