From 0b812e636dac88afe7d7e4b21d9c571973fdb802 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Mar 2014 09:32:33 +0000 Subject: [PATCH] - 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 --- .../src/grouter/grouterclientservice.h | 2 +- libretroshare/src/grouter/p3grouter.cc | 5 +- libretroshare/src/libretroshare.pro | 30 ++++----- libretroshare/src/rsserver/rsinit.cc | 12 ++-- libretroshare/src/services/p3msgservice.cc | 67 ++++++------------- libretroshare/src/services/p3msgservice.h | 25 +++---- retroshare-gui/src/gui/common/PeerDefs.cpp | 2 +- .../src/gui/msgs/MessageComposer.cpp | 6 ++ 8 files changed, 57 insertions(+), 92 deletions(-) diff --git a/libretroshare/src/grouter/grouterclientservice.h b/libretroshare/src/grouter/grouterclientservice.h index dfc40215d..bca1560e8 100644 --- a/libretroshare/src/grouter/grouterclientservice.h +++ b/libretroshare/src/grouter/grouterclientservice.h @@ -49,7 +49,7 @@ class GRouterClientService // // 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 << " destination key_id = " << destination_key.toStdString() << std::endl; diff --git a/libretroshare/src/grouter/p3grouter.cc b/libretroshare/src/grouter/p3grouter.cc index 3ec8dcbdb..a39f29c7c 100644 --- a/libretroshare/src/grouter/p3grouter.cc +++ b/libretroshare/src/grouter/p3grouter.cc @@ -215,7 +215,8 @@ int p3GRouter::tick() { last_publish_campaign_time = now ; - publishKeys() ; + //publishKeys() ; // we don't publish keys anymore. + // _routing_matrix.updateRoutingProbabilities() ; } @@ -701,7 +702,7 @@ void p3GRouter::handleRecvDataItem(RsGRouterGenericDataItem *item) if(its != _registered_services.end()) { 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 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; diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 0e8f6584e..09f4bb754 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -7,7 +7,7 @@ TARGET = retroshare #GXS Stuff. # This should be disabled for releases until further notice. CONFIG += gxs debug -#CONFIG += grouter + #CONFIG += dsdv profiling { @@ -34,23 +34,6 @@ debug { 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 { DEFINES *= SERVICES_DSDV HEADERS += services/p3dsdv.h \ @@ -396,6 +379,13 @@ HEADERS += rsserver/p3face.h \ rsserver/rsaccounts.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 \ serialiser/rsfiletransferitems.h \ serialiser/rsserviceserialiser.h \ @@ -523,6 +513,10 @@ SOURCES += rsserver/p3face-config.cc \ rsserver/rstypes.cc \ rsserver/p3serverconfig.cc +SOURCES += grouter/p3grouter.cc \ + grouter/grouteritems.cc \ + grouter/groutermatrix.cc + SOURCES += plugins/pluginmanager.cc \ plugins/dlfcn_win32.cc \ serialiser/rspluginitems.cc diff --git a/libretroshare/src/rsserver/rsinit.cc b/libretroshare/src/rsserver/rsinit.cc index c8367ca48..27cf00c2c 100644 --- a/libretroshare/src/rsserver/rsinit.cc +++ b/libretroshare/src/rsserver/rsinit.cc @@ -56,6 +56,8 @@ #include #include +#define ENABLE_GROUTER + #if (defined(__unix__) || defined(unix)) && !defined(USG) #include #endif @@ -69,7 +71,7 @@ #include "pqi/sslfns.h" #include "pqi/authgpg.h" -#ifdef GROUTER +#ifdef ENABLE_GROUTER #include "grouter/p3grouter.h" #endif @@ -839,7 +841,7 @@ bool RsInit::SetHiddenLocation(const std::string& hiddenaddress, uint16_t port) RsFiles *rsFiles = NULL; RsTurtle *rsTurtle = NULL ; -#ifdef GROUTER +#ifdef ENABLE_GROUTER RsGRouter *rsGRouter = NULL ; #endif @@ -1487,7 +1489,7 @@ int RsServer::StartupRetroShare() chatSrv = new p3ChatService(mLinkMgr, mHistoryMgr); mStatusSrv = new p3StatusService(mLinkMgr); -#ifdef GROUTER +#ifdef ENABLE_GROUTER p3GRouter *gr = new p3GRouter(mLinkMgr) ; rsGRouter = gr ; pqih->addService(gr) ; @@ -1505,7 +1507,7 @@ int RsServer::StartupRetroShare() ftserver->connectToTurtleRouter(tr) ; chatSrv->connectToTurtleRouter(tr) ; -#ifdef GROUTER +#ifdef ENABLE_GROUTER msgSrv->connectToGlobalRouter(gr) ; #endif pqih -> addService(mHeart); @@ -1618,7 +1620,7 @@ int RsServer::StartupRetroShare() mConfigMgr->addConfiguration("p3History.cfg", mHistoryMgr); mConfigMgr->addConfiguration("p3Status.cfg", mStatusSrv); mConfigMgr->addConfiguration("turtle.cfg", tr); -#ifdef GROUTER +#ifdef ENABLE_GROUTER mConfigMgr->addConfiguration("grouter.cfg", gr); #endif diff --git a/libretroshare/src/services/p3msgservice.cc b/libretroshare/src/services/p3msgservice.cc index 4dc4f9495..c7f770f96 100644 --- a/libretroshare/src/services/p3msgservice.cc +++ b/libretroshare/src/services/p3msgservice.cc @@ -42,10 +42,9 @@ #include "pgp/pgpkeyutil.h" #include "rsserver/p3face.h" #include "serialiser/rsconfigitems.h" -#ifdef GROUTER + #include "grouter/p3grouter.h" #include "grouter/groutertypes.h" -#endif #include "util/rsdebug.h" #include "util/rsdir.h" @@ -335,42 +334,8 @@ int p3MsgService::checkOutgoingMessages() /* find the certificate */ RsPeerId pid = mit->second->PeerId(); - bool tunnel_is_ok = false ; - if(mit->second->msgFlags & RS_MSG_FLAGS_DISTANT) - { - // Do we have a tunnel already? - // -#ifdef GROUTER - tunnel_is_ok = true ; -#else -// const RsPeerId& hash = mit->second->PeerId() ; -// std::map::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 */ + if( (mit->second->msgFlags & RS_MSG_FLAGS_DISTANT) || mLinkMgr->isOnline(pid) || pid == ownId) /* FEEDBACK Msg to Ourselves */ { /* send msg */ pqioutput(PQL_DEBUG_BASIC, msgservicezone, @@ -2056,13 +2021,11 @@ bool p3MsgService::decryptMessage(const std::string& mId) } } -#ifdef GROUTER void p3MsgService::connectToGlobalRouter(p3GRouter *gr) { mGRouter = gr ; gr->registerClientService(RS_SERVICE_TYPE_MSG,this) ; } -#endif void p3MsgService::enableDistantMessaging(bool b) { @@ -2129,7 +2092,6 @@ void p3MsgService::manageDistantPeers() } } -#ifdef GROUTER void p3MsgService::sendGRouterData(const GRouterKeyId& key_id,RsMsgItem *msgitem) { // 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) ; } -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(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) { -#ifndef GROUTER - std::cerr << "GRouter is not enabled. Cannot send distant message." << std::endl; - return ; -#else #ifdef DEBUG_DISTANT_MSG std::cerr << "p3MsgService::sendDistanteMsgItem(): sending distant msg item to peer " << msgitem->PeerId() << std::endl; #endif @@ -2192,7 +2164,6 @@ void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem) #endif sendGRouterData(key_id,msgitem) ; -#endif } diff --git a/libretroshare/src/services/p3msgservice.h b/libretroshare/src/services/p3msgservice.h index 9c9240a8c..b8f4f99f4 100644 --- a/libretroshare/src/services/p3msgservice.h +++ b/libretroshare/src/services/p3msgservice.h @@ -54,10 +54,7 @@ class p3LinkMgr; class p3IdService; // Temp tweak to test grouter -class p3MsgService: public p3Service, public p3Config, public pqiMonitor -#ifdef GROUTER - , public GRouterClientService -#endif +class p3MsgService: public p3Service, public p3Config, public pqiMonitor, public GRouterClientService { public: p3MsgService(p3LinkMgr *lm,p3IdService *id_service); @@ -112,9 +109,8 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor /*** overloaded from p3turtle ***/ -#ifdef GROUTER virtual void connectToGlobalRouter(p3GRouter *) ; -#endif + struct DistantMessengingInvite { time_t time_of_validity ; @@ -137,25 +133,19 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor // std::map _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 bool createDistantMessage(const RsGxsId& destination_gxs_id,const RsGxsId& source_gxs_id,RsMsgItem *msg) ; bool locked_findHashForVirtualPeerId(const RsPeerId& pid,Sha1CheckSum& hash) ; + void sendGRouterData(const GRouterKeyId &key_id,RsMsgItem *) ; void manageDistantPeers() ; -#ifdef GROUTER - void sendGRouterData(const GRouterKeyId &key_id,RsMsgItem *) ; -#endif - void handleIncomingItem(RsMsgItem *) ; -#ifdef GROUTER - p3GRouter *mGRouter ; -#endif + void handleIncomingItem(RsMsgItem *) ; uint32_t getNewUniqueMsgId(); int sendMessage(RsMsgItem *item); @@ -176,6 +166,7 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor p3LinkMgr *mLinkMgr; p3IdService *mIdService ; + p3GRouter *mGRouter ; /* Mutex Required for stuff below */ diff --git a/retroshare-gui/src/gui/common/PeerDefs.cpp b/retroshare-gui/src/gui/common/PeerDefs.cpp index b4bd35bae..8bebe03e4 100644 --- a/retroshare-gui/src/gui/common/PeerDefs.cpp +++ b/retroshare-gui/src/gui/common/PeerDefs.cpp @@ -86,7 +86,7 @@ const QString PeerDefs::rsidFromId(const RsPeerId &id, QString *name /* = NULL*/ rsIdentity->getOwnIds(gxs_ids) ; for(std::list::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 diff --git a/retroshare-gui/src/gui/msgs/MessageComposer.cpp b/retroshare-gui/src/gui/msgs/MessageComposer.cpp index 3acccf545..b7a67483b 100644 --- a/retroshare-gui/src/gui/msgs/MessageComposer.cpp +++ b/retroshare-gui/src/gui/msgs/MessageComposer.cpp @@ -1237,8 +1237,11 @@ bool MessageComposer::sendMessage_internal(bool bDraftbox) switch (type) { case TO: addUnique(mi.rspeerid_msgto,pid); + break ; case CC: addUnique(mi.rspeerid_msgcc,pid); + break ; case BCC:addUnique(mi.rspeerid_msgbcc,pid); + break ; } } break ; @@ -1249,8 +1252,11 @@ bool MessageComposer::sendMessage_internal(bool bDraftbox) switch (type) { case TO: addUnique(mi.rsgxsid_msgto,gid) ; + break ; case CC: addUnique(mi.rsgxsid_msgcc,gid) ; + break ; case BCC:addUnique(mi.rsgxsid_msgbcc,gid) ; + break ; } } break ;