ID cleaning - saving work

git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-IdCleaning@7108 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2014-02-11 20:58:33 +00:00
parent 328d820421
commit 4b7a2160b9
21 changed files with 327 additions and 309 deletions

View file

@ -239,7 +239,7 @@ virtual int getConfigNetStatus(RsConfigNetStatus &status) = 0;
//virtual int getConfigStartup(RsConfigStartup &params) = 0; //virtual int getConfigStartup(RsConfigStartup &params) = 0;
virtual int getTotalBandwidthRates(RsConfigDataRates &rates) = 0; virtual int getTotalBandwidthRates(RsConfigDataRates &rates) = 0;
virtual int getAllBandwidthRates(std::map<std::string, RsConfigDataRates> &ratemap) = 0; virtual int getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap) = 0;
/* From RsInit */ /* From RsInit */

View file

@ -30,6 +30,7 @@
#include <string> #include <string>
#include <list> #include <list>
#include <map> #include <map>
#include <retroshare/rstypes.h>
/* The Main Interface Class - for information about your Peers */ /* The Main Interface Class - for information about your Peers */
class RsDisc; class RsDisc;
@ -42,9 +43,9 @@ class RsDisc
RsDisc() { return; } RsDisc() { return; }
virtual ~RsDisc() { return; } virtual ~RsDisc() { return; }
virtual bool getDiscFriends(const std::string &id, std::list<std::string>& friends) = 0; virtual bool getDiscFriends(const RsPeerId &id, std::list<RsPeerId>& friends) = 0;
virtual bool getDiscPgpFriends(const std::string &pgpid, std::list<std::string>& gpg_friends) = 0; virtual bool getDiscPgpFriends(const PGPIdType &pgpid, std::list<PGPIdType>& gpg_friends) = 0;
virtual bool getPeerVersion(const std::string &id, std::string &versions) = 0; virtual bool getPeerVersion(const RsPeerId &id, std::string &versions) = 0;
virtual bool getWaitingDiscCount(unsigned int *sendCount, unsigned int *recvCount) = 0; virtual bool getWaitingDiscCount(unsigned int *sendCount, unsigned int *recvCount) = 0;
}; };

View file

@ -238,7 +238,7 @@ extern RsMsgs *rsMsgs;
struct DistantOfflineMessengingInvite struct DistantOfflineMessengingInvite
{ {
PGPIdType issuer_pgp_id ; PGPIdType issuer_pgp_id ;
std::string hash ; Sha1CheckSum hash ;
time_t time_of_validity ; time_t time_of_validity ;
}; };
@ -290,7 +290,7 @@ virtual bool createDistantOfflineMessengingInvite(time_t validity_time_stamp, st
virtual bool getDistantOfflineMessengingInvites(std::vector<DistantOfflineMessengingInvite>& invites) = 0 ; virtual bool getDistantOfflineMessengingInvites(std::vector<DistantOfflineMessengingInvite>& invites) = 0 ;
virtual void enableDistantMessaging(bool b) = 0; virtual void enableDistantMessaging(bool b) = 0;
virtual bool distantMessagingEnabled() = 0; virtual bool distantMessagingEnabled() = 0;
virtual bool getDistantMessageHash(const PGPIdType& pgp_id, std::string& hash) = 0; virtual bool getDistantMessageHash(const PGPIdType& pgp_id, Sha1CheckSum& hash) = 0;
/****************************************/ /****************************************/
/* Chat */ /* Chat */

View file

@ -34,6 +34,7 @@ extern RsStatus *rsStatus;
#include <string> #include <string>
#include <inttypes.h> #include <inttypes.h>
#include <list> #include <list>
#include <retroshare/rstypes.h>
const uint32_t RS_STATUS_OFFLINE = 0x0000; const uint32_t RS_STATUS_OFFLINE = 0x0000;
@ -58,7 +59,7 @@ class StatusInfo
} }
public: public:
std::string id; RsPeerId id;
uint32_t status; uint32_t status;
time_t time_stamp; /// for owner time set, and for their peers time sent time_t time_stamp; /// for owner time set, and for their peers time sent
}; };
@ -88,7 +89,7 @@ class RsStatus
* This retrieves the status info one peer * This retrieves the status info one peer
* @param statusInfo is populated with client's peer's status * @param statusInfo is populated with client's peer's status
*/ */
virtual bool getStatus(const std::string &id, StatusInfo &statusInfo) = 0; virtual bool getStatus(const RsPeerId &id, StatusInfo &statusInfo) = 0;
/** /**
* send the client's status to his/her peers * send the client's status to his/her peers
@ -96,7 +97,7 @@ class RsStatus
* @param status the status of the peers * @param status the status of the peers
* @return will return false if status info does not belong to client * @return will return false if status info does not belong to client
*/ */
virtual bool sendStatus(const std::string &id, uint32_t status) = 0; virtual bool sendStatus(const RsPeerId &id, uint32_t status) = 0;
}; };

View file

@ -116,7 +116,7 @@ bool p3Msgs::distantMessagingEnabled()
{ {
return mMsgSrv->distantMessagingEnabled(); return mMsgSrv->distantMessagingEnabled();
} }
bool p3Msgs::getDistantMessageHash(const PGPIdType& pgp_id,std::string& hash) bool p3Msgs::getDistantMessageHash(const PGPIdType& pgp_id,Sha1CheckSum& hash)
{ {
return mMsgSrv->getDistantMessageHash(pgp_id,hash); return mMsgSrv->getDistantMessageHash(pgp_id,hash);
} }

View file

@ -85,7 +85,7 @@ class p3Msgs: public RsMsgs
virtual void enableDistantMessaging(bool b) ; virtual void enableDistantMessaging(bool b) ;
virtual bool distantMessagingEnabled() ; virtual bool distantMessagingEnabled() ;
virtual bool getDistantMessageHash(const PGPIdType& pgp_id,std::string& hash) ; virtual bool getDistantMessageHash(const PGPIdType& pgp_id,Sha1CheckSum& hash) ;
/*! /*!
* gets avatar from peer, image data in jpeg format * gets avatar from peer, image data in jpeg format

View file

@ -206,7 +206,7 @@ int p3ServerConfig::getTotalBandwidthRates(RsConfigDataRates &rates)
} }
int p3ServerConfig::getAllBandwidthRates(std::map<std::string, RsConfigDataRates> &ratemap) int p3ServerConfig::getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap)
{ {
if (rsBandwidthControl) if (rsBandwidthControl)
{ {

View file

@ -57,7 +57,7 @@ virtual int getConfigStartup(RsConfigStartup &params);
/***** for RsConfig -> p3BandwidthControl ****/ /***** for RsConfig -> p3BandwidthControl ****/
virtual int getTotalBandwidthRates(RsConfigDataRates &rates); virtual int getTotalBandwidthRates(RsConfigDataRates &rates);
virtual int getAllBandwidthRates(std::map<std::string, RsConfigDataRates> &ratemap); virtual int getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap);
/* From RsInit */ /* From RsInit */

View file

@ -47,12 +47,12 @@ bool p3Status::getStatusList(std::list<StatusInfo>& statusInfo){
return mStatusSrv->getStatusList(statusInfo); return mStatusSrv->getStatusList(statusInfo);
} }
bool p3Status::getStatus(const std::string &id, StatusInfo &statusInfo) bool p3Status::getStatus(const RsPeerId &id, StatusInfo &statusInfo)
{ {
return mStatusSrv->getStatus(id, statusInfo); return mStatusSrv->getStatus(id, statusInfo);
} }
bool p3Status::sendStatus(const std::string &id, uint32_t status){ bool p3Status::sendStatus(const RsPeerId &id, uint32_t status){
return mStatusSrv->sendStatus(id, status); return mStatusSrv->sendStatus(id, status);
} }

View file

@ -45,8 +45,8 @@ public:
virtual bool getOwnStatus(StatusInfo& statusInfo); virtual bool getOwnStatus(StatusInfo& statusInfo);
virtual bool getStatusList(std::list<StatusInfo>& statusInfo); virtual bool getStatusList(std::list<StatusInfo>& statusInfo);
virtual bool getStatus(const std::string &id, StatusInfo &statusInfo); virtual bool getStatus(const RsPeerId &id, StatusInfo &statusInfo);
virtual bool sendStatus(const std::string &id, uint32_t status); virtual bool sendStatus(const RsPeerId &id, uint32_t status);
private: private:

View file

@ -442,7 +442,7 @@ std::ostream &RsDiscPgpCertItem::print(std::ostream &out, uint16_t indent)
uint32_t RsDiscSerialiser::sizePgpCert(RsDiscPgpCertItem *item) uint32_t RsDiscSerialiser::sizePgpCert(RsDiscPgpCertItem *item)
{ {
uint32_t s = 8; /* header */ uint32_t s = 8; /* header */
s += GetTlvStringSize(item->pgpId); s += item->pgpId.serial_size();
s += GetTlvStringSize(item->pgpCert); s += GetTlvStringSize(item->pgpCert);
return s; return s;
} }
@ -471,7 +471,7 @@ bool RsDiscSerialiser::serialisePgpCert(RsDiscPgpCertItem *item, void *data,
offset += 8; offset += 8;
/* add mandatory parts first */ /* add mandatory parts first */
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PGPID, item->pgpId); ok &= item->pgpId.serialise(data, tlvsize, offset) ;
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PGPCERT, item->pgpCert); ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PGPCERT, item->pgpCert);
if (offset != tlvsize) { if (offset != tlvsize) {
@ -523,7 +523,7 @@ RsDiscPgpCertItem *RsDiscSerialiser::deserialisePgpCert(void *data, uint32_t *pk
offset += 8; offset += 8;
/* get mandatory parts first */ /* get mandatory parts first */
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PGPID, item->pgpId); ok &= item->pgpId.deserialise(data, rssize, offset) ;
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PGPCERT, item->pgpCert); ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PGPCERT, item->pgpCert);
if (offset != rssize) { if (offset != rssize) {
@ -659,8 +659,8 @@ std::ostream &RsDiscContactItem::print(std::ostream &out, uint16_t indent)
uint32_t RsDiscSerialiser::sizeContact(RsDiscContactItem *item) uint32_t RsDiscSerialiser::sizeContact(RsDiscContactItem *item)
{ {
uint32_t s = 8; /* header */ uint32_t s = 8; /* header */
s += GetTlvStringSize(item->pgpId); s += item->pgpId.serial_size();
s += GetTlvStringSize(item->sslId); s += item->sslId.serial_size();
s += GetTlvStringSize(item->location); s += GetTlvStringSize(item->location);
s += GetTlvStringSize(item->version); s += GetTlvStringSize(item->version);
@ -733,8 +733,8 @@ bool RsDiscSerialiser::serialiseContact(RsDiscContactItem *item, void *data,
offset += 8; offset += 8;
/* add mandatory parts first */ /* add mandatory parts first */
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PGPID, item->pgpId); ok &= item->pgpId.serialise(data, tlvsize, offset) ;
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PEERID, item->sslId); ok &= item->sslId.serialise(data, tlvsize, offset) ;
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LOCATION, item->location); ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LOCATION, item->location);
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_VERSION, item->version); ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_VERSION, item->version);
@ -818,8 +818,8 @@ RsDiscContactItem *RsDiscSerialiser::deserialiseContact(void *data, uint32_t *pk
offset += 8; offset += 8;
/* get mandatory parts first */ /* get mandatory parts first */
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PGPID, item->pgpId); ok &= item->pgpId.deserialise(data, rssize, offset) ;
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PEERID, item->sslId); ok &= item->pgpId.deserialise(data, rssize, offset) ;
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->location); ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->location);
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_VERSION, item->version); ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_VERSION, item->version);

View file

@ -86,7 +86,7 @@ virtual ~RsDiscPgpCertItem();
virtual void clear(); virtual void clear();
virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); virtual std::ostream &print(std::ostream &out, uint16_t indent = 0);
std::string pgpId; PGPIdType pgpId;
std::string pgpCert; std::string pgpCert;
}; };
@ -106,8 +106,8 @@ virtual ~RsDiscContactItem();
virtual void clear(); virtual void clear();
virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); virtual std::ostream &print(std::ostream &out, uint16_t indent = 0);
std::string pgpId; PGPIdType pgpId;
std::string sslId; RsPeerId sslId;
// COMMON // COMMON
std::string location; std::string location;

View file

@ -143,9 +143,9 @@ bool p3BanList::recvBanItem(RsBanListItem *item)
} }
/* overloaded from pqiNetAssistSharePeer */ /* overloaded from pqiNetAssistSharePeer */
void p3BanList::updatePeer(std::string /*id*/, const struct sockaddr_storage &addr, int /*type*/, int /*reason*/, int age) void p3BanList::updatePeer(const RsPeerId& /*id*/, const struct sockaddr_storage &addr, int /*type*/, int /*reason*/, int age)
{ {
std::string ownId = mLinkMgr->getOwnId(); RsPeerId ownId = mLinkMgr->getOwnId();
int int_reason = 0; int int_reason = 0;
addBanEntry(ownId, addr, RSBANLIST_SOURCE_SELF, int_reason, age); addBanEntry(ownId, addr, RSBANLIST_SOURCE_SELF, int_reason, age);
@ -160,7 +160,7 @@ void p3BanList::updatePeer(std::string /*id*/, const struct sockaddr_storage &ad
} }
bool p3BanList::addBanEntry(const std::string &peerId, const struct sockaddr_storage &addr, int level, uint32_t reason, uint32_t age) bool p3BanList::addBanEntry(const RsPeerId &peerId, const struct sockaddr_storage &addr, int level, uint32_t reason, uint32_t age)
{ {
RsStackMutex stack(mBanMtx); /****** LOCKED MUTEX *******/ RsStackMutex stack(mBanMtx); /****** LOCKED MUTEX *******/
@ -184,7 +184,7 @@ bool p3BanList::addBanEntry(const std::string &peerId, const struct sockaddr_sto
} }
std::map<std::string, BanList>::iterator it; std::map<RsPeerId, BanList>::iterator it;
it = mBanSources.find(peerId); it = mBanSources.find(peerId);
if (it == mBanSources.end()) if (it == mBanSources.end())
{ {
@ -247,14 +247,14 @@ bool p3BanList::addBanEntry(const std::string &peerId, const struct sockaddr_sto
int p3BanList::condenseBanSources_locked() int p3BanList::condenseBanSources_locked()
{ {
time_t now = time(NULL); time_t now = time(NULL);
std::string ownId = mLinkMgr->getOwnId(); RsPeerId ownId = mLinkMgr->getOwnId();
#ifdef DEBUG_BANLIST #ifdef DEBUG_BANLIST
std::cerr << "p3BanList::condenseBanSources_locked()"; std::cerr << "p3BanList::condenseBanSources_locked()";
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
std::map<std::string, BanList>::const_iterator it; std::map<RsPeerId, BanList>::const_iterator it;
for(it = mBanSources.begin(); it != mBanSources.end(); it++) for(it = mBanSources.begin(); it != mBanSources.end(); it++)
{ {
if (now - it->second.mLastUpdate > RSBANLIST_ENTRY_MAX_AGE) if (now - it->second.mLastUpdate > RSBANLIST_ENTRY_MAX_AGE)
@ -385,7 +385,7 @@ void p3BanList::sendBanLists()
/* we ping our peers */ /* we ping our peers */
/* who is online? */ /* who is online? */
std::list<std::string> idList; std::list<RsPeerId> idList;
mLinkMgr->getOnlineList(idList); mLinkMgr->getOnlineList(idList);
@ -395,7 +395,7 @@ void p3BanList::sendBanLists()
#endif #endif
/* prepare packets */ /* prepare packets */
std::list<std::string>::iterator it; std::list<RsPeerId>::iterator it;
for(it = idList.begin(); it != idList.end(); it++) for(it = idList.begin(); it != idList.end(); it++)
{ {
#ifdef DEBUG_BANLIST #ifdef DEBUG_BANLIST
@ -408,7 +408,7 @@ void p3BanList::sendBanLists()
int p3BanList::sendBanSet(std::string peerid) int p3BanList::sendBanSet(const RsPeerId& peerid)
{ {
/* */ /* */
RsBanListItem *item = new RsBanListItem(); RsBanListItem *item = new RsBanListItem();
@ -471,7 +471,7 @@ int p3BanList::printBanSources_locked(std::ostream &out)
{ {
time_t now = time(NULL); time_t now = time(NULL);
std::map<std::string, BanList>::const_iterator it; std::map<RsPeerId, BanList>::const_iterator it;
for(it = mBanSources.begin(); it != mBanSources.end(); it++) for(it = mBanSources.begin(); it != mBanSources.end(); it++)
{ {
out << "BanList from: " << it->first; out << "BanList from: " << it->first;

View file

@ -92,12 +92,12 @@ int p3BandwidthControl::status()
bool p3BandwidthControl::checkAvailableBandwidth() bool p3BandwidthControl::checkAvailableBandwidth()
{ {
/* check each connection status */ /* check each connection status */
std::map<std::string, RsBwRates> rateMap; std::map<RsPeerId, RsBwRates> rateMap;
RsBwRates total; RsBwRates total;
mPg->ExtractRates(rateMap, total); mPg->ExtractRates(rateMap, total);
std::map<std::string, RsBwRates>::iterator it; std::map<RsPeerId, RsBwRates>::iterator it;
std::map<std::string, BwCtrlData>::iterator bit; std::map<RsPeerId, BwCtrlData>::iterator bit;
/* have to merge with existing list, /* have to merge with existing list,
* erasing as we go ... then any left have to deal with * erasing as we go ... then any left have to deal with
@ -107,7 +107,7 @@ bool p3BandwidthControl::checkAvailableBandwidth()
mTotalRates = total; mTotalRates = total;
time_t now = time(NULL); time_t now = time(NULL);
std::list<std::string> oldIds; // unused for now! std::list<RsPeerId> oldIds; // unused for now!
for(bit = mBwMap.begin(); bit != mBwMap.end(); bit++) for(bit = mBwMap.begin(); bit != mBwMap.end(); bit++)
{ {
@ -189,7 +189,7 @@ bool p3BandwidthControl::processIncoming()
/* For each packet */ /* For each packet */
RsStackMutex stack(mBwMtx); /****** LOCKED MUTEX *******/ RsStackMutex stack(mBwMtx); /****** LOCKED MUTEX *******/
std::map<std::string, BwCtrlData>::iterator bit; std::map<RsPeerId, BwCtrlData>::iterator bit;
bit = mBwMap.find(bci->PeerId()); bit = mBwMap.find(bci->PeerId());
if (bit == mBwMap.end()) if (bit == mBwMap.end())
@ -231,11 +231,11 @@ int p3BandwidthControl::getTotalBandwidthRates(RsConfigDataRates &rates)
return 1; return 1;
} }
int p3BandwidthControl::getAllBandwidthRates(std::map<std::string, RsConfigDataRates> &ratemap) int p3BandwidthControl::getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap)
{ {
RsStackMutex stack(mBwMtx); /****** LOCKED MUTEX *******/ RsStackMutex stack(mBwMtx); /****** LOCKED MUTEX *******/
std::map<std::string, BwCtrlData>::iterator bit; std::map<RsPeerId, BwCtrlData>::iterator bit;
for(bit = mBwMap.begin(); bit != mBwMap.end(); bit++) for(bit = mBwMap.begin(); bit != mBwMap.end(); bit++)
{ {
RsConfigDataRates rates; RsConfigDataRates rates;
@ -279,7 +279,7 @@ int p3BandwidthControl::printRateInfo_locked(std::ostream &out)
out << " MaxOut: " << mTotalRates.mMaxRateOut; out << " MaxOut: " << mTotalRates.mMaxRateOut;
out << std::endl; out << std::endl;
std::map<std::string, BwCtrlData>::iterator bit; std::map<RsPeerId, BwCtrlData>::iterator bit;
for(bit = mBwMap.begin(); bit != mBwMap.end(); bit++) for(bit = mBwMap.begin(); bit != mBwMap.end(); bit++)
{ {
out << "\t" << bit->first; out << "\t" << bit->first;
@ -305,7 +305,7 @@ void p3BandwidthControl::statusChange(const std::list<pqipeer> &plist)
if (it->actions & RS_PEER_DISCONNECTED) if (it->actions & RS_PEER_DISCONNECTED)
{ {
/* remove from map */ /* remove from map */
std::map<std::string, BwCtrlData>::iterator bit; std::map<RsPeerId, BwCtrlData>::iterator bit;
bit = mBwMap.find(it->id); bit = mBwMap.find(it->id);
if (bit == mBwMap.end()) if (bit == mBwMap.end())
{ {

View file

@ -88,7 +88,7 @@ class p3BandwidthControl: public p3Service, public pqiMonitor
/***** for RsConfig (not directly overloaded) ****/ /***** for RsConfig (not directly overloaded) ****/
virtual int getTotalBandwidthRates(RsConfigDataRates &rates); virtual int getTotalBandwidthRates(RsConfigDataRates &rates);
virtual int getAllBandwidthRates(std::map<std::string, RsConfigDataRates> &ratemap); virtual int getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap);
@ -121,7 +121,7 @@ class p3BandwidthControl: public p3Service, public pqiMonitor
time_t mLastCheck; time_t mLastCheck;
RsBwRates mTotalRates; RsBwRates mTotalRates;
std::map<std::string, BwCtrlData> mBwMap; std::map<RsPeerId, BwCtrlData> mBwMap;
}; };

View file

@ -255,7 +255,7 @@ int p3discovery2::handleIncoming()
{ {
recvOwnContactInfo(item->PeerId(), contact); recvOwnContactInfo(item->PeerId(), contact);
} }
else if (rsPeers->servicePermissionFlags_sslid(item->PeerId()) & RS_SERVICE_PERM_DISCOVERY) else if (rsPeers->servicePermissionFlags(item->PeerId()) & RS_SERVICE_PERM_DISCOVERY)
{ {
processContactInfo(item->PeerId(), contact); processContactInfo(item->PeerId(), contact);
} }
@ -268,7 +268,7 @@ int p3discovery2::handleIncoming()
} }
/* any other packets should be dropped if they don't have permission */ /* any other packets should be dropped if they don't have permission */
if(!(rsPeers->servicePermissionFlags_sslid(item->PeerId()) & RS_SERVICE_PERM_DISCOVERY)) if(!(rsPeers->servicePermissionFlags(item->PeerId()) & RS_SERVICE_PERM_DISCOVERY))
{ {
delete item; delete item;
continue; continue;
@ -773,7 +773,7 @@ void p3discovery2::sendContactInfo_locked(const PGPID &aboutId, const SSLID &toI
std::cerr << "p3discovery2::sendContactInfo_locked() aboutPGPId: " << aboutId << " toId: " << toId; std::cerr << "p3discovery2::sendContactInfo_locked() aboutPGPId: " << aboutId << " toId: " << toId;
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
if (!(rsPeers->servicePermissionFlags_sslid(toId) & RS_SERVICE_PERM_DISCOVERY)) if (!(rsPeers->servicePermissionFlags(toId) & RS_SERVICE_PERM_DISCOVERY))
{ {
#ifdef P3DISC_DEBUG #ifdef P3DISC_DEBUG
std::cerr << "p3discovery2::sendContactInfo_locked() discovery disabled for SSLID: " << toId; std::cerr << "p3discovery2::sendContactInfo_locked() discovery disabled for SSLID: " << toId;
@ -961,7 +961,7 @@ void p3discovery2::recvPGPCertificateRequest(const SSLID &fromId, const RsDiscPg
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
std::list<std::string>::const_iterator it; std::list<PGPIdType>::const_iterator it;
for(it = item->pgpIdSet.ids.begin(); it != item->pgpIdSet.ids.end(); it++) for(it = item->pgpIdSet.ids.begin(); it != item->pgpIdSet.ids.end(); it++)
{ {
// NB: This doesn't include own certificates? why not. // NB: This doesn't include own certificates? why not.
@ -1084,7 +1084,7 @@ void p3discovery2::statusChange(const std::list<pqipeer> &plist)
/*************************************************************************************/ /*************************************************************************************/
/* Extracting Network Graph Details */ /* Extracting Network Graph Details */
/*************************************************************************************/ /*************************************************************************************/
bool p3discovery2::getDiscFriends(const std::string& id, std::list<std::string> &proxyIds) bool p3discovery2::getDiscFriends(const RsPeerId& id, std::list<RsPeerId> &proxyIds)
{ {
// This is treated appart, because otherwise we don't receive any disc info about us // This is treated appart, because otherwise we don't receive any disc info about us
if(id == rsPeers->getOwnId()) // SSL id if(id == rsPeers->getOwnId()) // SSL id

View file

@ -41,8 +41,8 @@
typedef std::string PGPID; typedef PGPIdType PGPID;
typedef std::string SSLID; typedef SSLIdType SSLID;
class DiscSslInfo class DiscSslInfo
{ {
@ -88,9 +88,9 @@ virtual ~p3discovery2();
int tick(); int tick();
/* external interface */ /* external interface */
virtual bool getDiscFriends(const std::string &id, std::list<std::string> &friends); virtual bool getDiscFriends(const RsPeerId &id, std::list<RsPeerId> &friends);
virtual bool getDiscPgpFriends(const std::string &pgpid, std::list<std::string> &gpg_friends); virtual bool getDiscPgpFriends(const PGPIdType &pgpid, std::list<PGPIdType> &gpg_friends);
virtual bool getPeerVersion(const std::string &id, std::string &version); virtual bool getPeerVersion(const RsPeerId &id, std::string &version);
virtual bool getWaitingDiscCount(unsigned int *sendCount, unsigned int *recvCount); virtual bool getWaitingDiscCount(unsigned int *sendCount, unsigned int *recvCount);
/************* from AuthGPService ****************/ /************* from AuthGPService ****************/

View file

@ -90,8 +90,8 @@ p3MsgService::p3MsgService(p3LinkMgr *lm)
#ifdef GROUTER #ifdef GROUTER
// Debug stuff. Create a random key and register it. // Debug stuff. Create a random key and register it.
std::string own_ssl_id = rsPeers->getOwnId() ; const RsPeerId& own_ssl_id = rsPeers->getOwnId() ;
std::string gpg_id = rsPeers->getGPGOwnId() ; const PGPIdType& gpg_id = rsPeers->getGPGOwnId() ;
RsPeerDetails d; RsPeerDetails d;
rsPeers->getPeerDetails(gpg_id,d) ; rsPeers->getPeerDetails(gpg_id,d) ;
@ -276,6 +276,22 @@ void p3MsgService::checkSizeAndSendMessage(RsMsgItem *msg)
static const uint32_t MAX_STRING_SIZE = 15000 ; static const uint32_t MAX_STRING_SIZE = 15000 ;
std::cerr << "Msg is size " << msg->message.size() << std::endl; std::cerr << "Msg is size " << msg->message.size() << std::endl;
Sha1CheckSum hash ;
if( msg->msgFlags & RS_MSG_FLAGS_DISTANT )
{
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
#ifdef DEBUG_DISTANT_MSG
std::cerr << "checkOutgoingMessages(): removing pending message flag for hash " << (*it)->PeerId() << "." << std::endl;
#endif
if(!locked_findHashForVirtualPeerId(msg->PeerId(),hash))
{
std::cerr << "p3MsgService::checkSizeAndSendMessage(): Cannot find hash for virtual peer id " << msg->PeerId() << ". This is unexpected!" << std::endl;
return ;
}
_messenging_contacts[hash].pending_messages = false ;
}
while(msg->message.size() > MAX_STRING_SIZE) while(msg->message.size() > MAX_STRING_SIZE)
{ {
@ -295,7 +311,11 @@ void p3MsgService::checkSizeAndSendMessage(RsMsgItem *msg)
item->msgFlags |= RS_MSG_FLAGS_PARTIAL ; item->msgFlags |= RS_MSG_FLAGS_PARTIAL ;
if(msg->msgFlags & RS_MSG_FLAGS_DISTANT) if(msg->msgFlags & RS_MSG_FLAGS_DISTANT)
sendPrivateMsgItem(item) ; {
sendPrivateMsgItem(hash,item) ;
}
else else
sendItem(item) ; sendItem(item) ;
} }
@ -304,7 +324,7 @@ void p3MsgService::checkSizeAndSendMessage(RsMsgItem *msg)
#endif #endif
if(msg->msgFlags & RS_MSG_FLAGS_DISTANT) if(msg->msgFlags & RS_MSG_FLAGS_DISTANT)
sendPrivateMsgItem(msg) ; sendPrivateMsgItem(hash,msg) ;
else else
sendItem(msg) ; sendItem(msg) ;
} }
@ -344,29 +364,29 @@ int p3MsgService::checkOutgoingMessages()
#ifdef GROUTER #ifdef GROUTER
tunnel_is_ok = true ; tunnel_is_ok = true ;
#else #else
const RsPeerId& hash = mit->second->PeerId() ; // const RsPeerId& hash = mit->second->PeerId() ;
std::map<std::string,DistantMessengingContact>::iterator it = _messenging_contacts.find(hash) ; // std::map<Sha1CheckSum,DistantMessengingContact>::iterator it = _messenging_contacts.find(hash) ;
//
if(it != _messenging_contacts.end()) // if(it != _messenging_contacts.end())
{ // {
tunnel_is_ok = (it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_OK) ; // tunnel_is_ok = (it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_OK) ;
#ifdef DEBUG_DISTANT_MSG //#ifdef DEBUG_DISTANT_MSG
std::cerr << "checkOutGoingMessages(): distant contact found. tunnel_is_ok = " << tunnel_is_ok << std::endl; // std::cerr << "checkOutGoingMessages(): distant contact found. tunnel_is_ok = " << tunnel_is_ok << std::endl;
#endif //#endif
} // }
else // else
{ // {
#ifdef DEBUG_DISTANT_MSG //#ifdef DEBUG_DISTANT_MSG
std::cerr << "checkOutGoingMessages(): distant contact not found. Asking for tunnels for hash " << hash << std::endl; // std::cerr << "checkOutGoingMessages(): distant contact not found. Asking for tunnels for hash " << hash << std::endl;
#endif //#endif
// no. Ask for monitoring tunnels. // // no. Ask for monitoring tunnels.
rsTurtle->monitorTunnels(hash,this) ; // rsTurtle->monitorTunnels(hash,this) ;
tunnel_is_ok = false ; // tunnel_is_ok = false ;
//
DistantMessengingContact& contact( _messenging_contacts[hash] ) ; // DistantMessengingContact& contact( _messenging_contacts[hash] ) ;
contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ; // contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ;
contact.pending_messages = true ; // contact.pending_messages = true ;
} // }
#endif #endif
} }
@ -413,20 +433,8 @@ int p3MsgService::checkOutgoingMessages()
} }
for(std::list<RsMsgItem*>::const_iterator it(output_queue.begin());it!=output_queue.end();++it) for(std::list<RsMsgItem*>::const_iterator it(output_queue.begin());it!=output_queue.end();++it)
{
checkSizeAndSendMessage(*it) ; checkSizeAndSendMessage(*it) ;
if( (*it)->msgFlags & RS_MSG_FLAGS_DISTANT )
{
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
_messenging_contacts[(*it)->PeerId()].pending_messages = false ;
#ifdef DEBUG_DISTANT_MSG
std::cerr << "checkOutgoingMessages(): removing pending message flag for hash " << (*it)->PeerId() << "." << std::endl;
#endif
}
}
if(changed) if(changed)
RsServer::notify()->notifyListChange(NOTIFY_LIST_MESSAGELIST,NOTIFY_TYPE_MOD); RsServer::notify()->notifyListChange(NOTIFY_LIST_MESSAGELIST,NOTIFY_TYPE_MOD);
@ -467,14 +475,14 @@ bool p3MsgService::saveList(bool& cleanup, std::list<RsItem*>& itemList)
for(mit4 = mParentId.begin(); mit4 != mParentId.end(); mit4++) for(mit4 = mParentId.begin(); mit4 != mParentId.end(); mit4++)
itemList.push_back(mit4->second); itemList.push_back(mit4->second);
for(std::map<std::string,DistantMessengingInvite>::const_iterator it(_messenging_invites.begin());it!=_messenging_invites.end();++it) // for(std::map<Sha1CheckSum,DistantMessengingInvite>::const_iterator it(_messenging_invites.begin());it!=_messenging_invites.end();++it)
{ // {
RsPublicMsgInviteConfigItem *item = new RsPublicMsgInviteConfigItem ; // RsPublicMsgInviteConfigItem *item = new RsPublicMsgInviteConfigItem ;
item->hash = it->first ; // item->hash = it->first ;
item->time_stamp = it->second.time_of_validity ; // item->time_stamp = it->second.time_of_validity ;
//
itemList.push_back(item) ; // itemList.push_back(item) ;
} // }
RsConfigKeyValueSet *vitem = new RsConfigKeyValueSet ; RsConfigKeyValueSet *vitem = new RsConfigKeyValueSet ;
RsTlvKeyValue kv; RsTlvKeyValue kv;
kv.key = "DISTANT_MESSAGES_ENABLED" ; kv.key = "DISTANT_MESSAGES_ENABLED" ;
@ -550,7 +558,7 @@ bool p3MsgService::loadList(std::list<RsItem*>& load)
RsMsgTags* mti; RsMsgTags* mti;
RsMsgSrcId* msi; RsMsgSrcId* msi;
RsMsgParentId* msp; RsMsgParentId* msp;
RsPublicMsgInviteConfigItem* msv; // RsPublicMsgInviteConfigItem* msv;
std::list<RsMsgItem*> items; std::list<RsMsgItem*> items;
std::list<RsItem*>::iterator it; std::list<RsItem*>::iterator it;
@ -600,10 +608,10 @@ bool p3MsgService::loadList(std::list<RsItem*>& load)
{ {
mParentId.insert(std::pair<uint32_t, RsMsgParentId*>(msp->msgId, msp)); mParentId.insert(std::pair<uint32_t, RsMsgParentId*>(msp->msgId, msp));
} }
else if(NULL != (msv = dynamic_cast<RsPublicMsgInviteConfigItem *>(*it))) // else if(NULL != (msv = dynamic_cast<RsPublicMsgInviteConfigItem *>(*it)))
{ // {
_messenging_invites[msv->hash].time_of_validity = msv->time_stamp ; // _messenging_invites[msv->hash].time_of_validity = msv->time_stamp ;
} // }
RsConfigKeyValueSet *vitem = NULL ; RsConfigKeyValueSet *vitem = NULL ;
@ -1082,16 +1090,16 @@ bool p3MsgService::MessageSend(MessageInfo &info)
RsMsgItem *msg = initMIRsMsg(info, mLinkMgr->getOwnId()); RsMsgItem *msg = initMIRsMsg(info, mLinkMgr->getOwnId());
if (msg) if (msg)
{ {
std::list<RsPeerId>::iterator it ; std::list<PGPIdType>::iterator it ;
// Update destination ids in place of distant message hash, since this Outgoing message is for display // Update destination ids in place of distant message hash, since this Outgoing message is for display
// //
for(it = msg->msgbcc.ids.begin(); it != msg->msgbcc.ids.end(); it++) // for(it = msg->msgbcc.ids.begin(); it != msg->msgbcc.ids.end(); it++)
if(info.encryption_keys.find(*it) != info.encryption_keys.end()) *it = info.encryption_keys[*it] ; // if(info.encryption_keys.find(*it) != info.encryption_keys.end()) *it = info.encryption_keys[*it] ;
for(it = msg->msgcc.ids.begin(); it != msg->msgcc.ids.end(); it++) // for(it = msg->msgcc.ids.begin(); it != msg->msgcc.ids.end(); it++)
if(info.encryption_keys.find(*it) != info.encryption_keys.end()) *it = info.encryption_keys[*it] ; // if(info.encryption_keys.find(*it) != info.encryption_keys.end()) *it = info.encryption_keys[*it] ;
for(it = msg->msgto.ids.begin(); it != msg->msgto.ids.end(); it++) // for(it = msg->msgto.ids.begin(); it != msg->msgto.ids.end(); it++)
if(info.encryption_keys.find(*it) != info.encryption_keys.end()) *it = info.encryption_keys[*it] ; // if(info.encryption_keys.find(*it) != info.encryption_keys.end()) *it = info.encryption_keys[*it] ;
if (msg->msgFlags & RS_MSG_FLAGS_SIGNED) if (msg->msgFlags & RS_MSG_FLAGS_SIGNED)
msg->msgFlags |= RS_MSG_FLAGS_SIGNATURE_CHECKS; // this is always true, since we are sending the message msg->msgFlags |= RS_MSG_FLAGS_SIGNATURE_CHECKS; // this is always true, since we are sending the message
@ -1774,15 +1782,17 @@ RsMsgItem *p3MsgService::initMIRsMsg(MessageInfo &info, const RsPeerId &to)
// all its content. // all its content.
// //
if(info.encryption_keys.find(to) != info.encryption_keys.end()) if(!info.encryption_keys.empty())
encryptMessage(info.encryption_keys[to],msg) ; std::cerr << "(WW) Cannot encrypt message. Code needs to be improved." << std::endl;
// if(info.encryption_keys.find(to) != info.encryption_keys.end())
// encryptMessage(info.encryption_keys[to],msg) ;
//std::cerr << "p3MsgService::initMIRsMsg()" << std::endl; //std::cerr << "p3MsgService::initMIRsMsg()" << std::endl;
//msg->print(std::cerr); //msg->print(std::cerr);
return msg; return msg;
} }
bool p3MsgService::encryptMessage(const std::string& pgp_id,RsMsgItem *item) bool p3MsgService::encryptMessage(const PGPIdType& pgp_id,RsMsgItem *item)
{ {
#ifdef DEBUG_DISTANT_MSG #ifdef DEBUG_DISTANT_MSG
std::cerr << "Encrypting message with public key " << pgp_id << " in place." << std::endl; std::cerr << "Encrypting message with public key " << pgp_id << " in place." << std::endl;
@ -2009,7 +2019,7 @@ bool p3MsgService::decryptMessage(const std::string& mId)
std::cerr << " Fingerprint = " << fingerprint.toStdString() << std::endl; std::cerr << " Fingerprint = " << fingerprint.toStdString() << std::endl;
signature_present = true ; signature_present = true ;
signature_ok = AuthGPG::getAuthGPG()->VerifySignBin(decrypted_data, 1+PGP_KEY_ID_SIZE+item_size, &decrypted_data[1+PGP_KEY_ID_SIZE+item_size], decrypted_size - PGP_KEY_ID_SIZE - item_size - 1, fingerprint.toStdString()) ; signature_ok = AuthGPG::getAuthGPG()->VerifySignBin(decrypted_data, 1+PGP_KEY_ID_SIZE+item_size, &decrypted_data[1+PGP_KEY_ID_SIZE+item_size], decrypted_size - PGP_KEY_ID_SIZE - item_size - 1, fingerprint) ;
} }
else if(1 + item_size + PGP_KEY_ID_SIZE == decrypted_size) else if(1 + item_size + PGP_KEY_ID_SIZE == decrypted_size)
std::cerr << " No signature in this packet" << std::endl; std::cerr << " No signature in this packet" << std::endl;
@ -2027,7 +2037,7 @@ bool p3MsgService::decryptMessage(const std::string& mId)
std::cerr << " Decrypted message was succesfully deserialized. New message:" << std::endl; std::cerr << " Decrypted message was succesfully deserialized. New message:" << std::endl;
item->print(std::cerr,0) ; item->print(std::cerr,0) ;
#endif #endif
std::string own_hash ; Sha1CheckSum own_hash ;
const PGPIdType& own_pgp_id = AuthGPG::getAuthGPG()->getGPGOwnId(); const PGPIdType& own_pgp_id = AuthGPG::getAuthGPG()->getGPGOwnId();
getDistantMessageHash(own_pgp_id,own_hash) ; getDistantMessageHash(own_pgp_id,own_hash) ;
@ -2041,11 +2051,12 @@ bool p3MsgService::decryptMessage(const std::string& mId)
msgi.msgId = msgId ; // restore the correct message id, to make it consistent msgi.msgId = msgId ; // restore the correct message id, to make it consistent
msgi.msgFlags &= ~RS_MSG_FLAGS_ENCRYPTED ; // just in case. msgi.msgFlags &= ~RS_MSG_FLAGS_ENCRYPTED ; // just in case.
msgi.msgFlags |= RS_MSG_FLAGS_DECRYPTED ; // previousy encrypted msg is now decrypted msgi.msgFlags |= RS_MSG_FLAGS_DECRYPTED ; // previousy encrypted msg is now decrypted
msgi.PeerId(senders_id.toStdString()) ;
for(std::list<RsPeerId>::iterator it(msgi.msgto.ids.begin());it!=msgi.msgto.ids.end();++it) if(*it == own_hash) *it = own_pgp_id ; // NEEDS TO BE DONE
for(std::list<RsPeerId>::iterator it(msgi.msgcc.ids.begin());it!=msgi.msgcc.ids.end();++it) if(*it == own_hash) *it = own_pgp_id ; // msgi.PeerId(senders_id) ;
for(std::list<RsPeerId>::iterator it(msgi.msgbcc.ids.begin());it!=msgi.msgbcc.ids.end();++it) if(*it == own_hash) *it = own_pgp_id ; // for(std::list<RsPeerId>::iterator it(msgi.msgto.ids.begin());it!=msgi.msgto.ids.end();++it) if(*it == own_hash) *it = own_pgp_id ;
// for(std::list<RsPeerId>::iterator it(msgi.msgcc.ids.begin());it!=msgi.msgcc.ids.end();++it) if(*it == own_hash) *it = own_pgp_id ;
// for(std::list<RsPeerId>::iterator it(msgi.msgbcc.ids.begin());it!=msgi.msgbcc.ids.end();++it) if(*it == own_hash) *it = own_pgp_id ;
if(signature_present) if(signature_present)
{ {
@ -2065,14 +2076,16 @@ bool p3MsgService::decryptMessage(const std::string& mId)
RsMsgSrcId* msi = new RsMsgSrcId(); RsMsgSrcId* msi = new RsMsgSrcId();
msi->msgId = msgi.msgId; msi->msgId = msgi.msgId;
msi->srcId = senders_id ; // NEEDS TO BE DONE
// msi->srcId = senders_id ;
mSrcIds.insert(std::pair<uint32_t, RsMsgSrcId*>(msi->msgId, msi)); mSrcIds.insert(std::pair<uint32_t, RsMsgSrcId*>(msi->msgId, msi));
} }
else else
{ {
std::cerr << "Substituting source name for message id " << msgi.msgId << ": " << it->second->srcId << " -> " << senders_id << std::endl; std::cerr << "Substituting source name for message id " << msgi.msgId << ": " << it->second->srcId << " -> " << senders_id << std::endl;
it->second->srcId = senders_id ; // NEEDS TO BE DONE
//it->second->srcId = senders_id ;
} }
} }
delete item ; delete item ;
@ -2098,17 +2111,14 @@ void p3MsgService::connectToTurtleRouter(p3turtle *pt)
bool p3MsgService::createDistantOfflineMessengingInvite(time_t time_of_validity,TurtleFileHash& hash) bool p3MsgService::createDistantOfflineMessengingInvite(time_t time_of_validity,TurtleFileHash& hash)
{ {
unsigned char hash_bytes[DISTANT_MSG_HASH_SIZE] ; hash = Sha1CheckSum::random().toStdString() ;
RSRandom::random_bytes( hash_bytes, DISTANT_MSG_HASH_SIZE) ;
hash = Sha1CheckSum(hash_bytes).toStdString() ;
DistantMessengingInvite invite ; DistantMessengingInvite invite ;
invite.time_of_validity = time_of_validity + time(NULL); invite.time_of_validity = time_of_validity + time(NULL);
{ {
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/ RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
_messenging_invites[hash] = invite ; _messenging_invites[Sha1CheckSum(hash)] = invite ;
} }
IndicateConfigChanged() ; IndicateConfigChanged() ;
@ -2119,7 +2129,7 @@ void p3MsgService::enableDistantMessaging(bool b)
{ {
// compute the hash // compute the hash
std::string hash ; Sha1CheckSum hash ;
if(!getDistantMessageHash(AuthGPG::getAuthGPG()->getGPGOwnId(),hash)) if(!getDistantMessageHash(AuthGPG::getAuthGPG()->getGPGOwnId(),hash))
return ; return ;
@ -2132,7 +2142,7 @@ void p3MsgService::enableDistantMessaging(bool b)
{ {
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/ RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
std::map<std::string,DistantMessengingInvite>::iterator it = _messenging_invites.find(hash) ; std::map<Sha1CheckSum,DistantMessengingInvite>::iterator it = _messenging_invites.find(hash) ;
if(b && it == _messenging_invites.end()) if(b && it == _messenging_invites.end())
{ {
@ -2144,8 +2154,8 @@ void p3MsgService::enableDistantMessaging(bool b)
std::cerr << "Notifying the global router." << std::endl; std::cerr << "Notifying the global router." << std::endl;
// Debug stuff. Create a random key and register it. // Debug stuff. Create a random key and register it.
std::string own_ssl_id = rsPeers->getOwnId() ; const RsPeerId& own_ssl_id = rsPeers->getOwnId() ;
std::string gpg_id = rsPeers->getGPGOwnId() ; const PGPIdType& gpg_id = rsPeers->getGPGOwnId() ;
RsPeerDetails d; RsPeerDetails d;
rsPeers->getPeerDetails(gpg_id,d) ; rsPeers->getPeerDetails(gpg_id,d) ;
@ -2178,7 +2188,7 @@ void p3MsgService::enableDistantMessaging(bool b)
#ifdef DEBUG_DISTANT_MSG #ifdef DEBUG_DISTANT_MSG
std::cerr << "List of distant message invites: " << std::endl; std::cerr << "List of distant message invites: " << std::endl;
for(std::map<std::string,DistantMessengingInvite>::const_iterator it(_messenging_invites.begin());it!=_messenging_invites.end();++it) for(std::map<Sha1CheckSum,DistantMessengingInvite>::const_iterator it(_messenging_invites.begin());it!=_messenging_invites.end();++it)
std::cerr << " hash = " << it->first << std::endl; std::cerr << " hash = " << it->first << std::endl;
#endif #endif
} }
@ -2186,7 +2196,7 @@ bool p3MsgService::distantMessagingEnabled()
{ {
// compute the hash // compute the hash
std::string hash ; Sha1CheckSum hash ;
if(!getDistantMessageHash(AuthGPG::getAuthGPG()->getGPGOwnId(),hash)) if(!getDistantMessageHash(AuthGPG::getAuthGPG()->getGPGOwnId(),hash))
return false; return false;
@ -2200,13 +2210,7 @@ bool p3MsgService::distantMessagingEnabled()
} }
bool p3MsgService::getDistantMessageHash(const PGPIdType& pgp_id,Sha1CheckSum& hash) bool p3MsgService::getDistantMessageHash(const PGPIdType& pgp_id,Sha1CheckSum& hash)
{ {
if(pgp_id.length() != 16) hash = RsDirUtil::sha1sum((uint8_t*)pgp_id.toByteArray(),PGPIdType::SIZE_IN_BYTES);
{
std::cerr << "pgp id \"" << pgp_id << "\" is not valid! Something definitly wrong." << std::endl;
return false;
}
hash = RsDirUtil::sha1sum((uint8_t*)pgp_id.c_str(),16).toStdString() ;
// Also check that we have the public key. // Also check that we have the public key.
@ -2217,7 +2221,7 @@ bool p3MsgService::getDistantOfflineMessengingInvites(std::vector<DistantOffline
{ {
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/ RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
for(std::map<std::string,DistantMessengingInvite>::const_iterator it(_messenging_invites.begin());it!=_messenging_invites.end();++it) for(std::map<Sha1CheckSum,DistantMessengingInvite>::const_iterator it(_messenging_invites.begin());it!=_messenging_invites.end();++it)
{ {
DistantOfflineMessengingInvite invite ; DistantOfflineMessengingInvite invite ;
invite.hash = it->first ; invite.hash = it->first ;
@ -2263,13 +2267,13 @@ void p3MsgService::manageDistantPeers()
// clean dead invites. // clean dead invites.
// //
for(std::map<std::string,DistantMessengingInvite>::iterator it(_messenging_invites.begin());it!=_messenging_invites.end();) for(std::map<Sha1CheckSum,DistantMessengingInvite>::iterator it(_messenging_invites.begin());it!=_messenging_invites.end();)
if(it->second.time_of_validity < now) if(it->second.time_of_validity < now)
{ {
#ifdef DEBUG_DISTANT_MSG #ifdef DEBUG_DISTANT_MSG
std::cerr << " Removing outdated invite " << it->second.time_of_validity << ", hash=" << it->first << std::endl; std::cerr << " Removing outdated invite " << it->second.time_of_validity << ", hash=" << it->first << std::endl;
#endif #endif
std::map<std::string,DistantMessengingInvite>::iterator tmp(it) ; std::map<Sha1CheckSum,DistantMessengingInvite>::iterator tmp(it) ;
++tmp ; ++tmp ;
_messenging_invites.erase(it) ; _messenging_invites.erase(it) ;
it = tmp ; it = tmp ;
@ -2277,68 +2281,68 @@ void p3MsgService::manageDistantPeers()
else else
++it ; ++it ;
// clean dead contacts. // // clean dead contacts.
// // //
for(std::map<std::string,DistantMessengingContact>::iterator it(_messenging_contacts.begin());it!=_messenging_contacts.end();) // for(std::map<Sha1CheckSum,DistantMessengingContact>::iterator it(_messenging_contacts.begin());it!=_messenging_contacts.end();)
if((!it->second.pending_messages) && it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_DN) // if((!it->second.pending_messages) && it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_DN)
{ // {
#ifdef DEBUG_DISTANT_MSG //#ifdef DEBUG_DISTANT_MSG
std::cerr << " Removing dead contact with no pending msgs and dead tunnel. hash=" << it->first << std::endl; // std::cerr << " Removing dead contact with no pending msgs and dead tunnel. hash=" << it->first << std::endl;
#endif //#endif
std::map<std::string,DistantMessengingContact>::iterator tmp(it) ; // std::map<Sha1CheckSum,DistantMessengingContact>::iterator tmp(it) ;
++tmp ; // ++tmp ;
_messenging_contacts.erase(it) ; // _messenging_contacts.erase(it) ;
it = tmp ; // it = tmp ;
} // }
else // else
++it ; // ++it ;
} }
} }
void p3MsgService::addVirtualPeer(const TurtleFileHash& hash, const TurtleVirtualPeerId& vpid,RsTurtleGenericTunnelItem::Direction /*dir*/) // void p3MsgService::addVirtualPeer(const TurtleFileHash& hash, const TurtleVirtualPeerId& vpid,RsTurtleGenericTunnelItem::Direction /*dir*/)
{ // {
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/ // RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
// A new tunnel has been created. We need to flush pending messages for the corresponding peer. // // A new tunnel has been created. We need to flush pending messages for the corresponding peer.
//
//std::map<std::string,DistantMessengingContact>::const_iterator it = _messenging_contacts.find(hash) ; // //std::map<Sha1CheckSum,DistantMessengingContact>::const_iterator it = _messenging_contacts.find(hash) ;
//
DistantMessengingContact& contact(_messenging_contacts[hash]) ; // possibly creates it. // DistantMessengingContact& contact(_messenging_contacts[hash]) ; // possibly creates it.
//
contact.virtual_peer_id = vpid ; // contact.virtual_peer_id = vpid ;
contact.last_hit_time = time(NULL) ; // contact.last_hit_time = time(NULL) ;
contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_OK ; // contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_OK ;
//
#ifdef DEBUG_DISTANT_MSG // #ifdef DEBUG_DISTANT_MSG
std::cerr << "p3MsgService::addVirtualPeer(): adding virtual peer " << vpid << " for hash " << hash << std::endl; // std::cerr << "p3MsgService::addVirtualPeer(): adding virtual peer " << vpid << " for hash " << hash << std::endl;
#endif // #endif
} // }
void p3MsgService::removeVirtualPeer(const TurtleFileHash& hash, const TurtleVirtualPeerId& vpid) // void p3MsgService::removeVirtualPeer(const TurtleFileHash& hash, const TurtleVirtualPeerId& vpid)
{ // {
#ifdef DEBUG_DISTANT_MSG // #ifdef DEBUG_DISTANT_MSG
std::cerr << "Removing virtual peer " << vpid << " for hash " << hash << std::endl; // std::cerr << "Removing virtual peer " << vpid << " for hash " << hash << std::endl;
#endif // #endif
//
bool remove_tunnel = false ; // bool remove_tunnel = false ;
{ // {
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/ // RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
//
DistantMessengingContact& contact(_messenging_contacts[hash]) ; // possibly creates it. // DistantMessengingContact& contact(_messenging_contacts[hash]) ; // possibly creates it.
//
contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ; // contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ;
contact.virtual_peer_id.clear() ; // contact.virtual_peer_id.clear() ;
//
if(!contact.pending_messages) // if(!contact.pending_messages)
remove_tunnel = true ; // remove_tunnel = true ;
} // }
//
if(remove_tunnel) // We do that whenever we're client or server. But normally, we should only do it when we're client. // if(remove_tunnel) // We do that whenever we're client or server. But normally, we should only do it when we're client.
{ // {
#ifdef DEBUG_DISTANT_MSG // #ifdef DEBUG_DISTANT_MSG
std::cerr << "Also removing tunnel, since pending messages have been sent." << std::endl; // std::cerr << "Also removing tunnel, since pending messages have been sent." << std::endl;
#endif // #endif
mTurtle->stopMonitoringTunnels(hash) ; // mTurtle->stopMonitoringTunnels(hash) ;
} // }
} // }
#ifdef DEBUG_DISTANT_MSG #ifdef DEBUG_DISTANT_MSG
static void printBinaryData(void *data,uint32_t size) static void printBinaryData(void *data,uint32_t size)
@ -2353,7 +2357,7 @@ static void printBinaryData(void *data,uint32_t size)
} }
#endif #endif
void p3MsgService::sendTurtleData(const std::string& hash,RsMsgItem *msgitem) void p3MsgService::sendTurtleData(const Sha1CheckSum& hash,RsMsgItem *msgitem)
{ {
// The item is serialized and turned into a generic turtle item. // The item is serialized and turned into a generic turtle item.
@ -2386,7 +2390,7 @@ void p3MsgService::sendTurtleData(const std::string& hash,RsMsgItem *msgitem)
RsPeerId virtual_peer_id ; RsPeerId virtual_peer_id ;
{ {
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/ RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
std::map<std::string,DistantMessengingContact>::const_iterator it = _messenging_contacts.find(hash) ; std::map<Sha1CheckSum,DistantMessengingContact>::const_iterator it = _messenging_contacts.find(hash) ;
if(it == _messenging_contacts.end()) if(it == _messenging_contacts.end())
{ {
@ -2410,63 +2414,63 @@ void p3MsgService::sendTurtleData(const std::string& hash,RsMsgItem *msgitem)
mTurtle->sendTurtleData(virtual_peer_id,item) ; mTurtle->sendTurtleData(virtual_peer_id,item) ;
} }
void p3MsgService::receiveTurtleData(RsTurtleGenericTunnelItem *gitem,const std::string& hash, //void p3MsgService::receiveTurtleData(RsTurtleGenericTunnelItem *gitem,const Sha1CheckSum& hash,
const std::string& virtual_peer_id,RsTurtleGenericTunnelItem::Direction /*direction*/) // const RsPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction /*direction*/)
{ //{
RsTurtleGenericDataItem *item = dynamic_cast<RsTurtleGenericDataItem*>(gitem) ; // RsTurtleGenericDataItem *item = dynamic_cast<RsTurtleGenericDataItem*>(gitem) ;
//
if(item == NULL) // if(item == NULL)
{ // {
std::cerr << "(EE) p3MsgService::receiveTurtleData(): item is not a data item. That is an error." << std::endl; // std::cerr << "(EE) p3MsgService::receiveTurtleData(): item is not a data item. That is an error." << std::endl;
return ; // return ;
} // }
#ifdef DISABLE_DISTANT_MESSAGES //#ifdef DISABLE_DISTANT_MESSAGES
std::cerr << "Received distant message item. Protocol is not yet finalized. Droping the item." << std::endl; // std::cerr << "Received distant message item. Protocol is not yet finalized. Droping the item." << std::endl;
delete item ; // delete item ;
return ; // return ;
#endif //#endif
//
#ifdef DEBUG_DISTANT_MSG //#ifdef DEBUG_DISTANT_MSG
std::cerr << "p3MsgService::sendTurtleData(): Receiving through virtual peer: " << virtual_peer_id << std::endl; // std::cerr << "p3MsgService::sendTurtleData(): Receiving through virtual peer: " << virtual_peer_id << std::endl;
std::cerr << " gitem->data_size = " << item->data_size << std::endl; // std::cerr << " gitem->data_size = " << item->data_size << std::endl;
std::cerr << " data = " ; // std::cerr << " data = " ;
printBinaryData(item->data_bytes,item->data_size) ; // printBinaryData(item->data_bytes,item->data_size) ;
std::cerr << std::endl; // std::cerr << std::endl;
#else //#else
(void) virtual_peer_id; // (void) virtual_peer_id;
#endif //#endif
//
{ // {
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/ // RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
std::map<std::string,DistantMessengingContact>::iterator it = _messenging_contacts.find(hash) ; // std::map<Sha1CheckSum,DistantMessengingContact>::iterator it = _messenging_contacts.find(hash) ;
//
if(it == _messenging_contacts.end()) // if(it == _messenging_contacts.end())
{ // {
std::cerr << "(EE) p3MsgService::sendTurtleData(): Can't find hash " << hash << " in recorded contact list." << std::endl; // std::cerr << "(EE) p3MsgService::sendTurtleData(): Can't find hash " << hash << " in recorded contact list." << std::endl;
return ; // return ;
} // }
//
it->second.status = RS_DISTANT_MSG_STATUS_TUNNEL_OK ; // it->second.status = RS_DISTANT_MSG_STATUS_TUNNEL_OK ;
it->second.last_hit_time = time(NULL) ; // it->second.last_hit_time = time(NULL) ;
} // }
//
RsItem *itm = _serialiser->deserialise(item->data_bytes,&item->data_size) ; // RsItem *itm = _serialiser->deserialise(item->data_bytes,&item->data_size) ;
RsMsgItem *mitm = dynamic_cast<RsMsgItem*>(itm) ; // RsMsgItem *mitm = dynamic_cast<RsMsgItem*>(itm) ;
//
if(mitm != NULL) // if(mitm != NULL)
{ // {
mitm->PeerId(hash) ; // mitm->PeerId(hash) ;
mitm->msgto.ids.push_back(rsPeers->getGPGOwnId()) ; // mitm->msgto.ids.push_back(rsPeers->getGPGOwnId()) ;
handleIncomingItem(mitm) ; // handleIncomingItem(mitm) ;
} // }
else // else
{ // {
std::cerr << "(EE) p3MsgService::receiveTurtleData(): received item is not a RsMsgItem!!" << std::endl; // std::cerr << "(EE) p3MsgService::receiveTurtleData(): received item is not a RsMsgItem!!" << std::endl;
delete itm ; // delete itm ;
} // }
} //}
#ifdef GROUTER #ifdef GROUTER
void p3MsgService::sendGRouterData(const std::string& hash,RsMsgItem *msgitem) void p3MsgService::sendGRouterData(const Sha1CheckSum& hash,RsMsgItem *msgitem)
{ {
// The item is serialized and turned into a generic turtle item. // The item is serialized and turned into a generic turtle item.
@ -2496,7 +2500,18 @@ void p3MsgService::receiveGRouterData(RsGRouterGenericDataItem *gitem,const GRou
} }
#endif #endif
void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem) bool p3MsgService::locked_findHashForVirtualPeerId(const RsPeerId& vpid,Sha1CheckSum& hash)
{
for(std::map<Sha1CheckSum,DistantMessengingContact>::const_iterator it = _messenging_contacts.begin(); it!=_messenging_contacts.end();++it)
if(it->second.virtual_peer_id == vpid)
{
hash = it->first ;
return true ;
}
return false ;
}
void p3MsgService::sendPrivateMsgItem(const Sha1CheckSum& hash,RsMsgItem *msgitem)
{ {
#ifdef DEBUG_DISTANT_MSG #ifdef DEBUG_DISTANT_MSG
std::cerr << "p3MsgService::sendDistanteMsgItem(): sending distant msg item to peer " << msgitem->PeerId() << std::endl; std::cerr << "p3MsgService::sendDistanteMsgItem(): sending distant msg item to peer " << msgitem->PeerId() << std::endl;
@ -2506,7 +2521,7 @@ void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
// allocate a new contact. If it does not exist, set its tunnel state to DN // allocate a new contact. If it does not exist, set its tunnel state to DN
// //
std::map<std::string,DistantMessengingContact>::iterator it = _messenging_contacts.find(msgitem->PeerId()) ; std::map<Sha1CheckSum,DistantMessengingContact>::iterator it = _messenging_contacts.find(hash) ;
if(it == _messenging_contacts.end()) if(it == _messenging_contacts.end())
{ {
@ -2528,9 +2543,9 @@ void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
std::cerr << " Flushing msg " << msgitem->msgId << " for peer id " << msgitem->PeerId() << std::endl; std::cerr << " Flushing msg " << msgitem->msgId << " for peer id " << msgitem->PeerId() << std::endl;
#endif #endif
#ifdef GROUTER #ifdef GROUTER
sendGRouterData(msgitem->PeerId(),msgitem) ; sendGRouterData(hash,msgitem) ;
#else #else
sendTurtleData(msgitem->PeerId(),msgitem) ; sendTurtleData(hash,msgitem) ;
#endif #endif
} }

View file

@ -134,16 +134,16 @@ int checkOutgoingMessages();
bool distantMessagingEnabled() ; bool distantMessagingEnabled() ;
bool getDistantMessageHash(const PGPIdType& pgp_id,Sha1CheckSum &hash) ; bool getDistantMessageHash(const PGPIdType& pgp_id,Sha1CheckSum &hash) ;
void sendPrivateMsgItem(RsMsgItem *) ;
private: private:
void sendPrivateMsgItem(const Sha1CheckSum& hash,RsMsgItem *) ;
// This maps contains the current invitations to respond to. // This maps contains the current invitations to respond to.
// The map is indexed by the hash // The map is indexed by the hash
std::map<std::string,DistantMessengingInvite> _messenging_invites ; std::map<Sha1CheckSum,DistantMessengingInvite> _messenging_invites ;
// This contains the ongoing tunnel handling contacts. // This contains the ongoing tunnel handling contacts.
// The map is indexed by the hash // The map is indexed by the hash
std::map<std::string,DistantMessengingContact> _messenging_contacts ; std::map<Sha1CheckSum,DistantMessengingContact> _messenging_contacts ;
// Overloaded from RsTurtleClientService // Overloaded from RsTurtleClientService
@ -151,18 +151,19 @@ int checkOutgoingMessages();
virtual void receiveGRouterData(RsGRouterGenericDataItem *item, const GRouterKeyId& key) ; virtual void receiveGRouterData(RsGRouterGenericDataItem *item, const GRouterKeyId& key) ;
#endif #endif
virtual bool handleTunnelRequest(const Sha1CheckSum& hash,const RsPeerId& peer_id) ; virtual bool handleTunnelRequest(const Sha1CheckSum& hash,const RsPeerId& peer_id) ;
virtual void receiveTurtleData(RsTurtleGenericTunnelItem *item,const std::string& hash,const RsPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction direction) ; virtual void receiveTurtleData(RsTurtleGenericTunnelItem *item,const Sha1CheckSum& hash,const RsPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction direction) ;
void addVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&,RsTurtleGenericTunnelItem::Direction dir) ; void addVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&,RsTurtleGenericTunnelItem::Direction dir) ;
void removeVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&) ; void removeVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&) ;
// Utility functions // Utility functions
bool encryptMessage(const PGPIdType& pgp_id,RsMsgItem *msg) ; bool encryptMessage(const PGPIdType& pgp_id,RsMsgItem *msg) ;
bool locked_findHashForVirtualPeerId(const RsPeerId& pid,Sha1CheckSum& hash) ;
void manageDistantPeers() ; void manageDistantPeers() ;
void sendTurtleData(const std::string& hash,RsMsgItem *) ; void sendTurtleData(const Sha1CheckSum& hash,RsMsgItem *) ;
#ifdef GROUTER #ifdef GROUTER
void sendGRouterData(const std::string& hash,RsMsgItem *) ; void sendGRouterData(const Sha1CheckSum& hash,RsMsgItem *) ;
#endif #endif
void handleIncomingItem(RsMsgItem *) ; void handleIncomingItem(RsMsgItem *) ;

View file

@ -64,8 +64,8 @@ bool p3StatusService::getOwnStatus(StatusInfo& statusInfo)
std::cerr << "p3StatusService::getOwnStatus() " << std::endl; std::cerr << "p3StatusService::getOwnStatus() " << std::endl;
#endif #endif
std::map<std::string, StatusInfo>::iterator it; std::map<RsPeerId, StatusInfo>::iterator it;
std::string ownId = mLinkMgr->getOwnId(); const RsPeerId& ownId = mLinkMgr->getOwnId();
RsStackMutex stack(mStatusMtx); RsStackMutex stack(mStatusMtx);
it = mStatusInfoMap.find(ownId); it = mStatusInfoMap.find(ownId);
@ -77,7 +77,7 @@ bool p3StatusService::getOwnStatus(StatusInfo& statusInfo)
statusInfo.id = ownId; statusInfo.id = ownId;
statusInfo.status = RS_STATUS_ONLINE; statusInfo.status = RS_STATUS_ONLINE;
std::pair<std::string, StatusInfo> pr(ownId, statusInfo); std::pair<RsPeerId, StatusInfo> pr(ownId, statusInfo);
mStatusInfoMap.insert(pr); mStatusInfoMap.insert(pr);
IndicateConfigChanged(); IndicateConfigChanged();
@ -100,7 +100,7 @@ bool p3StatusService::getStatusList(std::list<StatusInfo>& statusInfo)
RsStackMutex stack(mStatusMtx); RsStackMutex stack(mStatusMtx);
// fill up statusInfo list with this information // fill up statusInfo list with this information
std::map<std::string, StatusInfo>::iterator mit; std::map<RsPeerId, StatusInfo>::iterator mit;
for(mit = mStatusInfoMap.begin(); mit != mStatusInfoMap.end(); mit++){ for(mit = mStatusInfoMap.begin(); mit != mStatusInfoMap.end(); mit++){
statusInfo.push_back(mit->second); statusInfo.push_back(mit->second);
} }
@ -108,7 +108,7 @@ bool p3StatusService::getStatusList(std::list<StatusInfo>& statusInfo)
return true; return true;
} }
bool p3StatusService::getStatus(const std::string &id, StatusInfo &statusInfo) bool p3StatusService::getStatus(const RsPeerId &id, StatusInfo &statusInfo)
{ {
#ifdef STATUS_DEBUG #ifdef STATUS_DEBUG
std::cerr << "p3StatusService::getStatus() " << std::endl; std::cerr << "p3StatusService::getStatus() " << std::endl;
@ -116,7 +116,7 @@ bool p3StatusService::getStatus(const std::string &id, StatusInfo &statusInfo)
RsStackMutex stack(mStatusMtx); RsStackMutex stack(mStatusMtx);
std::map<std::string, StatusInfo>::iterator mit = mStatusInfoMap.find(id); std::map<RsPeerId, StatusInfo>::iterator mit = mStatusInfoMap.find(id);
if (mit == mStatusInfoMap.end()) { if (mit == mStatusInfoMap.end()) {
/* return fake status info as offline */ /* return fake status info as offline */
@ -133,10 +133,10 @@ bool p3StatusService::getStatus(const std::string &id, StatusInfo &statusInfo)
} }
/* id = "", status is sent to all online peers */ /* id = "", status is sent to all online peers */
bool p3StatusService::sendStatus(const std::string &id, uint32_t status) bool p3StatusService::sendStatus(const RsPeerId &id, uint32_t status)
{ {
StatusInfo statusInfo; StatusInfo statusInfo;
std::list<std::string> onlineList; std::list<RsPeerId> onlineList;
{ {
RsStackMutex stack(mStatusMtx); RsStackMutex stack(mStatusMtx);
@ -150,7 +150,7 @@ bool p3StatusService::sendStatus(const std::string &id, uint32_t status)
// If your id is not set, set it // If your id is not set, set it
if(mStatusInfoMap.find(statusInfo.id) == mStatusInfoMap.end()){ if(mStatusInfoMap.find(statusInfo.id) == mStatusInfoMap.end()){
std::pair<std::string, StatusInfo> pr(statusInfo.id, statusInfo); std::pair<RsPeerId, StatusInfo> pr(statusInfo.id, statusInfo);
mStatusInfoMap.insert(pr); mStatusInfoMap.insert(pr);
IndicateConfigChanged(); IndicateConfigChanged();
} else if(mStatusInfoMap[statusInfo.id].status != statusInfo.status){ } else if(mStatusInfoMap[statusInfo.id].status != statusInfo.status){
@ -160,14 +160,14 @@ bool p3StatusService::sendStatus(const std::string &id, uint32_t status)
} }
} }
if (id.empty()) { if (id.isNull()) {
mLinkMgr->getOnlineList(onlineList); mLinkMgr->getOnlineList(onlineList);
} else { } else {
onlineList.push_back(id); onlineList.push_back(id);
} }
} }
std::list<std::string>::iterator it; std::list<RsPeerId>::iterator it;
#ifdef STATUS_DEBUG #ifdef STATUS_DEBUG
std::cerr << "p3StatusService::sendStatus() " << std::endl; std::cerr << "p3StatusService::sendStatus() " << std::endl;
@ -184,7 +184,7 @@ bool p3StatusService::sendStatus(const std::string &id, uint32_t status)
} }
/* send notify of own status change */ /* send notify of own status change */
RsServer::notify()->notifyPeerStatusChanged(statusInfo.id, statusInfo.status); RsServer::notify()->notifyPeerStatusChanged(statusInfo.id.toStdString(), statusInfo.status);
return true; return true;
} }
@ -193,7 +193,7 @@ bool p3StatusService::sendStatus(const std::string &id, uint32_t status)
void p3StatusService::receiveStatusQueue() void p3StatusService::receiveStatusQueue()
{ {
std::map<std::string, uint32_t> changed; std::map<RsPeerId, uint32_t> changed;
{ {
RsStackMutex stack(mStatusMtx); RsStackMutex stack(mStatusMtx);
@ -217,7 +217,7 @@ void p3StatusService::receiveStatusQueue()
std::cerr << "Got status Item" << std::endl; std::cerr << "Got status Item" << std::endl;
#endif #endif
std::map<std::string, StatusInfo>::iterator mit = mStatusInfoMap.find(status_item->PeerId()); std::map<RsPeerId, StatusInfo>::iterator mit = mStatusInfoMap.find(status_item->PeerId());
if(mit != mStatusInfoMap.end()){ if(mit != mStatusInfoMap.end()){
mit->second.id = status_item->PeerId(); mit->second.id = status_item->PeerId();
@ -241,9 +241,9 @@ void p3StatusService::receiveStatusQueue()
} /* UNLOCKED */ } /* UNLOCKED */
if (changed.size()) { if (changed.size()) {
std::map<std::string, uint32_t>::iterator it; std::map<RsPeerId, uint32_t>::iterator it;
for (it = changed.begin(); it != changed.end(); it++) { for (it = changed.begin(); it != changed.end(); it++) {
RsServer::notify()->notifyPeerStatusChanged(it->first, it->second); RsServer::notify()->notifyPeerStatusChanged(it->first.toStdString(), it->second);
} }
RsServer::notify()->notifyPeerStatusChangedSummary(); RsServer::notify()->notifyPeerStatusChangedSummary();
} }
@ -266,7 +266,7 @@ bool p3StatusService::saveList(bool& cleanup, std::list<RsItem*>& ilist){
RsStatusItem* own_status = new RsStatusItem; RsStatusItem* own_status = new RsStatusItem;
StatusInfo own_info; StatusInfo own_info;
std::map<std::string, StatusInfo>::iterator it; std::map<RsPeerId, StatusInfo>::iterator it;
{ {
RsStackMutex stack(mStatusMtx); RsStackMutex stack(mStatusMtx);
@ -315,7 +315,7 @@ bool p3StatusService::loadList(std::list<RsItem*>& load){
{ {
RsStackMutex stack(mStatusMtx); RsStackMutex stack(mStatusMtx);
std::pair<std::string, StatusInfo> pr(mLinkMgr->getOwnId(), own_info); std::pair<RsPeerId, StatusInfo> pr(mLinkMgr->getOwnId(), own_info);
mStatusInfoMap.insert(pr); mStatusInfoMap.insert(pr);
} }
@ -362,12 +362,12 @@ void p3StatusService::statusChange(const std::list<pqipeer> &plist)
} /* UNLOCKED */ } /* UNLOCKED */
changedState = true; changedState = true;
RsServer::notify()->notifyPeerStatusChanged(it->id, RS_STATUS_OFFLINE); RsServer::notify()->notifyPeerStatusChanged(it->id.toStdString(), RS_STATUS_OFFLINE);
} }
if (it->actions & RS_PEER_CONNECTED) { if (it->actions & RS_PEER_CONNECTED) {
/* send current status, only call getOwnStatus once in the loop */ /* send current status, only call getOwnStatus once in the loop */
if (statusInfo.id.empty() == false || getOwnStatus(statusInfo)) { if (statusInfo.id.isNull() == false || getOwnStatus(statusInfo)) {
sendStatus(it->id, statusInfo.status); sendStatus(it->id, statusInfo.status);
} }
@ -384,7 +384,7 @@ void p3StatusService::statusChange(const std::list<pqipeer> &plist)
} /* UNLOCKED */ } /* UNLOCKED */
changedState = true; changedState = true;
RsServer::notify()->notifyPeerStatusChanged(it->id, RS_STATUS_ONLINE); RsServer::notify()->notifyPeerStatusChanged(it->id.toStdString(), RS_STATUS_ONLINE);
} }
} else if (it->actions & RS_PEER_MOVED) { } else if (it->actions & RS_PEER_MOVED) {
/* now handle remove */ /* now handle remove */
@ -395,7 +395,7 @@ void p3StatusService::statusChange(const std::list<pqipeer> &plist)
} /* UNLOCKED */ } /* UNLOCKED */
changedState = true; changedState = true;
RsServer::notify()->notifyPeerStatusChanged(it->id, RS_STATUS_OFFLINE); RsServer::notify()->notifyPeerStatusChanged(it->id.toStdString(), RS_STATUS_OFFLINE);
} }
} }

View file

@ -65,9 +65,9 @@ virtual void statusChange(const std::list<pqipeer> &plist);
*/ */
virtual bool getOwnStatus(StatusInfo& statusInfo); virtual bool getOwnStatus(StatusInfo& statusInfo);
virtual bool getStatusList(std::list<StatusInfo>& statusInfo); virtual bool getStatusList(std::list<StatusInfo>& statusInfo);
virtual bool getStatus(const std::string &id, StatusInfo &statusInfo); virtual bool getStatus(const RsPeerId &id, StatusInfo &statusInfo);
/* id = "", status is sent to all online peers */ /* id = "", status is sent to all online peers */
virtual bool sendStatus(const std::string &id, uint32_t status); virtual bool sendStatus(const RsPeerId &id, uint32_t status);
/******************************/ /******************************/
@ -95,7 +95,7 @@ virtual void receiveStatusQueue();
p3LinkMgr *mLinkMgr; p3LinkMgr *mLinkMgr;
std::map<std::string, StatusInfo> mStatusInfoMap; std::map<RsPeerId, StatusInfo> mStatusInfoMap;
RsMutex mStatusMtx; RsMutex mStatusMtx;