From 059a0b3bf7381236e71061567d4fba6b1e925bbf Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 4 Apr 2015 21:18:43 +0000 Subject: [PATCH] prevent discovery and p3PeerMgr::loadList() from erasing service permission flags. Now the existing pgp-based values are kept. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8122 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/pqi/p3peermgr.cc | 5 +++-- libretroshare/src/services/p3discovery2.cc | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/libretroshare/src/pqi/p3peermgr.cc b/libretroshare/src/pqi/p3peermgr.cc index 7e7720a77..2ec95a4b0 100644 --- a/libretroshare/src/pqi/p3peermgr.cc +++ b/libretroshare/src/pqi/p3peermgr.cc @@ -1699,8 +1699,9 @@ bool p3PeerMgrIMPL::loadList(std::list& load) pitem->print(std::cerr, 10); std::cerr << std::endl; #endif - /* ************* */ - addFriend(peer_id, peer_pgp_id, pitem->netMode, pitem->vs_disc, pitem->vs_dht, pitem->lastContact, RS_NODE_PERM_DEFAULT); + /* ************* */ + // permission flags is used as a mask for the existing perms, so we set it to 0xffff + addFriend(peer_id, peer_pgp_id, pitem->netMode, pitem->vs_disc, pitem->vs_dht, pitem->lastContact, RS_NODE_PERM_ALL); setLocation(pitem->peerId, pitem->location); } diff --git a/libretroshare/src/services/p3discovery2.cc b/libretroshare/src/services/p3discovery2.cc index 79462bbd9..a408c815f 100644 --- a/libretroshare/src/services/p3discovery2.cc +++ b/libretroshare/src/services/p3discovery2.cc @@ -913,7 +913,10 @@ void p3discovery2::processContactInfo(const SSLID &fromId, const RsDiscContactIt #ifdef P3DISC_DEBUG std::cerr << "--> Adding to friends list " << item->sslId << " - " << item->pgpId << std::endl; #endif - mPeerMgr->addFriend(item->sslId, item->pgpId, item->netMode, RS_VS_DISC_OFF, RS_VS_DHT_FULL,(time_t)0,RS_NODE_PERM_DEFAULT); + // We pass RS_NODE_PERM_ALL because the PGP id is already a friend, so we should keep the existing + // permission flags. Therefore the mask needs to be 0xffff. + + mPeerMgr->addFriend(item->sslId, item->pgpId, item->netMode, RS_VS_DISC_OFF, RS_VS_DHT_FULL,(time_t)0,RS_NODE_PERM_ALL); updatePeerAddresses(item); } }