diff --git a/src/friend_server/fsmanager.cc b/src/friend_server/fsmanager.cc index e7e653849..295e732b4 100644 --- a/src/friend_server/fsmanager.cc +++ b/src/friend_server/fsmanager.cc @@ -227,3 +227,23 @@ std::map FriendServerManager::getPeersInf return res; } +void FriendServerManager::allowPeer(const RsPeerId& pid) +{ + auto fit = mAlreadyReceivedPeers.find(pid); + + if(fit == mAlreadyReceivedPeers.end()) + { + RsErr() << "FriendServerManager: unknown peer " << pid ; + return; + } + RsPeerDetails det; + uint32_t err_code; + + if(!rsPeers->parseShortInvite(fit->second.first,det,err_code)) + { + RsErr() << "Unexpected parsing error in short invite received by the friend server. Err_code=" << err_code ; + return; + } + rsPeers->addSslOnlyFriend(det.id,det.gpg_id,det); +} + diff --git a/src/friend_server/fsmanager.h b/src/friend_server/fsmanager.h index 840a5d5c6..5e404108c 100644 --- a/src/friend_server/fsmanager.h +++ b/src/friend_server/fsmanager.h @@ -24,7 +24,8 @@ public: virtual std::map getPeersInfo() override; virtual bool autoAddFriends() const override { return mAutoAddFriends; } - virtual bool setAutoAddFriends(bool b) override { mAutoAddFriends = b; } + virtual void setAutoAddFriends(bool b) override { mAutoAddFriends = b; } + virtual void allowPeer(const RsPeerId& pid) override; protected: virtual void threadTick() override; diff --git a/src/retroshare/rsfriendserver.h b/src/retroshare/rsfriendserver.h index efcc0e581..66d90e06e 100644 --- a/src/retroshare/rsfriendserver.h +++ b/src/retroshare/rsfriendserver.h @@ -103,7 +103,7 @@ public: virtual void setFriendsToRequest(uint32_t) =0; virtual bool autoAddFriends() const =0; - virtual bool setAutoAddFriends(bool b) =0; + virtual void setAutoAddFriends(bool b) =0; /*! * \brief setProfilePassphrase * Needs to be called as least once, and before the friend server is enabled, so as to be able to decrypt incoming information @@ -116,6 +116,12 @@ public: virtual uint16_t friendsServerPort() =0; virtual std::string friendsServerAddress() =0; + /*! + * \brief allowPeer + * Allows the friend server to make the given peer as friend. + */ + virtual void allowPeer(const RsPeerId& pid) =0; + virtual std::map getPeersInfo() =0 ; }; diff --git a/src/retroshare/rspeers.h b/src/retroshare/rspeers.h index 04089721f..a57cc5e95 100644 --- a/src/retroshare/rspeers.h +++ b/src/retroshare/rspeers.h @@ -265,6 +265,8 @@ enum class RsConnectionEventCode: uint8_t PEER_DISCONNECTED = 0x02, PEER_TIME_SHIFT = 0x03, // mTimeShift = time shift in seconds PEER_REPORTS_WRONG_IP = 0x04, // mPeerLocator = address reported, mOwnLocator = own address + PEER_ADDED = 0x05, + PEER_REMOVED = 0x06, }; struct RsConnectionEvent : RsEvent