mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-06 01:55:34 -05:00
added bias to reputation score for known and signed ids. Changed computation formula to an exp
This commit is contained in:
parent
f24bddf6f1
commit
e60ac99994
@ -34,6 +34,9 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
// re-defined here, in order to avoid cross-includes
|
||||||
|
#define REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE 0x0100
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
bool RsReputationItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const
|
bool RsReputationItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const
|
||||||
@ -201,6 +204,7 @@ bool RsGxsReputationConfigItem::serialise(void *data, uint32_t& pktsize) const
|
|||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsGxsReputationSetItem::serialise(void *data, uint32_t& pktsize) const
|
bool RsGxsReputationSetItem::serialise(void *data, uint32_t& pktsize) const
|
||||||
{
|
{
|
||||||
uint32_t tlvsize ;
|
uint32_t tlvsize ;
|
||||||
@ -214,6 +218,7 @@ bool RsGxsReputationSetItem::serialise(void *data, uint32_t& pktsize) const
|
|||||||
ok &= mGxsId.serialise(data,tlvsize,offset) ;
|
ok &= mGxsId.serialise(data,tlvsize,offset) ;
|
||||||
ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinion);
|
ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinion);
|
||||||
ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinionTS);
|
ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinionTS);
|
||||||
|
ok &= setRawUInt32(data, tlvsize, &offset, mIdentityFlags) ;
|
||||||
ok &= setRawUInt32(data, tlvsize, &offset, mOpinions.size());
|
ok &= setRawUInt32(data, tlvsize, &offset, mOpinions.size());
|
||||||
|
|
||||||
for(std::map<RsPeerId,uint32_t>::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it)
|
for(std::map<RsPeerId,uint32_t>::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it)
|
||||||
@ -303,6 +308,45 @@ RsGxsReputationConfigItem *RsGxsReputationSerialiser::deserialiseReputationConfi
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem_deprecated(void *data,uint32_t tlvsize)
|
||||||
|
{
|
||||||
|
uint32_t offset = 8; // skip the header
|
||||||
|
uint32_t rssize = getRsItemSize(data);
|
||||||
|
bool ok = true ;
|
||||||
|
|
||||||
|
RsGxsReputationSetItem *item = new RsGxsReputationSetItem() ;
|
||||||
|
|
||||||
|
/* add mandatory parts first */
|
||||||
|
ok &= item->mGxsId.deserialise(data, tlvsize, offset) ;
|
||||||
|
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion);
|
||||||
|
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS);
|
||||||
|
|
||||||
|
item->mIdentityFlags = REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE; // special value that means please update me.
|
||||||
|
|
||||||
|
uint32_t S ;
|
||||||
|
ok &= getRawUInt32(data, tlvsize, &offset, &S);
|
||||||
|
|
||||||
|
for(int i=0;ok && i<S;++i)
|
||||||
|
{
|
||||||
|
RsPeerId pid ;
|
||||||
|
uint32_t op ;
|
||||||
|
|
||||||
|
ok &= pid.deserialise(data, tlvsize, offset) ;
|
||||||
|
ok &= getRawUInt32(data, tlvsize, &offset, &op);
|
||||||
|
|
||||||
|
if(ok)
|
||||||
|
item->mOpinions[pid] = op ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset != rssize || !ok)
|
||||||
|
{
|
||||||
|
std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl;
|
||||||
|
delete item;
|
||||||
|
return NULL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem(void *data,uint32_t tlvsize)
|
RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem(void *data,uint32_t tlvsize)
|
||||||
{
|
{
|
||||||
uint32_t offset = 8; // skip the header
|
uint32_t offset = 8; // skip the header
|
||||||
@ -315,6 +359,7 @@ RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem(
|
|||||||
ok &= item->mGxsId.deserialise(data, tlvsize, offset) ;
|
ok &= item->mGxsId.deserialise(data, tlvsize, offset) ;
|
||||||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion);
|
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion);
|
||||||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS);
|
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS);
|
||||||
|
ok &= getRawUInt32(data, tlvsize, &offset, &item->mIdentityFlags);
|
||||||
|
|
||||||
uint32_t S ;
|
uint32_t S ;
|
||||||
ok &= getRawUInt32(data, tlvsize, &offset, &S);
|
ok &= getRawUInt32(data, tlvsize, &offset, &S);
|
||||||
@ -414,8 +459,9 @@ RsItem *RsGxsReputationSerialiser::deserialise(void *data, uint32_t *pktsize)
|
|||||||
switch(getRsItemSubType(rstype))
|
switch(getRsItemSubType(rstype))
|
||||||
{
|
{
|
||||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM : return deserialiseReputationSetItem (data, *pktsize);
|
case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM : return deserialiseReputationSetItem (data, *pktsize);
|
||||||
|
case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated: return deserialiseReputationSetItem_deprecated(data, *pktsize);
|
||||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM : return deserialiseReputationUpdateItem (data, *pktsize);
|
case RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM : return deserialiseReputationUpdateItem (data, *pktsize);
|
||||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM: return deserialiseReputationRequestItem(data, *pktsize);
|
case RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM : return deserialiseReputationRequestItem (data, *pktsize);
|
||||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM : return deserialiseReputationConfigItem (data, *pktsize);
|
case RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM : return deserialiseReputationConfigItem (data, *pktsize);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -33,9 +33,10 @@
|
|||||||
#include "retroshare/rsgxsifacetypes.h"
|
#include "retroshare/rsgxsifacetypes.h"
|
||||||
|
|
||||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM 0x01
|
#define RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM 0x01
|
||||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM 0x02
|
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated 0x02
|
||||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM 0x03
|
#define RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM 0x03
|
||||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM 0x04
|
#define RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM 0x04
|
||||||
|
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM 0x05
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
class RsReputationItem: public RsItem
|
class RsReputationItem: public RsItem
|
||||||
@ -90,6 +91,7 @@ public:
|
|||||||
RsGxsId mGxsId;
|
RsGxsId mGxsId;
|
||||||
uint32_t mOwnOpinion;
|
uint32_t mOwnOpinion;
|
||||||
uint32_t mOwnOpinionTS;
|
uint32_t mOwnOpinionTS;
|
||||||
|
uint32_t mIdentityFlags ;
|
||||||
std::map<RsPeerId, uint32_t> mOpinions; // RsPeerId -> Opinion.
|
std::map<RsPeerId, uint32_t> mOpinions; // RsPeerId -> Opinion.
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -145,8 +147,9 @@ public:
|
|||||||
private:
|
private:
|
||||||
static RsGxsReputationConfigItem *deserialiseReputationConfigItem (void *data, uint32_t size);
|
static RsGxsReputationConfigItem *deserialiseReputationConfigItem (void *data, uint32_t size);
|
||||||
static RsGxsReputationSetItem *deserialiseReputationSetItem (void *data, uint32_t size);
|
static RsGxsReputationSetItem *deserialiseReputationSetItem (void *data, uint32_t size);
|
||||||
|
static RsGxsReputationSetItem *deserialiseReputationSetItem_deprecated (void *data, uint32_t size);
|
||||||
static RsGxsReputationUpdateItem *deserialiseReputationUpdateItem (void *data, uint32_t size);
|
static RsGxsReputationUpdateItem *deserialiseReputationUpdateItem (void *data, uint32_t size);
|
||||||
static RsGxsReputationRequestItem *deserialiseReputationRequestItem(void *data, uint32_t size);
|
static RsGxsReputationRequestItem *deserialiseReputationRequestItem (void *data, uint32_t size);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
#include "pqi/p3linkmgr.h"
|
#include "pqi/p3linkmgr.h"
|
||||||
|
|
||||||
#include "retroshare/rspeers.h"
|
#include "retroshare/rspeers.h"
|
||||||
@ -37,6 +38,7 @@
|
|||||||
/****
|
/****
|
||||||
* #define DEBUG_REPUTATION 1
|
* #define DEBUG_REPUTATION 1
|
||||||
****/
|
****/
|
||||||
|
#define DEBUG_REPUTATION 1
|
||||||
|
|
||||||
/************ IMPLEMENTATION NOTES *********************************
|
/************ IMPLEMENTATION NOTES *********************************
|
||||||
*
|
*
|
||||||
@ -126,7 +128,6 @@
|
|||||||
|
|
||||||
static const uint32_t LOWER_LIMIT = 0; // used to filter valid Opinion values from serialized data
|
static const uint32_t LOWER_LIMIT = 0; // used to filter valid Opinion values from serialized data
|
||||||
static const uint32_t UPPER_LIMIT = 2; // used to filter valid Opinion values from serialized data
|
static const uint32_t UPPER_LIMIT = 2; // used to filter valid Opinion values from serialized data
|
||||||
static const float REPUTATION_ASSESSMENT_THRESHOLD_X1 = 0.5f ; // reputation under which the peer gets killed
|
|
||||||
static const int kMaximumPeerAge = 180; // half a year.
|
static const int kMaximumPeerAge = 180; // half a year.
|
||||||
static const int kMaximumSetSize = 100; // max set of updates to send at once.
|
static const int kMaximumSetSize = 100; // max set of updates to send at once.
|
||||||
static const int ACTIVE_FRIENDS_UPDATE_PERIOD = 600 ; // 10 minutes
|
static const int ACTIVE_FRIENDS_UPDATE_PERIOD = 600 ; // 10 minutes
|
||||||
@ -134,6 +135,10 @@ static const int ACTIVE_FRIENDS_ONLINE_DELAY = 86400*7 ; // 1 week.
|
|||||||
static const int kReputationRequestPeriod = 600; // 10 mins
|
static const int kReputationRequestPeriod = 600; // 10 mins
|
||||||
static const int kReputationStoreWait = 180; // 3 minutes.
|
static const int kReputationStoreWait = 180; // 3 minutes.
|
||||||
|
|
||||||
|
static const float REPUTATION_ASSESSMENT_THRESHOLD_X1 = 0.5f ; // reputation under which the peer gets killed
|
||||||
|
static const float REPUTATION_PGP_LINKED_ID_BIAS = 0.2f ;
|
||||||
|
static const float REPUTATION_PGP_KNOWN_ID_BIAS = 0.3f ; // so known pgp-linked ids go up to +0.5f
|
||||||
|
static const float REPUTATION_FRIEND_VARIANCE = 2.0f ;
|
||||||
|
|
||||||
|
|
||||||
p3GxsReputation::p3GxsReputation(p3LinkMgr *lm)
|
p3GxsReputation::p3GxsReputation(p3LinkMgr *lm)
|
||||||
@ -180,6 +185,17 @@ int p3GxsReputation::tick()
|
|||||||
mLastActiveFriendsUpdate = now ;
|
mLastActiveFriendsUpdate = now ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static time_t last_identity_flags_update = 0 ;
|
||||||
|
|
||||||
|
// no more than once per 5 second chunk.
|
||||||
|
|
||||||
|
if(now > 5+last_identity_flags_update)
|
||||||
|
{
|
||||||
|
last_identity_flags_update = now ;
|
||||||
|
|
||||||
|
updateIdentityFlags() ;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_REPUTATION
|
#ifdef DEBUG_REPUTATION
|
||||||
static time_t last_debug_print = time(NULL) ;
|
static time_t last_debug_print = time(NULL) ;
|
||||||
|
|
||||||
@ -197,6 +213,33 @@ int p3GxsReputation::status()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void p3GxsReputation::updateIdentityFlags()
|
||||||
|
{
|
||||||
|
RsStackMutex stack(mReputationMtx); /****** LOCKED MUTEX *******/
|
||||||
|
|
||||||
|
std::cerr << "Updating reputation identity flags" << std::endl;
|
||||||
|
|
||||||
|
for( std::map<RsGxsId, Reputation>::iterator rit = mReputations.begin();rit!=mReputations.end();++rit)
|
||||||
|
if(rit->second.mIdentityFlags & REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE)
|
||||||
|
{
|
||||||
|
RsIdentityDetails details;
|
||||||
|
|
||||||
|
if(!rsIdentity->getIdDetails(rit->first,details))
|
||||||
|
{
|
||||||
|
std::cerr << " cannot obtain info for " << rit->first << ". Will do it later." << std::endl;
|
||||||
|
continue ;
|
||||||
|
}
|
||||||
|
|
||||||
|
rit->second.mIdentityFlags = 0 ;
|
||||||
|
|
||||||
|
if(details.mPgpLinked) rit->second.mIdentityFlags |= REPUTATION_IDENTITY_FLAG_PGP_LINKED ;
|
||||||
|
if(details.mPgpKnown ) rit->second.mIdentityFlags |= REPUTATION_IDENTITY_FLAG_PGP_KNOWN ;
|
||||||
|
|
||||||
|
std::cerr << " updated flags for " << rit->first << " to " << std::hex << rit->second.mIdentityFlags << std::dec << std::endl;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void p3GxsReputation::cleanup()
|
void p3GxsReputation::cleanup()
|
||||||
{
|
{
|
||||||
// remove opinions from friends that havn't been seen online for more than the specified delay
|
// remove opinions from friends that havn't been seen online for more than the specified delay
|
||||||
@ -539,7 +582,7 @@ bool p3GxsReputation::getReputationInfo(const RsGxsId& gxsid, RsReputations::Rep
|
|||||||
std::cerr << "getReputationInfo() for " << gxsid << std::endl;
|
std::cerr << "getReputationInfo() for " << gxsid << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::map<RsGxsId,Reputation>::const_iterator it = mReputations.find(gxsid);
|
std::map<RsGxsId,Reputation>::iterator it = mReputations.find(gxsid);
|
||||||
|
|
||||||
if (it == mReputations.end())
|
if (it == mReputations.end())
|
||||||
{
|
{
|
||||||
@ -689,6 +732,7 @@ bool p3GxsReputation::saveList(bool& cleanup, std::list<RsItem*> &savelist)
|
|||||||
item->mGxsId = rit->first;
|
item->mGxsId = rit->first;
|
||||||
item->mOwnOpinion = rit->second.mOwnOpinion;
|
item->mOwnOpinion = rit->second.mOwnOpinion;
|
||||||
item->mOwnOpinionTS = rit->second.mOwnOpinionTs;
|
item->mOwnOpinionTS = rit->second.mOwnOpinionTs;
|
||||||
|
item->mIdentityFlags = rit->second.mIdentityFlags;
|
||||||
|
|
||||||
std::map<RsPeerId, RsReputations::Opinion>::iterator oit;
|
std::map<RsPeerId, RsReputations::Opinion>::iterator oit;
|
||||||
for(oit = rit->second.mOpinions.begin(); oit != rit->second.mOpinions.end(); ++oit)
|
for(oit = rit->second.mOpinions.begin(); oit != rit->second.mOpinions.end(); ++oit)
|
||||||
@ -719,6 +763,7 @@ bool p3GxsReputation::loadList(std::list<RsItem *>& loadList)
|
|||||||
for(it = loadList.begin(); it != loadList.end(); ++it)
|
for(it = loadList.begin(); it != loadList.end(); ++it)
|
||||||
{
|
{
|
||||||
RsGxsReputationConfigItem *item = dynamic_cast<RsGxsReputationConfigItem *>(*it);
|
RsGxsReputationConfigItem *item = dynamic_cast<RsGxsReputationConfigItem *>(*it);
|
||||||
|
|
||||||
// Configurations are loaded first. (to establish peerSet).
|
// Configurations are loaded first. (to establish peerSet).
|
||||||
if (item)
|
if (item)
|
||||||
{
|
{
|
||||||
@ -731,6 +776,7 @@ bool p3GxsReputation::loadList(std::list<RsItem *>& loadList)
|
|||||||
|
|
||||||
peerSet.insert(peerId);
|
peerSet.insert(peerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
RsGxsReputationSetItem *set = dynamic_cast<RsGxsReputationSetItem *>(*it);
|
RsGxsReputationSetItem *set = dynamic_cast<RsGxsReputationSetItem *>(*it);
|
||||||
if (set)
|
if (set)
|
||||||
loadReputationSet(set, peerSet);
|
loadReputationSet(set, peerSet);
|
||||||
@ -903,10 +949,25 @@ void Reputation::updateReputation(uint32_t average_active_friends)
|
|||||||
if(mOpinions.empty()) // includes the case of no friends!
|
if(mOpinions.empty()) // includes the case of no friends!
|
||||||
mFriendAverage = 1.0f ;
|
mFriendAverage = 1.0f ;
|
||||||
else
|
else
|
||||||
mFriendAverage = 1.0+friend_total / float(std::max(average_active_friends,(uint32_t)mOpinions.size()));
|
{
|
||||||
|
if(friend_total > 0)
|
||||||
|
mFriendAverage = 1.0+exp(-friend_total / REPUTATION_FRIEND_VARIANCE) ;
|
||||||
|
else
|
||||||
|
mFriendAverage = 1.0-exp( friend_total / REPUTATION_FRIEND_VARIANCE) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// now compute a bias for PGP-signed ids.
|
||||||
|
|
||||||
|
float pgp_bias = 0.0f ;
|
||||||
|
|
||||||
|
if(mIdentityFlags & REPUTATION_IDENTITY_FLAG_PGP_LINKED)
|
||||||
|
pgp_bias += REPUTATION_PGP_KNOWN_ID_BIAS ;
|
||||||
|
|
||||||
|
if(mIdentityFlags & REPUTATION_IDENTITY_FLAG_PGP_KNOWN)
|
||||||
|
pgp_bias += REPUTATION_PGP_LINKED_ID_BIAS ;
|
||||||
|
|
||||||
if(mOwnOpinion == RsReputations::OPINION_NEUTRAL)
|
if(mOwnOpinion == RsReputations::OPINION_NEUTRAL)
|
||||||
mReputation = mFriendAverage ;
|
mReputation = std::max(0.0f,std::min(2.0f,mFriendAverage + pgp_bias)) ;
|
||||||
else
|
else
|
||||||
mReputation = (float)mOwnOpinion ;
|
mReputation = (float)mOwnOpinion ;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,10 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
|
#define REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE 0x0100
|
||||||
|
#define REPUTATION_IDENTITY_FLAG_PGP_LINKED 0x0001
|
||||||
|
#define REPUTATION_IDENTITY_FLAG_PGP_KNOWN 0x0002
|
||||||
|
|
||||||
#include "serialiser/rsgxsreputationitems.h"
|
#include "serialiser/rsgxsreputationitems.h"
|
||||||
|
|
||||||
#include "retroshare/rsidentity.h"
|
#include "retroshare/rsidentity.h"
|
||||||
@ -59,10 +63,10 @@ class Reputation
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Reputation()
|
Reputation()
|
||||||
:mOwnOpinion(RsReputations::OPINION_NEUTRAL), mOwnOpinionTs(0), mReputation(RsReputations::OPINION_NEUTRAL) { }
|
:mOwnOpinion(RsReputations::OPINION_NEUTRAL), mOwnOpinionTs(0), mReputation(RsReputations::OPINION_NEUTRAL),mIdentityFlags(REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE) { }
|
||||||
|
|
||||||
Reputation(const RsGxsId& about)
|
Reputation(const RsGxsId& about)
|
||||||
:mOwnOpinion(RsReputations::OPINION_NEUTRAL), mOwnOpinionTs(0), mReputation(RsReputations::OPINION_NEUTRAL) { }
|
:mOwnOpinion(RsReputations::OPINION_NEUTRAL), mOwnOpinionTs(0), mReputation(RsReputations::OPINION_NEUTRAL),mIdentityFlags(REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE) { }
|
||||||
|
|
||||||
void updateReputation(uint32_t average_active_friends);
|
void updateReputation(uint32_t average_active_friends);
|
||||||
|
|
||||||
@ -72,6 +76,8 @@ public:
|
|||||||
|
|
||||||
float mFriendAverage ;
|
float mFriendAverage ;
|
||||||
float mReputation;
|
float mReputation;
|
||||||
|
|
||||||
|
uint32_t mIdentityFlags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -124,6 +130,7 @@ class p3GxsReputation: public p3Service, public p3Config, public RsReputations /
|
|||||||
void sendReputationRequests();
|
void sendReputationRequests();
|
||||||
int sendReputationRequest(RsPeerId peerid);
|
int sendReputationRequest(RsPeerId peerid);
|
||||||
void debug_print() ;
|
void debug_print() ;
|
||||||
|
void updateIdentityFlags();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RsMutex mReputationMtx;
|
RsMutex mReputationMtx;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user