mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-17 13:24:15 -05:00
added non selective tracking for GXS messages
This commit is contained in:
parent
7db3bb1c9b
commit
47dd70fbe8
@ -27,13 +27,56 @@
|
||||
#include "groutermatrix.h"
|
||||
#include "grouteritems.h"
|
||||
|
||||
//#define ROUTING_MATRIX_DEBUG
|
||||
#define ROUTING_MATRIX_DEBUG
|
||||
|
||||
GRouterMatrix::GRouterMatrix()
|
||||
{
|
||||
_proba_need_updating = true ;
|
||||
}
|
||||
|
||||
bool GRouterMatrix::addTrackingInfo(const RsGxsMessageId& mid,const RsPeerId& source_friend)
|
||||
{
|
||||
time_t now = time(NULL) ;
|
||||
uint32_t fid = getFriendId(source_friend) ;
|
||||
|
||||
RoutingTrackEntry rte ;
|
||||
|
||||
rte.friend_id = fid ;
|
||||
rte.time_stamp = now ;
|
||||
|
||||
_tracking_clues[mid] = rte ;
|
||||
#ifdef ROUTING_MATRIX_DEBUG
|
||||
std::cerr << "GRouterMatrix::addTrackingInfo(): Added clue mid=" << mid << ", from " << source_friend << " ID=" << fid << std::endl;
|
||||
#endif
|
||||
return true ;
|
||||
}
|
||||
|
||||
bool GRouterMatrix::cleanUp()
|
||||
{
|
||||
// remove all tracking entries that have become too old.
|
||||
|
||||
#ifdef ROUTING_MATRIX_DEBUG
|
||||
std::cerr << "GRouterMatrix::cleanup()" << std::endl;
|
||||
#endif
|
||||
time_t now = time(NULL) ;
|
||||
|
||||
for(std::map<RsGxsMessageId,RoutingTrackEntry>::iterator it(_tracking_clues.begin());it!=_tracking_clues.end();)
|
||||
if(it->second.time_stamp + RS_GROUTER_MAX_KEEP_TRACKING_CLUES < now)
|
||||
{
|
||||
#ifdef ROUTING_MATRIX_DEBUG
|
||||
std::cerr << " removing old entry msgId=" << it->first << ", from id " << it->second.friend_id << ", obtained " << (now - it->second.time_stamp) << " secs ago." << std::endl;
|
||||
#endif
|
||||
std::map<RsGxsMessageId,RoutingTrackEntry>::iterator tmp(it) ;
|
||||
++tmp ;
|
||||
_tracking_clues.erase(it) ;
|
||||
it=tmp ;
|
||||
}
|
||||
else
|
||||
++it ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
bool GRouterMatrix::addRoutingClue(const GRouterKeyId& key_id,const RsPeerId& source_friend,float weight)
|
||||
{
|
||||
// 1 - get the friend index.
|
||||
|
@ -42,6 +42,12 @@ struct RoutingMatrixHitEntry
|
||||
time_t time_stamp ;
|
||||
};
|
||||
|
||||
struct RoutingTrackEntry
|
||||
{
|
||||
uint32_t friend_id ; // not the full key. Gets too big otherwise!
|
||||
time_t time_stamp ;
|
||||
};
|
||||
|
||||
class GRouterMatrix
|
||||
{
|
||||
public:
|
||||
@ -61,10 +67,13 @@ class GRouterMatrix
|
||||
// Record one routing clue. The events can possibly be merged in time buckets.
|
||||
//
|
||||
bool addRoutingClue(const GRouterKeyId& id,const RsPeerId& source_friend,float weight) ;
|
||||
bool addTrackingInfo(const RsGxsMessageId& id,const RsPeerId& source_friend) ;
|
||||
|
||||
bool saveList(std::list<RsItem*>& items) ;
|
||||
bool loadList(std::list<RsItem*>& items) ;
|
||||
|
||||
bool cleanUp() ;
|
||||
|
||||
// Dump info in terminal.
|
||||
//
|
||||
void debugDump() const ;
|
||||
@ -81,8 +90,9 @@ class GRouterMatrix
|
||||
|
||||
// List of events received and computed routing probabilities
|
||||
//
|
||||
std::map<GRouterKeyId, std::list<RoutingMatrixHitEntry> > _routing_clues ; // received routing clues. Should be saved.
|
||||
std::map<GRouterKeyId, std::vector<float> > _time_combined_hits ; // hit matrix after time-convolution filter
|
||||
std::map<GRouterKeyId, std::list<RoutingMatrixHitEntry> > _routing_clues ; // received routing clues. Should be saved.
|
||||
std::map<GRouterKeyId, std::vector<float> > _time_combined_hits ; // hit matrix after time-convolution filter
|
||||
std::map<RsGxsMessageId,RoutingTrackEntry> _tracking_clues ; // who provided the most recent messages
|
||||
|
||||
// This is used to avoid re-computing probas when new events have been received.
|
||||
//
|
||||
@ -93,6 +103,5 @@ class GRouterMatrix
|
||||
//
|
||||
std::map<RsPeerId,uint32_t> _friend_indices ; // index for each friend to lookup in the routing matrix Not saved.
|
||||
std::vector<RsPeerId> _reverse_friend_indices ;// SSLid corresponding to each friend index. Saved.
|
||||
|
||||
};
|
||||
|
||||
|
@ -37,9 +37,10 @@ class RsGRouterSignedReceiptItem ;
|
||||
|
||||
static const uint16_t GROUTER_CLIENT_ID_MESSAGES = 0x1001 ;
|
||||
|
||||
static const uint32_t RS_GROUTER_MATRIX_MAX_HIT_ENTRIES = 10 ; // max number of clues to store
|
||||
static const uint32_t RS_GROUTER_MATRIX_MIN_TIME_BETWEEN_HITS = 60 ; // can be set to up to half the publish time interval. Prevents flooding routes.
|
||||
static const uint32_t RS_GROUTER_MIN_CONFIG_SAVE_PERIOD = 5 ; // at most save config every 5 seconds
|
||||
static const uint32_t RS_GROUTER_MATRIX_MAX_HIT_ENTRIES = 10 ; // max number of clues to store
|
||||
static const uint32_t RS_GROUTER_MATRIX_MIN_TIME_BETWEEN_HITS = 60 ; // can be set to up to half the publish time interval. Prevents flooding routes.
|
||||
static const uint32_t RS_GROUTER_MIN_CONFIG_SAVE_PERIOD = 5 ; // at most save config every 5 seconds
|
||||
static const uint32_t RS_GROUTER_MAX_KEEP_TRACKING_CLUES = 86400*10 ; // max time for which we keep record of tracking info: 10 days.
|
||||
|
||||
static const float RS_GROUTER_BASE_WEIGHT_ROUTED_MSG = 1.0f ; // base contribution of routed message clue to routing matrix
|
||||
static const float RS_GROUTER_BASE_WEIGHT_GXS_PACKET = 0.1f ; // base contribution of GXS message to routing matrix
|
||||
@ -56,7 +57,7 @@ static const uint32_t MAX_INACTIVE_DATA_PIPE_DELAY = 300 ; // cl
|
||||
|
||||
static const time_t RS_GROUTER_DEBUG_OUTPUT_PERIOD = 10 ; // Output everything
|
||||
static const time_t RS_GROUTER_AUTOWASH_PERIOD = 10 ; // Autowash every minute. Not a costly operation.
|
||||
static const time_t RS_GROUTER_MATRIX_UPDATE_PERIOD = 1 *10 ; // Check for key advertising every 10 minutes
|
||||
static const time_t RS_GROUTER_MATRIX_UPDATE_PERIOD = 60*10 ; // Check for key advertising every 10 minutes
|
||||
static const uint32_t GROUTER_ITEM_MAX_CACHE_KEEP_TIME = 2*86400 ; // Cached items are kept for 48 hours at most.
|
||||
|
||||
static const uint32_t RS_GROUTER_DATA_STATUS_UNKNOWN = 0x0000 ; // unknown. Unused.
|
||||
|
@ -252,6 +252,7 @@ int p3GRouter::tick()
|
||||
|
||||
_last_matrix_update_time = now ;
|
||||
_routing_matrix.updateRoutingProbabilities() ; // This should be locked.
|
||||
_routing_matrix.cleanUp() ; // This should be locked.
|
||||
}
|
||||
|
||||
#ifdef GROUTER_DEBUG
|
||||
@ -1698,6 +1699,14 @@ bool p3GRouter::locked_getClientAndServiceId(const TurtleFileHash& hash, const R
|
||||
return true ;
|
||||
}
|
||||
|
||||
void p3GRouter::addTrackingInfo(const RsGxsMessageId& mid,const RsPeerId& peer_id)
|
||||
{
|
||||
RS_STACK_MUTEX(grMtx) ;
|
||||
#ifdef GROUTER_DEBUG
|
||||
grouter_debug() << "Received new routing clue for key " << id << " from peer " << peer_id << std::endl;
|
||||
#endif
|
||||
_routing_matrix.addTrackingInfo(mid,peer_id) ;
|
||||
}
|
||||
void p3GRouter::addRoutingClue(const GRouterKeyId& id,const RsPeerId& peer_id)
|
||||
{
|
||||
RS_STACK_MUTEX(grMtx) ;
|
||||
|
@ -130,6 +130,7 @@ public:
|
||||
//===================================================//
|
||||
|
||||
virtual void addRoutingClue(const GRouterKeyId& id,const RsPeerId& peer_id) ;
|
||||
virtual void addTrackingInfo(const RsGxsMessageId& mid,const RsPeerId& peer_id) ;
|
||||
|
||||
//===================================================//
|
||||
// Client/server request services //
|
||||
@ -300,7 +301,6 @@ private:
|
||||
//
|
||||
GRouterMatrix _routing_matrix ;
|
||||
|
||||
|
||||
// Stores the keys which identify the router's node. For each key, a structure holds:
|
||||
// - the client service
|
||||
// - flags
|
||||
|
@ -49,19 +49,19 @@
|
||||
#define MSG_INDEX_GRPID std::string("INDEX_MESSAGES_GRPID")
|
||||
|
||||
// generic
|
||||
#define KEY_NXS_DATA std::string("nxsData")
|
||||
#define KEY_NXS_DATA_LEN std::string("nxsDataLen")
|
||||
#define KEY_NXS_IDENTITY std::string("identity")
|
||||
#define KEY_GRP_ID std::string("grpId")
|
||||
#define KEY_ORIG_GRP_ID std::string("origGrpId")
|
||||
#define KEY_PARENT_GRP_ID std::string("parentGrpId")
|
||||
#define KEY_SIGN_SET std::string("signSet")
|
||||
#define KEY_TIME_STAMP std::string("timeStamp")
|
||||
#define KEY_NXS_FLAGS std::string("flags")
|
||||
#define KEY_NXS_META std::string("meta")
|
||||
#define KEY_NXS_DATA std::string("nxsData")
|
||||
#define KEY_NXS_DATA_LEN std::string("nxsDataLen")
|
||||
#define KEY_NXS_IDENTITY std::string("identity")
|
||||
#define KEY_GRP_ID std::string("grpId")
|
||||
#define KEY_ORIG_GRP_ID std::string("origGrpId")
|
||||
#define KEY_PARENT_GRP_ID std::string("parentGrpId")
|
||||
#define KEY_SIGN_SET std::string("signSet")
|
||||
#define KEY_TIME_STAMP std::string("timeStamp")
|
||||
#define KEY_NXS_FLAGS std::string("flags")
|
||||
#define KEY_NXS_META std::string("meta")
|
||||
#define KEY_NXS_SERV_STRING std::string("serv_str")
|
||||
#define KEY_NXS_HASH std::string("hash")
|
||||
#define KEY_RECV_TS std::string("recv_time_stamp")
|
||||
#define KEY_NXS_HASH std::string("hash")
|
||||
#define KEY_RECV_TS std::string("recv_time_stamp")
|
||||
|
||||
// remove later
|
||||
#define KEY_NXS_FILE_OLD std::string("nxsFile")
|
||||
@ -94,8 +94,8 @@
|
||||
#define KEY_MSG_NAME std::string("msgName")
|
||||
|
||||
// msg local
|
||||
#define KEY_MSG_STATUS std::string("msgStatus")
|
||||
#define KEY_CHILD_TS std::string("childTs")
|
||||
#define KEY_MSG_STATUS std::string("msgStatus")
|
||||
#define KEY_CHILD_TS std::string("childTs")
|
||||
|
||||
// database release columns
|
||||
#define KEY_DATABASE_RELEASE_ID std::string("id")
|
||||
@ -129,22 +129,22 @@ RsDataService::RsDataService(const std::string &serviceDir, const std::string &d
|
||||
initialise(isNewDatabase);
|
||||
|
||||
// for retrieving msg meta
|
||||
mColMsgMeta_GrpId = addColumn(mMsgMetaColumns, KEY_GRP_ID);
|
||||
mColMsgMeta_TimeStamp = addColumn(mMsgMetaColumns, KEY_TIME_STAMP);
|
||||
mColMsgMeta_NxsFlags = addColumn(mMsgMetaColumns, KEY_NXS_FLAGS);
|
||||
mColMsgMeta_SignSet = addColumn(mMsgMetaColumns, KEY_SIGN_SET);
|
||||
mColMsgMeta_NxsIdentity = addColumn(mMsgMetaColumns, KEY_NXS_IDENTITY);
|
||||
mColMsgMeta_NxsHash = addColumn(mMsgMetaColumns, KEY_NXS_HASH);
|
||||
mColMsgMeta_MsgId = addColumn(mMsgMetaColumns, KEY_MSG_ID);
|
||||
mColMsgMeta_OrigMsgId = addColumn(mMsgMetaColumns, KEY_ORIG_MSG_ID);
|
||||
mColMsgMeta_MsgStatus = addColumn(mMsgMetaColumns, KEY_MSG_STATUS);
|
||||
mColMsgMeta_ChildTs = addColumn(mMsgMetaColumns, KEY_CHILD_TS);
|
||||
mColMsgMeta_MsgParentId = addColumn(mMsgMetaColumns, KEY_MSG_PARENT_ID);
|
||||
mColMsgMeta_MsgThreadId = addColumn(mMsgMetaColumns, KEY_MSG_THREAD_ID);
|
||||
mColMsgMeta_Name = addColumn(mMsgMetaColumns, KEY_MSG_NAME);
|
||||
mColMsgMeta_GrpId = addColumn(mMsgMetaColumns, KEY_GRP_ID);
|
||||
mColMsgMeta_TimeStamp = addColumn(mMsgMetaColumns, KEY_TIME_STAMP);
|
||||
mColMsgMeta_NxsFlags = addColumn(mMsgMetaColumns, KEY_NXS_FLAGS);
|
||||
mColMsgMeta_SignSet = addColumn(mMsgMetaColumns, KEY_SIGN_SET);
|
||||
mColMsgMeta_NxsIdentity = addColumn(mMsgMetaColumns, KEY_NXS_IDENTITY);
|
||||
mColMsgMeta_NxsHash = addColumn(mMsgMetaColumns, KEY_NXS_HASH);
|
||||
mColMsgMeta_MsgId = addColumn(mMsgMetaColumns, KEY_MSG_ID);
|
||||
mColMsgMeta_OrigMsgId = addColumn(mMsgMetaColumns, KEY_ORIG_MSG_ID);
|
||||
mColMsgMeta_MsgStatus = addColumn(mMsgMetaColumns, KEY_MSG_STATUS);
|
||||
mColMsgMeta_ChildTs = addColumn(mMsgMetaColumns, KEY_CHILD_TS);
|
||||
mColMsgMeta_MsgParentId = addColumn(mMsgMetaColumns, KEY_MSG_PARENT_ID);
|
||||
mColMsgMeta_MsgThreadId = addColumn(mMsgMetaColumns, KEY_MSG_THREAD_ID);
|
||||
mColMsgMeta_Name = addColumn(mMsgMetaColumns, KEY_MSG_NAME);
|
||||
mColMsgMeta_NxsServString = addColumn(mMsgMetaColumns, KEY_NXS_SERV_STRING);
|
||||
mColMsgMeta_RecvTs = addColumn(mMsgMetaColumns, KEY_RECV_TS);
|
||||
mColMsgMeta_NxsDataLen = addColumn(mMsgMetaColumns, KEY_NXS_DATA_LEN);
|
||||
mColMsgMeta_RecvTs = addColumn(mMsgMetaColumns, KEY_RECV_TS);
|
||||
mColMsgMeta_NxsDataLen = addColumn(mMsgMetaColumns, KEY_NXS_DATA_LEN);
|
||||
|
||||
// for retrieving actual data
|
||||
mColMsg_GrpId = addColumn(mMsgColumns, KEY_GRP_ID);
|
||||
@ -153,31 +153,31 @@ RsDataService::RsDataService(const std::string &serviceDir, const std::string &d
|
||||
mColMsg_MsgId = addColumn(mMsgColumns, KEY_MSG_ID);
|
||||
|
||||
// for retrieving grp meta data
|
||||
mColGrpMeta_GrpId = addColumn(mGrpMetaColumns, KEY_GRP_ID);
|
||||
mColGrpMeta_TimeStamp = addColumn(mGrpMetaColumns, KEY_TIME_STAMP);
|
||||
mColGrpMeta_NxsFlags = addColumn(mGrpMetaColumns, KEY_NXS_FLAGS);
|
||||
mColGrpMeta_GrpId = addColumn(mGrpMetaColumns, KEY_GRP_ID);
|
||||
mColGrpMeta_TimeStamp = addColumn(mGrpMetaColumns, KEY_TIME_STAMP);
|
||||
mColGrpMeta_NxsFlags = addColumn(mGrpMetaColumns, KEY_NXS_FLAGS);
|
||||
// mColGrpMeta_SignSet = addColumn(mGrpMetaColumns, KEY_SIGN_SET);
|
||||
mColGrpMeta_NxsIdentity = addColumn(mGrpMetaColumns, KEY_NXS_IDENTITY);
|
||||
mColGrpMeta_NxsHash = addColumn(mGrpMetaColumns, KEY_NXS_HASH);
|
||||
mColGrpMeta_KeySet = addColumn(mGrpMetaColumns, KEY_KEY_SET);
|
||||
mColGrpMeta_SubscrFlag = addColumn(mGrpMetaColumns, KEY_GRP_SUBCR_FLAG);
|
||||
mColGrpMeta_Pop = addColumn(mGrpMetaColumns, KEY_GRP_POP);
|
||||
mColGrpMeta_MsgCount = addColumn(mGrpMetaColumns, KEY_MSG_COUNT);
|
||||
mColGrpMeta_Status = addColumn(mGrpMetaColumns, KEY_GRP_STATUS);
|
||||
mColGrpMeta_Name = addColumn(mGrpMetaColumns, KEY_GRP_NAME);
|
||||
mColGrpMeta_LastPost = addColumn(mGrpMetaColumns, KEY_GRP_LAST_POST);
|
||||
mColGrpMeta_OrigGrpId = addColumn(mGrpMetaColumns, KEY_ORIG_GRP_ID);
|
||||
mColGrpMeta_ServString = addColumn(mGrpMetaColumns, KEY_NXS_SERV_STRING);
|
||||
mColGrpMeta_SignFlags = addColumn(mGrpMetaColumns, KEY_GRP_SIGN_FLAGS);
|
||||
mColGrpMeta_CircleId = addColumn(mGrpMetaColumns, KEY_GRP_CIRCLE_ID);
|
||||
mColGrpMeta_CircleType = addColumn(mGrpMetaColumns, KEY_GRP_CIRCLE_TYPE);
|
||||
mColGrpMeta_NxsHash = addColumn(mGrpMetaColumns, KEY_NXS_HASH);
|
||||
mColGrpMeta_KeySet = addColumn(mGrpMetaColumns, KEY_KEY_SET);
|
||||
mColGrpMeta_SubscrFlag = addColumn(mGrpMetaColumns, KEY_GRP_SUBCR_FLAG);
|
||||
mColGrpMeta_Pop = addColumn(mGrpMetaColumns, KEY_GRP_POP);
|
||||
mColGrpMeta_MsgCount = addColumn(mGrpMetaColumns, KEY_MSG_COUNT);
|
||||
mColGrpMeta_Status = addColumn(mGrpMetaColumns, KEY_GRP_STATUS);
|
||||
mColGrpMeta_Name = addColumn(mGrpMetaColumns, KEY_GRP_NAME);
|
||||
mColGrpMeta_LastPost = addColumn(mGrpMetaColumns, KEY_GRP_LAST_POST);
|
||||
mColGrpMeta_OrigGrpId = addColumn(mGrpMetaColumns, KEY_ORIG_GRP_ID);
|
||||
mColGrpMeta_ServString = addColumn(mGrpMetaColumns, KEY_NXS_SERV_STRING);
|
||||
mColGrpMeta_SignFlags = addColumn(mGrpMetaColumns, KEY_GRP_SIGN_FLAGS);
|
||||
mColGrpMeta_CircleId = addColumn(mGrpMetaColumns, KEY_GRP_CIRCLE_ID);
|
||||
mColGrpMeta_CircleType = addColumn(mGrpMetaColumns, KEY_GRP_CIRCLE_TYPE);
|
||||
mColGrpMeta_InternCircle = addColumn(mGrpMetaColumns, KEY_GRP_INTERNAL_CIRCLE);
|
||||
mColGrpMeta_Originator = addColumn(mGrpMetaColumns, KEY_GRP_ORIGINATOR);
|
||||
mColGrpMeta_Originator = addColumn(mGrpMetaColumns, KEY_GRP_ORIGINATOR);
|
||||
mColGrpMeta_AuthenFlags = addColumn(mGrpMetaColumns, KEY_GRP_AUTHEN_FLAGS);
|
||||
mColGrpMeta_ParentGrpId = addColumn(mGrpMetaColumns, KEY_PARENT_GRP_ID);
|
||||
mColGrpMeta_RecvTs = addColumn(mGrpMetaColumns, KEY_RECV_TS);
|
||||
mColGrpMeta_RepCutoff = addColumn(mGrpMetaColumns, KEY_GRP_REP_CUTOFF);
|
||||
mColGrpMeta_NxsDataLen = addColumn(mGrpMetaColumns, KEY_NXS_DATA_LEN);
|
||||
mColGrpMeta_RecvTs = addColumn(mGrpMetaColumns, KEY_RECV_TS);
|
||||
mColGrpMeta_RepCutoff = addColumn(mGrpMetaColumns, KEY_GRP_REP_CUTOFF);
|
||||
mColGrpMeta_NxsDataLen = addColumn(mGrpMetaColumns, KEY_NXS_DATA_LEN);
|
||||
|
||||
// for retrieving actual grp data
|
||||
mColGrp_GrpId = addColumn(mGrpColumns, KEY_GRP_ID);
|
||||
@ -620,7 +620,7 @@ RsGxsMsgMetaData* RsDataService::locked_getMsgMeta(RetroCursor &c)
|
||||
c.getString(mColMsgMeta_NxsHash, temp);
|
||||
msgMeta->mHash = RsFileHash(temp);
|
||||
msgMeta->recvTS = c.getInt32(mColMsgMeta_RecvTs);
|
||||
|
||||
|
||||
offset = 0;
|
||||
data = (char*)c.getData(mColMsgMeta_SignSet, data_len);
|
||||
msgMeta->signSet.GetTlv(data, data_len, &offset);
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "retroshare/rsgxsflags.h"
|
||||
#include "retroshare/rsgxscircles.h"
|
||||
#include "retroshare/rsgrouter.h"
|
||||
#include "retroshare/rspeers.h"
|
||||
#include "rsgixs.h"
|
||||
#include "rsgxsutil.h"
|
||||
#include "rsserver/p3face.h"
|
||||
@ -2001,6 +2002,10 @@ void RsGenExchange::publishMsgs()
|
||||
msgId = msg->msgId;
|
||||
grpId = msg->grpId;
|
||||
msg->metaData->recvTS = time(NULL);
|
||||
|
||||
mRoutingClues[msg->metaData->mAuthorId].insert(rsPeers->getOwnId()) ;
|
||||
mTrackingClues.push_back(std::make_pair(msg->msgId,rsPeers->getOwnId())) ;
|
||||
|
||||
computeHash(msg->msg, msg->metaData->mHash);
|
||||
mDataAccess->addMsgData(msg);
|
||||
msgChangeMap[grpId].push_back(msgId);
|
||||
@ -2134,13 +2139,18 @@ void RsGenExchange::processGroupUpdatePublish()
|
||||
|
||||
void RsGenExchange::processRoutingClues()
|
||||
{
|
||||
RS_STACK_MUTEX(mGenMtx) ;
|
||||
RS_STACK_MUTEX(mGenMtx) ;
|
||||
|
||||
for(std::map<RsGxsId,std::set<RsPeerId> >::const_iterator it = mRoutingClues.begin();it!=mRoutingClues.end();++it)
|
||||
for(std::set<RsPeerId>::const_iterator it2(it->second.begin());it2!=it->second.end();++it2)
|
||||
rsGRouter->addRoutingClue(GRouterKeyId(it->first),(*it2)) ;
|
||||
rsGRouter->addRoutingClue(GRouterKeyId(it->first),(*it2) ) ;
|
||||
|
||||
mRoutingClues.clear() ;
|
||||
|
||||
for(std::list<std::pair<RsGxsMessageId,RsPeerId> >::const_iterator it = mTrackingClues.begin();it!=mTrackingClues.end();++it)
|
||||
rsGRouter->addTrackingInfo((*it).first,(*it).second) ;
|
||||
|
||||
mTrackingClues.clear() ;
|
||||
}
|
||||
void RsGenExchange::processGroupDelete()
|
||||
{
|
||||
@ -2604,32 +2614,34 @@ void RsGenExchange::processRecvdMessages()
|
||||
}
|
||||
|
||||
if(validateReturn == VALIDATE_SUCCESS)
|
||||
{
|
||||
meta->mMsgStatus = GXS_SERV::GXS_MSG_STATUS_UNPROCESSED | GXS_SERV::GXS_MSG_STATUS_GUI_NEW | GXS_SERV::GXS_MSG_STATUS_GUI_UNREAD;
|
||||
msgs.insert(std::make_pair(msg, meta));
|
||||
{
|
||||
meta->mMsgStatus = GXS_SERV::GXS_MSG_STATUS_UNPROCESSED | GXS_SERV::GXS_MSG_STATUS_GUI_NEW | GXS_SERV::GXS_MSG_STATUS_GUI_UNREAD;
|
||||
msgs.insert(std::make_pair(msg, meta));
|
||||
|
||||
std::vector<RsGxsMessageId> &msgv = msgIds[msg->grpId];
|
||||
if (std::find(msgv.begin(), msgv.end(), msg->msgId) == msgv.end())
|
||||
{
|
||||
msgv.push_back(msg->msgId);
|
||||
}
|
||||
std::vector<RsGxsMessageId> &msgv = msgIds[msg->grpId];
|
||||
if (std::find(msgv.begin(), msgv.end(), msg->msgId) == msgv.end())
|
||||
{
|
||||
msgv.push_back(msg->msgId);
|
||||
}
|
||||
|
||||
NxsMsgPendingVect::iterator validated_entry = std::find(mMsgPendingValidate.begin(), mMsgPendingValidate.end(),
|
||||
getMsgIdPair(*msg));
|
||||
NxsMsgPendingVect::iterator validated_entry = std::find(mMsgPendingValidate.begin(), mMsgPendingValidate.end(),
|
||||
getMsgIdPair(*msg));
|
||||
|
||||
if(validated_entry != mMsgPendingValidate.end()) mMsgPendingValidate.erase(validated_entry);
|
||||
if(validated_entry != mMsgPendingValidate.end()) mMsgPendingValidate.erase(validated_entry);
|
||||
|
||||
computeHash(msg->msg, meta->mHash);
|
||||
meta->recvTS = time(NULL);
|
||||
computeHash(msg->msg, meta->mHash);
|
||||
meta->recvTS = time(NULL);
|
||||
#ifdef GEN_EXCH_DEBUG
|
||||
std::cerr << " new status flags: " << meta->mMsgStatus << std::endl;
|
||||
std::cerr << " computed hash: " << meta->mHash << std::endl;
|
||||
std::cerr << "Message received. Identity=" << msg->metaData->mAuthorId << ", from peer " << msg->PeerId() << std::endl;
|
||||
std::cerr << " new status flags: " << meta->mMsgStatus << std::endl;
|
||||
std::cerr << " computed hash: " << meta->mHash << std::endl;
|
||||
std::cerr << "Message received. Identity=" << msg->metaData->mAuthorId << ", from peer " << msg->PeerId() << std::endl;
|
||||
#endif
|
||||
|
||||
if(!msg->metaData->mAuthorId.isNull())
|
||||
mRoutingClues[msg->metaData->mAuthorId].insert(msg->PeerId()) ;
|
||||
}
|
||||
if(!msg->metaData->mAuthorId.isNull())
|
||||
mRoutingClues[msg->metaData->mAuthorId].insert(msg->PeerId()) ;
|
||||
|
||||
mTrackingClues.push_back(std::make_pair(msg->msgId,msg->PeerId())) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -863,7 +863,7 @@ private:
|
||||
std::vector<GroupDeletePublish> mGroupDeletePublish;
|
||||
|
||||
std::map<RsGxsId,std::set<RsPeerId> > mRoutingClues ;
|
||||
|
||||
std::list<std::pair<RsGxsMessageId,RsPeerId> > mTrackingClues ;
|
||||
};
|
||||
|
||||
#endif // RSGENEXCHANGE_H
|
||||
|
@ -123,7 +123,6 @@ public:
|
||||
uint32_t recvTS;
|
||||
RsFileHash mHash;
|
||||
bool validated;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -102,6 +102,7 @@ public:
|
||||
//===================================================//
|
||||
|
||||
virtual void addRoutingClue(const GRouterKeyId& destination, const RsPeerId& source) =0;
|
||||
virtual void addTrackingInfo(const RsGxsMessageId& mid,const RsPeerId& peer_id) =0;
|
||||
};
|
||||
|
||||
// To access the GRouter from anywhere
|
||||
|
@ -127,6 +127,7 @@ public:
|
||||
|
||||
/// the first 16 bits for service, last 16 for GXS
|
||||
uint32_t mMsgStatus;
|
||||
RsPeerId mProviderId ;
|
||||
|
||||
time_t mChildTs;
|
||||
std::string mServiceString; // Service Specific Free-Form extra storage.
|
||||
|
@ -24,7 +24,6 @@
|
||||
this->mPublishTs = rGxsMeta.mPublishTs;
|
||||
this->mThreadId = rGxsMeta.mThreadId;
|
||||
this->mServiceString = rGxsMeta.mServiceString;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -920,6 +920,9 @@ QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForum
|
||||
|
||||
// Set later with GxsIdRSTreeWidgetItem::setId
|
||||
item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR, QString::fromStdString(msg.mMeta.mAuthorId.toStdString()));
|
||||
|
||||
// Show info about who passed on this message.
|
||||
item->setToolTip(COLUMN_THREAD_TITLE,tr("This message was obtained from %1").arg(QString::fromStdString(msg.mMeta.mProviderId.toStdString())));
|
||||
//#TODO
|
||||
#if 0
|
||||
text = QString::fromUtf8(authorName.c_str());
|
||||
|
Loading…
x
Reference in New Issue
Block a user