mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Made key exchange more stable.
removed restore key function sorry introduced lock with my last commit git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3924 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
35f91f5e07
commit
5bc8e68059
@ -251,6 +251,13 @@ virtual bool channelEditInfo(std::string chId, ChannelInfo &ci) = 0;
|
|||||||
*/
|
*/
|
||||||
virtual void getPubKeysAvailableGrpIds(std::list<std::string>& chanIds) = 0;
|
virtual void getPubKeysAvailableGrpIds(std::list<std::string>& chanIds) = 0;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//virtual void setPrivateChannelDir(const std::string&) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ RsChannels *rsChannels = NULL;
|
|||||||
/* remember 2^16 = 64K max units in store period.
|
/* remember 2^16 = 64K max units in store period.
|
||||||
* PUBPERIOD * 2^16 = max STORE PERIOD */
|
* PUBPERIOD * 2^16 = max STORE PERIOD */
|
||||||
#define CHANNEL_STOREPERIOD (30*24*3600) /* 30 * 24 * 3600 - secs in a 30 day month */
|
#define CHANNEL_STOREPERIOD (30*24*3600) /* 30 * 24 * 3600 - secs in a 30 day month */
|
||||||
#define CHANNEL_PUBPERIOD 600 /* 10 minutes ... (max = 455 days) */
|
#define CHANNEL_PUBPERIOD 120 /* 2 minutes ... (max = 455 days) */
|
||||||
#define MAX_AUTO_DL 1E9 /* auto download of attachment limit; 1 GIG */
|
#define MAX_AUTO_DL 1E9 /* auto download of attachment limit; 1 GIG */
|
||||||
|
|
||||||
p3Channels::p3Channels(uint16_t type, CacheStrapper *cs,
|
p3Channels::p3Channels(uint16_t type, CacheStrapper *cs,
|
||||||
@ -658,9 +658,9 @@ bool p3Channels::locked_eventDuplicateMsg(GroupInfo *grp, RsDistribMsg *msg, std
|
|||||||
|
|
||||||
// tho if empty don't bother
|
// tho if empty don't bother
|
||||||
if(!chanMsg->attachment.items.empty()){
|
if(!chanMsg->attachment.items.empty()){
|
||||||
getChannelInfo(grpId, cInfo);
|
|
||||||
|
|
||||||
if(cInfo.channelFlags & RS_DISTRIB_PRIVATE)
|
|
||||||
|
if(grp->flags & RS_DISTRIB_PRIVATE)
|
||||||
chanPrivate = true;
|
chanPrivate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,7 +679,7 @@ bool p3Channels::locked_eventDuplicateMsg(GroupInfo *grp, RsDistribMsg *msg, std
|
|||||||
|
|
||||||
// send to download directory if file is private
|
// send to download directory if file is private
|
||||||
if(chanPrivate){
|
if(chanPrivate){
|
||||||
localpath = mChannelsDir + "/" + channelname;
|
localpath = mChannelsDir;
|
||||||
flags = RS_FILE_HINTS_BACKGROUND | RS_FILE_HINTS_EXTRA;
|
flags = RS_FILE_HINTS_BACKGROUND | RS_FILE_HINTS_EXTRA;
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
|
@ -79,6 +79,7 @@ virtual bool channelRestoreKeys(std::string chId);
|
|||||||
virtual bool channelShareKeys(std::string chId, std::list<std::string>& peers);
|
virtual bool channelShareKeys(std::string chId, std::list<std::string>& peers);
|
||||||
virtual bool channelEditInfo(std::string chId, ChannelInfo &ci);
|
virtual bool channelEditInfo(std::string chId, ChannelInfo &ci);
|
||||||
virtual void getPubKeysAvailableGrpIds(std::list<std::string>& grpIds);
|
virtual void getPubKeysAvailableGrpIds(std::list<std::string>& grpIds);
|
||||||
|
//virtual void setPrivateChannelDir(const std::string dirName);
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************/
|
/***************************************************************************************/
|
||||||
|
@ -96,7 +96,7 @@ int p3GroupDistrib::tick()
|
|||||||
|
|
||||||
{
|
{
|
||||||
RsStackMutex stack(distribMtx); /**** STACK LOCKED MUTEX ****/
|
RsStackMutex stack(distribMtx); /**** STACK LOCKED MUTEX ****/
|
||||||
toPublish = (mPendingPublish.size() > 0) && (now > (time_t) (mPubPeriod + mLastPublishTime));
|
toPublish = ((mPendingPublish.size() > 0) || (mPendingPubKeyRecipients.size() > 0)) && (now > (time_t) (mPubPeriod + mLastPublishTime));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,19 +136,8 @@ int p3GroupDistrib::tick()
|
|||||||
bool toReceive = receivedItems();
|
bool toReceive = receivedItems();
|
||||||
|
|
||||||
if(toReceive){
|
if(toReceive){
|
||||||
RsStackMutex stack(distribMtx);
|
|
||||||
locked_receivePubKeys();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
RsStackMutex stack(distribMtx);
|
|
||||||
|
|
||||||
toReceive = (mRecvdPubKeys.size() > 0) && (now > (time_t) (mPubPeriod + mLastRecvdKeyTime));
|
|
||||||
|
|
||||||
if(toReceive)
|
|
||||||
locked_loadRecvdPubKeys();
|
|
||||||
|
|
||||||
|
receivePubKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -513,23 +502,44 @@ void p3GroupDistrib::loadGroupKey(RsDistribGrpKey *newKey)
|
|||||||
std::map<std::string, GroupInfo>::iterator it;
|
std::map<std::string, GroupInfo>::iterator it;
|
||||||
it = mGroups.find(gid);
|
it = mGroups.find(gid);
|
||||||
|
|
||||||
|
//
|
||||||
if (it == mGroups.end())
|
if (it == mGroups.end())
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef DISTRIB_DEBUG
|
#ifdef DISTRIB_DEBUG
|
||||||
std::cerr << "p3GroupDistrib::loadGroupKey() Group Not Found - discarding Key";
|
std::cerr << "p3GroupDistrib::loadGroupKey() Group Not Found - Checking to see if shared Key";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// if this is an in-date publish key then keep to see if group arrives later
|
// if this is an in-date full publish key then keep to see if group arrives later
|
||||||
if(((time_t)(newKey->key.startTS + mStorePeriod) > time(NULL)) && !(newKey->key.keyFlags & RSTLV_KEY_DISTRIB_ADMIN))
|
if(((time_t)(newKey->key.startTS + mStorePeriod) > time(NULL)) && (newKey->key.keyFlags & RSTLV_KEY_TYPE_FULL)){
|
||||||
|
|
||||||
|
// make sure key does not exist
|
||||||
|
if(mRecvdPubKeys.find(gid) == mRecvdPubKeys.end()){
|
||||||
mRecvdPubKeys.insert(std::pair<std::string, RsDistribGrpKey*>(gid, newKey));
|
mRecvdPubKeys.insert(std::pair<std::string, RsDistribGrpKey*>(gid, newKey));
|
||||||
else
|
mPubKeyAvailableGrpId.push_back(gid);
|
||||||
delete newKey;
|
}else{
|
||||||
|
#ifdef DISTRIB_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadGroupKey() Key already received; discarding";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
delete newKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
#ifdef DISTRIB_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadGroupKey() Key out of date: discarding";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
delete newKey;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* have the group -> add in the key */
|
/* have the group -> add in the key */
|
||||||
bool updateOk = false;
|
bool updateOk = false;
|
||||||
if (newKey->key.keyFlags & RSTLV_KEY_DISTRIB_ADMIN)
|
if (newKey->key.keyFlags & RSTLV_KEY_DISTRIB_ADMIN)
|
||||||
@ -548,7 +558,7 @@ void p3GroupDistrib::loadGroupKey(RsDistribGrpKey *newKey)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!locked_updateGroupPublishKey(it->second, newKey))
|
if(!locked_updateGroupPublishKey(it->second, newKey))
|
||||||
{
|
{
|
||||||
#ifdef DISTRIB_DEBUG
|
#ifdef DISTRIB_DEBUG
|
||||||
std::cerr << "p3GroupDistrib::loadGroupKey() Failed Publish Key Update";
|
std::cerr << "p3GroupDistrib::loadGroupKey() Failed Publish Key Update";
|
||||||
@ -559,8 +569,46 @@ void p3GroupDistrib::loadGroupKey(RsDistribGrpKey *newKey)
|
|||||||
{
|
{
|
||||||
updateOk = true;
|
updateOk = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::map<std::string, RsDistribGrpKey* >::iterator kit;
|
||||||
|
std::list<std::string>::iterator sit;
|
||||||
|
bool canAdd = false;
|
||||||
|
|
||||||
|
// check to see if client has received a private publish key
|
||||||
|
if(mRecvdPubKeys.end() != (kit = mRecvdPubKeys.find(gid))){
|
||||||
|
|
||||||
|
if(!locked_updateGroupPublishKey(it->second, kit->second)){
|
||||||
|
#ifdef DISTRIB_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadGroupKey() Failed Recvd Publish Key Update";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
}else{
|
||||||
|
#ifdef DISTRIB_DEBUG
|
||||||
|
std::cerr << "p3GroupDistrib::loadGroupKey() Recvd Publish Key Update";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
sit = mPubKeyAvailableGrpId.begin();
|
||||||
|
for(; sit != mPubKeyAvailableGrpId.end(); sit++){
|
||||||
|
|
||||||
|
if(gid == *sit)
|
||||||
|
canAdd = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(canAdd)
|
||||||
|
mPubKeyAvailableGrpId.push_back(gid);
|
||||||
|
|
||||||
|
mRecvdPubKeys.erase(gid);
|
||||||
|
updateOk = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (updateOk)
|
if (updateOk)
|
||||||
{
|
{
|
||||||
locked_notifyGroupChanged(it->second, GRP_LOAD_KEY);
|
locked_notifyGroupChanged(it->second, GRP_LOAD_KEY);
|
||||||
@ -1230,8 +1278,8 @@ bool p3GroupDistrib::subscribeToGroup(const std::string &grpId, bool subscrib
|
|||||||
{
|
{
|
||||||
git->second.flags |= RS_DISTRIB_SUBSCRIBED;
|
git->second.flags |= RS_DISTRIB_SUBSCRIBED;
|
||||||
|
|
||||||
if(attemptPublishKeysRecvd(git->second))
|
// if(attemptPublishKeysRecvd(git->second))
|
||||||
git->second.flags |= RS_DISTRIB_PUBLISH;
|
// git->second.flags |= RS_DISTRIB_PUBLISH;
|
||||||
|
|
||||||
locked_notifyGroupChanged(git->second, GRP_SUBSCRIBED);
|
locked_notifyGroupChanged(git->second, GRP_SUBSCRIBED);
|
||||||
mGroupsRepublish = true;
|
mGroupsRepublish = true;
|
||||||
@ -1251,8 +1299,9 @@ bool p3GroupDistrib::subscribeToGroup(const std::string &grpId, bool subscrib
|
|||||||
{
|
{
|
||||||
for(pit = git->second.sources.begin();
|
for(pit = git->second.sources.begin();
|
||||||
pit != git->second.sources.end(); pit++)
|
pit != git->second.sources.end(); pit++)
|
||||||
{
|
{
|
||||||
locked_eventDuplicateMsg(&(git->second), mit->second, *pit);
|
if(*pit != mOwnId)
|
||||||
|
locked_eventDuplicateMsg(&(git->second), mit->second, *pit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2063,7 +2112,7 @@ void p3GroupDistrib::locked_sharePubKey(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void p3GroupDistrib::locked_receivePubKeys(){
|
void p3GroupDistrib::receivePubKeys(){
|
||||||
|
|
||||||
|
|
||||||
RsItem* item;
|
RsItem* item;
|
||||||
@ -2082,7 +2131,9 @@ void p3GroupDistrib::locked_receivePubKeys(){
|
|||||||
std::cerr << "Got key Item" << std::endl;
|
std::cerr << "Got key Item" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
if(key_item->key.keyFlags & RSTLV_KEY_TYPE_FULL){
|
if(key_item->key.keyFlags & RSTLV_KEY_TYPE_FULL){
|
||||||
mRecvdPubKeys[key_item->grpId] = key_item;
|
|
||||||
|
loadGroupKey(key_item);
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
std::cerr << "p3GroupDistrib::locked_receiveKeys():" << "Not full public key"
|
std::cerr << "p3GroupDistrib::locked_receiveKeys():" << "Not full public key"
|
||||||
@ -2094,8 +2145,14 @@ void p3GroupDistrib::locked_receivePubKeys(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!mRecvdPubKeys.empty())
|
|
||||||
IndicateConfigChanged();
|
RsStackMutex stack(distribMtx);
|
||||||
|
|
||||||
|
// indicate config changed and also record the groups keys received for
|
||||||
|
if(!mRecvdPubKeys.empty())
|
||||||
|
IndicateConfigChanged();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -507,11 +507,12 @@ class p3GroupDistrib: public CacheSource, public CacheStore, public p3Config, pu
|
|||||||
/**
|
/**
|
||||||
* Attempt to receive publication keys
|
* Attempt to receive publication keys
|
||||||
*/
|
*/
|
||||||
virtual void locked_receivePubKeys();
|
virtual void receivePubKeys();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* utility function to check whether grps exist
|
* utility function to check whether grps exist
|
||||||
* for private publish keys received
|
* for private publish keys received
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
virtual void locked_loadRecvdPubKeys();
|
virtual void locked_loadRecvdPubKeys();
|
||||||
|
|
||||||
|
@ -172,8 +172,8 @@ void ChannelFeed::channelListCustomPopupMenu( QPoint point )
|
|||||||
QAction *channeldetailsAct = new QAction(QIcon(":/images/info16.png"), tr( "Show Channel Details" ), &contextMnu);
|
QAction *channeldetailsAct = new QAction(QIcon(":/images/info16.png"), tr( "Show Channel Details" ), &contextMnu);
|
||||||
connect( channeldetailsAct , SIGNAL( triggered() ), this, SLOT( showChannelDetails() ) );
|
connect( channeldetailsAct , SIGNAL( triggered() ), this, SLOT( showChannelDetails() ) );
|
||||||
|
|
||||||
QAction *restoreKeysAct = new QAction(QIcon(":/images/settings16.png"), tr("Restore Publish Rights for Channel" ), &contextMnu);
|
//QAction *restoreKeysAct = new QAction(QIcon(":/images/settings16.png"), tr("Restore Publish Rights for Channel" ), &contextMnu);
|
||||||
connect( restoreKeysAct , SIGNAL( triggered() ), this, SLOT( restoreChannelKeys() ) );
|
//connect( restoreKeysAct , SIGNAL( triggered() ), this, SLOT( restoreChannelKeys() ) );
|
||||||
|
|
||||||
QAction *editChannelDetailAct = new QAction(QIcon(":/images/edit_16.png"), tr("Edit Channel Details"), &contextMnu);
|
QAction *editChannelDetailAct = new QAction(QIcon(":/images/edit_16.png"), tr("Edit Channel Details"), &contextMnu);
|
||||||
connect( editChannelDetailAct, SIGNAL( triggered() ), this, SLOT( editChannelDetail() ) );
|
connect( editChannelDetailAct, SIGNAL( triggered() ), this, SLOT( editChannelDetail() ) );
|
||||||
@ -197,12 +197,12 @@ void ChannelFeed::channelListCustomPopupMenu( QPoint point )
|
|||||||
contextMnu.addAction( unsubscribechannelAct );
|
contextMnu.addAction( unsubscribechannelAct );
|
||||||
contextMnu.addSeparator();
|
contextMnu.addSeparator();
|
||||||
contextMnu.addAction( channeldetailsAct );
|
contextMnu.addAction( channeldetailsAct );
|
||||||
contextMnu.addAction( restoreKeysAct );
|
// contextMnu.addAction( restoreKeysAct );
|
||||||
} else {
|
} else {
|
||||||
contextMnu.addAction( subscribechannelAct );
|
contextMnu.addAction( subscribechannelAct );
|
||||||
contextMnu.addSeparator();
|
contextMnu.addSeparator();
|
||||||
contextMnu.addAction( channeldetailsAct );
|
contextMnu.addAction( channeldetailsAct );
|
||||||
contextMnu.addAction( restoreKeysAct );
|
// contextMnu.addAction( restoreKeysAct );
|
||||||
}
|
}
|
||||||
|
|
||||||
contextMnu.exec(QCursor::pos());
|
contextMnu.exec(QCursor::pos());
|
||||||
|
Loading…
Reference in New Issue
Block a user