mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
remaining code for nxs sync optimisation
- still needs testing git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-gxs_finale@6903 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
2e886bf443
commit
f74aacd759
@ -90,9 +90,20 @@ void RsGxsNetService::syncWithPeers()
|
|||||||
// for now just grps
|
// for now just grps
|
||||||
for(; sit != peers.end(); sit++)
|
for(; sit != peers.end(); sit++)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
const std::string peerId = *sit;
|
||||||
|
|
||||||
|
ClientGrpMap::const_iterator cit = mClientGrpUpdateMap.find(peerId);
|
||||||
|
uint32_t updateTS = 0;
|
||||||
|
if(cit != mClientGrpUpdateMap.end())
|
||||||
|
{
|
||||||
|
const RsGxsGrpUpdateItem *gui = cit->second;
|
||||||
|
updateTS = gui->grpUpdateTS;
|
||||||
|
}
|
||||||
RsNxsSyncGrp *grp = new RsNxsSyncGrp(mServType);
|
RsNxsSyncGrp *grp = new RsNxsSyncGrp(mServType);
|
||||||
grp->clear();
|
grp->clear();
|
||||||
grp->PeerId(*sit);
|
grp->PeerId(*sit);
|
||||||
|
grp->updateTS = updateTS;
|
||||||
sendItem(grp);
|
sendItem(grp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,7 +122,9 @@ void RsGxsNetService::syncWithPeers()
|
|||||||
RsGxsGrpMetaData* meta = mit->second;
|
RsGxsGrpMetaData* meta = mit->second;
|
||||||
|
|
||||||
if(meta->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED )
|
if(meta->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED )
|
||||||
|
{
|
||||||
grpIds.push_back(mit->first);
|
grpIds.push_back(mit->first);
|
||||||
|
}
|
||||||
|
|
||||||
delete meta;
|
delete meta;
|
||||||
}
|
}
|
||||||
@ -125,12 +138,35 @@ void RsGxsNetService::syncWithPeers()
|
|||||||
|
|
||||||
std::vector<RsGxsGroupId>::iterator vit = grpIds.begin();
|
std::vector<RsGxsGroupId>::iterator vit = grpIds.begin();
|
||||||
|
|
||||||
|
// now see if you have an updateTS so optimise whether you need
|
||||||
|
// to get a new list of peer data
|
||||||
|
RsGxsMsgUpdateItem* mui = NULL;
|
||||||
|
|
||||||
|
ClientMsgMap::const_iterator cit = mClientMsgUpdateMap.find(*sit);
|
||||||
|
|
||||||
|
if(cit != mClientMsgUpdateMap.end())
|
||||||
|
{
|
||||||
|
mui = cit->second;
|
||||||
|
}
|
||||||
|
|
||||||
for(; vit != grpIds.end(); vit++)
|
for(; vit != grpIds.end(); vit++)
|
||||||
{
|
{
|
||||||
|
uint32_t updateTS = 0;
|
||||||
|
if(mui)
|
||||||
|
{
|
||||||
|
std::map<std::string, uint32_t>::const_iterator cit2 = mui->msgUpdateTS.find(*vit);
|
||||||
|
|
||||||
|
if(cit2 != mui->msgUpdateTS.end())
|
||||||
|
{
|
||||||
|
updateTS = cit2->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RsNxsSyncMsg* msg = new RsNxsSyncMsg(mServType);
|
RsNxsSyncMsg* msg = new RsNxsSyncMsg(mServType);
|
||||||
msg->clear();
|
msg->clear();
|
||||||
msg->PeerId(*sit);
|
msg->PeerId(*sit);
|
||||||
msg->grpId = *vit;
|
msg->grpId = *vit;
|
||||||
|
msg->updateTS = updateTS;
|
||||||
sendItem(msg);
|
sendItem(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -526,20 +562,101 @@ void RsGxsNetService::collateMsgFragments(MsgFragments fragments, std::map<RsGxs
|
|||||||
fragments.clear();
|
fragments.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class StoreHere
|
||||||
bool RsGxsNetService::loadList(std::list<RsItem*>& load)
|
|
||||||
{
|
{
|
||||||
return false;
|
public:
|
||||||
|
|
||||||
|
StoreHere(RsGxsNetService::ClientGrpMap& cgm, RsGxsNetService::ClientMsgMap cmm,
|
||||||
|
RsGxsNetService::ServerMsgMap& smm,
|
||||||
|
RsGxsServerGrpUpdateItem*& sgm) : mClientGrpMap(cgm), mClientMsgMap(cmm),
|
||||||
|
mServerMsgMap(smm), mServerGrpUpdateItem(sgm)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void operator() (RsItem* item)
|
||||||
|
{
|
||||||
|
RsGxsMsgUpdateItem* mui;
|
||||||
|
RsGxsGrpUpdateItem* gui;
|
||||||
|
RsGxsServerGrpUpdateItem* gsui;
|
||||||
|
RsGxsServerMsgUpdateItem* msui;
|
||||||
|
|
||||||
|
if((mui = dynamic_cast<RsGxsMsgUpdateItem*>(item)) != NULL)
|
||||||
|
mClientMsgMap.insert(std::make_pair(mui->peerId, mui));
|
||||||
|
else if((gui = dynamic_cast<RsGxsGrpUpdateItem*>(item)) != NULL)
|
||||||
|
mClientGrpMap.insert(std::make_pair(gui->peerId, gui));
|
||||||
|
else if((msui = dynamic_cast<RsGxsServerMsgUpdateItem*>(item)) != NULL)
|
||||||
|
mServerMsgMap.insert(std::make_pair(msui->grpId, msui));
|
||||||
|
else if((gsui = dynamic_cast<RsGxsServerGrpUpdateItem*>(item)) != NULL)
|
||||||
|
{
|
||||||
|
if(mServerGrpUpdateItem)
|
||||||
|
{
|
||||||
|
mServerGrpUpdateItem = gsui;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef NXS_NET_DEBUG
|
||||||
|
std::cerr << "Error! More than one server group update item exists!" << std::endl;
|
||||||
|
#endif
|
||||||
|
delete gsui;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "Type not expected!" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
RsGxsNetService::ClientGrpMap& mClientGrpMap;
|
||||||
|
RsGxsNetService::ClientMsgMap& mClientMsgMap;
|
||||||
|
RsGxsNetService::ServerMsgMap& mServerMsgMap;
|
||||||
|
RsGxsServerGrpUpdateItem*& mServerGrpUpdateItem;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
bool RsGxsNetService::loadList(std::list<RsItem *> &load)
|
||||||
|
{
|
||||||
|
std::for_each(load.begin(), load.end(), StoreHere(mClientGrpUpdateMap, mClientMsgUpdateMap,
|
||||||
|
mServerMsgUpdateMap, mGrpServerUpdateItem));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
template <typename UpdateMap>
|
||||||
|
struct get_second : public std::unary_function<typename UpdateMap::value_type, RsItem*>
|
||||||
|
{
|
||||||
|
RsItem* operator()(const typename UpdateMap::value_type& value) const
|
||||||
|
{
|
||||||
|
return value.second;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
bool RsGxsNetService::saveList(bool& cleanup, std::list<RsItem*>& save)
|
bool RsGxsNetService::saveList(bool& cleanup, std::list<RsItem*>& save)
|
||||||
{
|
{
|
||||||
return false;
|
RsStackMutex stack(mNxsMutex);
|
||||||
|
|
||||||
|
// hardcore templates
|
||||||
|
std::transform(mClientGrpUpdateMap.begin(), mClientGrpUpdateMap.end(),
|
||||||
|
std::back_inserter(save), get_second<ClientGrpMap>());
|
||||||
|
|
||||||
|
std::transform(mClientMsgUpdateMap.begin(), mClientMsgUpdateMap.end(),
|
||||||
|
std::back_inserter(save), get_second<ClientMsgMap>());
|
||||||
|
|
||||||
|
std::transform(mServerMsgUpdateMap.begin(), mServerMsgUpdateMap.end(),
|
||||||
|
std::back_inserter(save), get_second<ServerMsgMap>());
|
||||||
|
|
||||||
|
save.push_back(mGrpServerUpdateItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
RsSerialiser *RsGxsNetService::setupSerialiser()
|
RsSerialiser *RsGxsNetService::setupSerialiser()
|
||||||
{
|
{
|
||||||
return NULL;
|
|
||||||
|
RsSerialiser *rss = new RsSerialiser;
|
||||||
|
rss->addSerialType(new RsGxsUpdateSerialiser(mServType));
|
||||||
|
|
||||||
|
return rss;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsNetService::recvNxsItemQueue(){
|
void RsGxsNetService::recvNxsItemQueue(){
|
||||||
@ -1039,17 +1156,45 @@ void RsGxsNetService::locked_processCompletedIncomingTrans(NxsTransaction* tr)
|
|||||||
// notify listener of grps
|
// notify listener of grps
|
||||||
mObserver->notifyNewGroups(grps);
|
mObserver->notifyNewGroups(grps);
|
||||||
|
|
||||||
|
// now note this as the latest you've received from this peer
|
||||||
|
std::string peerFrom = tr->mTransaction->PeerId();
|
||||||
|
uint32_t updateTS = tr->mTransaction->updateTS;
|
||||||
|
|
||||||
|
ClientGrpMap::iterator it = mClientGrpUpdateMap.find(peerFrom);
|
||||||
|
|
||||||
|
RsGxsGrpUpdateItem* item = NULL;
|
||||||
|
|
||||||
|
if(it != mClientGrpUpdateMap.end())
|
||||||
|
{
|
||||||
|
item = it->second;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
item = new RsGxsGrpUpdateItem(mServType);
|
||||||
|
}
|
||||||
|
|
||||||
|
item->grpUpdateTS = updateTS;
|
||||||
|
item->peerId = peerFrom;
|
||||||
|
|
||||||
|
mClientGrpUpdateMap.insert(
|
||||||
|
std::make_pair(peerFrom, item));
|
||||||
|
|
||||||
|
// as a grp list server also note this is the latest item you have
|
||||||
|
mGrpServerUpdateItem->grpUpdateTS = updateTS;
|
||||||
|
|
||||||
}else if(flag & RsNxsTransac::FLAG_TYPE_MSGS)
|
}else if(flag & RsNxsTransac::FLAG_TYPE_MSGS)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::vector<RsNxsMsg*> msgs;
|
std::vector<RsNxsMsg*> msgs;
|
||||||
|
|
||||||
|
std::string grpId;
|
||||||
while(tr->mItems.size() > 0)
|
while(tr->mItems.size() > 0)
|
||||||
{
|
{
|
||||||
RsNxsMsg* msg = dynamic_cast<RsNxsMsg*>(tr->mItems.front());
|
RsNxsMsg* msg = dynamic_cast<RsNxsMsg*>(tr->mItems.front());
|
||||||
if(msg)
|
if(msg)
|
||||||
{
|
{
|
||||||
|
if(grpId.empty())
|
||||||
|
grpId = msg->grpId;
|
||||||
|
|
||||||
tr->mItems.pop_front();
|
tr->mItems.pop_front();
|
||||||
msgs.push_back(msg);
|
msgs.push_back(msg);
|
||||||
}
|
}
|
||||||
@ -1081,6 +1226,10 @@ void RsGxsNetService::locked_processCompletedIncomingTrans(NxsTransaction* tr)
|
|||||||
// notify listener of msgs
|
// notify listener of msgs
|
||||||
mObserver->notifyNewMessages(msgs);
|
mObserver->notifyNewMessages(msgs);
|
||||||
|
|
||||||
|
// now note that this is the latest you've received from this peer
|
||||||
|
// for the grp id
|
||||||
|
locked_doMsgUpdateWork(tr->mTransaction, grpId);
|
||||||
|
|
||||||
}
|
}
|
||||||
}else if(tr->mFlag == NxsTransaction::FLAG_STATE_FAILED){
|
}else if(tr->mFlag == NxsTransaction::FLAG_STATE_FAILED){
|
||||||
// don't do anything transaction will simply be cleaned
|
// don't do anything transaction will simply be cleaned
|
||||||
@ -1088,6 +1237,46 @@ void RsGxsNetService::locked_processCompletedIncomingTrans(NxsTransaction* tr)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RsGxsNetService::locked_doMsgUpdateWork(const RsNxsTransac *nxsTrans, const std::string &grpId)
|
||||||
|
{
|
||||||
|
|
||||||
|
// firts check if peer exists
|
||||||
|
const std::string& peerFrom = nxsTrans->PeerId();
|
||||||
|
|
||||||
|
ClientMsgMap::iterator it = mClientMsgUpdateMap.find(peerFrom);
|
||||||
|
|
||||||
|
RsGxsMsgUpdateItem* mui = NULL;
|
||||||
|
|
||||||
|
// now update the peer's entry for this grp id
|
||||||
|
if(it != mClientMsgUpdateMap.end())
|
||||||
|
{
|
||||||
|
mui = it->second;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mui = new RsGxsMsgUpdateItem(mServType);
|
||||||
|
mClientMsgUpdateMap.insert(std::make_pair(peerFrom, mui));
|
||||||
|
}
|
||||||
|
|
||||||
|
mui->msgUpdateTS[grpId] = nxsTrans->updateTS;
|
||||||
|
mui->peerId = peerFrom;
|
||||||
|
|
||||||
|
ServerMsgMap::iterator mit = mServerMsgUpdateMap.find(grpId);
|
||||||
|
RsGxsServerMsgUpdateItem* msui = NULL;
|
||||||
|
if(mit != mServerMsgUpdateMap.end())
|
||||||
|
{
|
||||||
|
msui = mit->second;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msui = new RsGxsServerMsgUpdateItem(mServType);
|
||||||
|
mServerMsgUpdateMap.insert(std::make_pair(grpId, msui));
|
||||||
|
}
|
||||||
|
|
||||||
|
msui->grpId = grpId;
|
||||||
|
msui->msgUpdateTS = nxsTrans->updateTS;
|
||||||
|
}
|
||||||
|
|
||||||
void RsGxsNetService::locked_processCompletedOutgoingTrans(NxsTransaction* tr)
|
void RsGxsNetService::locked_processCompletedOutgoingTrans(NxsTransaction* tr)
|
||||||
{
|
{
|
||||||
uint16_t flag = tr->mTransaction->transactFlag;
|
uint16_t flag = tr->mTransaction->transactFlag;
|
||||||
@ -1128,6 +1317,7 @@ void RsGxsNetService::locked_processCompletedOutgoingTrans(NxsTransaction* tr)
|
|||||||
std::cerr << "complete Sending Grp Data, transN: " <<
|
std::cerr << "complete Sending Grp Data, transN: " <<
|
||||||
tr->mTransaction->transactionNumber << std::endl;
|
tr->mTransaction->transactionNumber << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}else if(flag & RsNxsTransac::FLAG_TYPE_MSGS)
|
}else if(flag & RsNxsTransac::FLAG_TYPE_MSGS)
|
||||||
{
|
{
|
||||||
#ifdef NXS_NET_DEBUG
|
#ifdef NXS_NET_DEBUG
|
||||||
@ -1516,6 +1706,7 @@ void RsGxsNetService::locked_genSendGrpsTransaction(NxsTransaction* tr)
|
|||||||
ntr->transactionNumber = transN;
|
ntr->transactionNumber = transN;
|
||||||
ntr->transactFlag = RsNxsTransac::FLAG_BEGIN_P1 |
|
ntr->transactFlag = RsNxsTransac::FLAG_BEGIN_P1 |
|
||||||
RsNxsTransac::FLAG_TYPE_GRPS;
|
RsNxsTransac::FLAG_TYPE_GRPS;
|
||||||
|
ntr->updateTS = time(NULL);
|
||||||
ntr->nItems = grps.size();
|
ntr->nItems = grps.size();
|
||||||
ntr->PeerId(tr->mTransaction->PeerId());
|
ntr->PeerId(tr->mTransaction->PeerId());
|
||||||
|
|
||||||
@ -1697,6 +1888,7 @@ void RsGxsNetService::locked_genSendMsgsTransaction(NxsTransaction* tr)
|
|||||||
ntr->transactionNumber = transN;
|
ntr->transactionNumber = transN;
|
||||||
ntr->transactFlag = RsNxsTransac::FLAG_BEGIN_P1 |
|
ntr->transactFlag = RsNxsTransac::FLAG_BEGIN_P1 |
|
||||||
RsNxsTransac::FLAG_TYPE_MSGS;
|
RsNxsTransac::FLAG_TYPE_MSGS;
|
||||||
|
ntr->updateTS = time(NULL);
|
||||||
ntr->nItems = msgSize;
|
ntr->nItems = msgSize;
|
||||||
ntr->PeerId(peerId);
|
ntr->PeerId(peerId);
|
||||||
|
|
||||||
@ -1779,6 +1971,10 @@ void RsGxsNetService::handleRecvSyncGroup(RsNxsSyncGrp* item)
|
|||||||
|
|
||||||
std::string peer = item->PeerId();
|
std::string peer = item->PeerId();
|
||||||
|
|
||||||
|
// don't sync if you have no new updates for this peer
|
||||||
|
if(item->updateTS >= mGrpServerUpdateItem->grpUpdateTS && item->updateTS != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
std::map<std::string, RsGxsGrpMetaData*> grp;
|
std::map<std::string, RsGxsGrpMetaData*> grp;
|
||||||
mDataStore->retrieveGxsGrpMetaData(grp);
|
mDataStore->retrieveGxsGrpMetaData(grp);
|
||||||
|
|
||||||
@ -1893,6 +2089,16 @@ void RsGxsNetService::handleRecvSyncMessage(RsNxsSyncMsg* item)
|
|||||||
|
|
||||||
const std::string& peer = item->PeerId();
|
const std::string& peer = item->PeerId();
|
||||||
|
|
||||||
|
ServerMsgMap::const_iterator cit = mServerMsgUpdateMap.find(item->grpId);
|
||||||
|
|
||||||
|
if(cit != mServerMsgUpdateMap.end())
|
||||||
|
{
|
||||||
|
const RsGxsServerMsgUpdateItem *msui = cit->second;
|
||||||
|
|
||||||
|
if(item->updateTS > msui->msgUpdateTS && item->updateTS != 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
GxsMsgMetaResult metaResult;
|
GxsMsgMetaResult metaResult;
|
||||||
GxsMsgReq req;
|
GxsMsgReq req;
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "rsnxsobserver.h"
|
#include "rsnxsobserver.h"
|
||||||
#include "pqi/p3linkmgr.h"
|
#include "pqi/p3linkmgr.h"
|
||||||
#include "serialiser/rsnxsitems.h"
|
#include "serialiser/rsnxsitems.h"
|
||||||
|
#include "serialiser/rsgxsupdateitems.h"
|
||||||
#include "rsgxsnetutils.h"
|
#include "rsgxsnetutils.h"
|
||||||
#include "pqi/p3cfgmgr.h"
|
#include "pqi/p3cfgmgr.h"
|
||||||
#include "rsgixs.h"
|
#include "rsgixs.h"
|
||||||
@ -324,6 +325,8 @@ private:
|
|||||||
|
|
||||||
void processExplicitGroupRequests();
|
void processExplicitGroupRequests();
|
||||||
|
|
||||||
|
void locked_doMsgUpdateWork(const RsNxsTransac* nxsTrans, const std::string& grpId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
typedef std::vector<RsNxsGrp*> GrpFragments;
|
typedef std::vector<RsNxsGrp*> GrpFragments;
|
||||||
@ -427,6 +430,23 @@ private:
|
|||||||
std::vector<GrpCircleVetting*> mPendingCircleVets;
|
std::vector<GrpCircleVetting*> mPendingCircleVets;
|
||||||
|
|
||||||
std::map<std::string, std::list<RsGxsGroupId> > mExplicitRequest;
|
std::map<std::string, std::list<RsGxsGroupId> > mExplicitRequest;
|
||||||
|
|
||||||
|
// nxs sync optimisation
|
||||||
|
// can pull dynamically the latest timestamp for each message
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef std::map<std::string, RsGxsMsgUpdateItem*> ClientMsgMap;
|
||||||
|
typedef std::map<std::string, RsGxsServerMsgUpdateItem*> ServerMsgMap;
|
||||||
|
typedef std::map<std::string, RsGxsGrpUpdateItem*> ClientGrpMap;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
ClientMsgMap mClientMsgUpdateMap;
|
||||||
|
ServerMsgMap mServerMsgUpdateMap;
|
||||||
|
ClientGrpMap mClientGrpUpdateMap;
|
||||||
|
|
||||||
|
RsGxsServerGrpUpdateItem* mGrpServerUpdateItem;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RSGXSNETSERVICE_H
|
#endif // RSGXSNETSERVICE_H
|
||||||
|
@ -388,7 +388,8 @@ HEADERS += serialiser/rsbaseitems.h \
|
|||||||
serialiser/rsbanlistitems.h \
|
serialiser/rsbanlistitems.h \
|
||||||
serialiser/rsbwctrlitems.h \
|
serialiser/rsbwctrlitems.h \
|
||||||
serialiser/rsgxsrecognitems.h \
|
serialiser/rsgxsrecognitems.h \
|
||||||
serialiser/rstunnelitems.h
|
serialiser/rstunnelitems.h \
|
||||||
|
serialiser/rsgxsupdateitems.h
|
||||||
|
|
||||||
HEADERS += services/p3channels.h \
|
HEADERS += services/p3channels.h \
|
||||||
services/p3chatservice.h \
|
services/p3chatservice.h \
|
||||||
@ -532,7 +533,8 @@ SOURCES += serialiser/rsbaseitems.cc \
|
|||||||
serialiser/rsbanlistitems.cc \
|
serialiser/rsbanlistitems.cc \
|
||||||
serialiser/rsbwctrlitems.cc \
|
serialiser/rsbwctrlitems.cc \
|
||||||
serialiser/rsgxsrecognitems.cc \
|
serialiser/rsgxsrecognitems.cc \
|
||||||
serialiser/rstunnelitems.cc
|
serialiser/rstunnelitems.cc \
|
||||||
|
serialiser/rsgxsupdateitems.cc
|
||||||
|
|
||||||
SOURCES += services/p3channels.cc \
|
SOURCES += services/p3channels.cc \
|
||||||
services/p3chatservice.cc \
|
services/p3chatservice.cc \
|
||||||
|
@ -24,15 +24,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rsgxsupdateitems.h"
|
#include "rsgxsupdateitems.h"
|
||||||
|
#include "rsbaseserial.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RsGxsGrpUpdateItem::RsGxsGrpUpdateItem() {
|
|
||||||
}
|
|
||||||
|
|
||||||
RsGxsGrpUpdateItem::~RsGxsGrpUpdateItem() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void RsGxsGrpUpdateItem::clear()
|
void RsGxsGrpUpdateItem::clear()
|
||||||
{
|
{
|
||||||
@ -45,12 +41,7 @@ std::ostream& RsGxsGrpUpdateItem::print(std::ostream& out, uint16_t indent)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RsGxsMsgUpdateItem::RsGxsMsgUpdateItem()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
RsGxsMsgUpdateItem::~RsGxsMsgUpdateItem() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void RsGxsMsgUpdateItem::clear()
|
void RsGxsMsgUpdateItem::clear()
|
||||||
{
|
{
|
||||||
@ -66,12 +57,20 @@ uint32_t RsGxsUpdateSerialiser::size(RsItem* item)
|
|||||||
{
|
{
|
||||||
RsGxsMsgUpdateItem* mui = NULL;
|
RsGxsMsgUpdateItem* mui = NULL;
|
||||||
RsGxsGrpUpdateItem* gui = NULL;
|
RsGxsGrpUpdateItem* gui = NULL;
|
||||||
|
RsGxsServerGrpUpdateItem* gsui = NULL;
|
||||||
|
RsGxsServerMsgUpdateItem* msui = NULL;
|
||||||
|
|
||||||
if((mui = dynamic_cast<RsGxsMsgUpdateItem*>(item)) != NULL)
|
if((mui = dynamic_cast<RsGxsMsgUpdateItem*>(item)) != NULL)
|
||||||
{
|
{
|
||||||
return sizeGxsMsgUpdate(mui);
|
return sizeGxsMsgUpdate(mui);
|
||||||
}else if(( gui = dynamic_cast<RsGxsGrpUpdateItem*>(item)) != NULL){
|
}else if(( gui = dynamic_cast<RsGxsGrpUpdateItem*>(item)) != NULL){
|
||||||
return sizeGxsGrpUpdate(gui);
|
return sizeGxsGrpUpdate(gui);
|
||||||
|
}else if((gsui = dynamic_cast<RsGxsServerGrpUpdateItem*>(item)) != NULL)
|
||||||
|
{
|
||||||
|
return sizeGxsServerGrpUpdate(gsui);
|
||||||
|
}else if((msui = dynamic_cast<RsGxsServerMsgUpdateItem*>(item)) != NULL)
|
||||||
|
{
|
||||||
|
return sizeGxsServerMsgUpdate(msui);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
#ifdef RSSERIAL_DEBUG
|
#ifdef RSSERIAL_DEBUG
|
||||||
@ -85,13 +84,35 @@ uint32_t RsGxsUpdateSerialiser::size(RsItem* item)
|
|||||||
bool RsGxsUpdateSerialiser::serialise(RsItem* item, void* data,
|
bool RsGxsUpdateSerialiser::serialise(RsItem* item, void* data,
|
||||||
uint32_t* size)
|
uint32_t* size)
|
||||||
{
|
{
|
||||||
|
RsGxsMsgUpdateItem* mui;
|
||||||
|
RsGxsGrpUpdateItem* gui;
|
||||||
|
RsGxsServerGrpUpdateItem* gsui;
|
||||||
|
RsGxsServerMsgUpdateItem* msui;
|
||||||
|
|
||||||
|
if((mui = dynamic_cast<RsGxsMsgUpdateItem*>(item)) != NULL)
|
||||||
|
return serialiseGxsMsgUpdate(mui, data, size);
|
||||||
|
else if((gui = dynamic_cast<RsGxsGrpUpdateItem*>(item)) != NULL)
|
||||||
|
return serialiseGxsGrpUpdate(gui, data, size);
|
||||||
|
else if((msui = dynamic_cast<RsGxsServerMsgUpdateItem*>(item)) != NULL)
|
||||||
|
return serialiseGxsServerMsgUpdate(msui, data, size);
|
||||||
|
else if((gsui = dynamic_cast<RsGxsServerGrpUpdateItem*>(item)) != NULL)
|
||||||
|
return serialiseGxsServerGrpUpdate(gsui, data, size);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialise() item does not caste to known type"
|
||||||
|
<< std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RsItem* RsGxsUpdateSerialiser::deserialise(void* data, uint32_t* size)
|
RsItem* RsGxsUpdateSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef RSSERIAL_DEBUG
|
#ifdef RSSERIAL_DEBUG
|
||||||
std::cerr << "RsNxsSerialiser::deserialise()" << std::endl;
|
std::cerr << "RsGxsUpdateSerialiser::deserialise()" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
/* get the type and size */
|
/* get the type and size */
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
@ -109,6 +130,10 @@ RsItem* RsGxsUpdateSerialiser::deserialise(void* data, uint32_t* size)
|
|||||||
return deserialGxsMsgUpdate(data, size);
|
return deserialGxsMsgUpdate(data, size);
|
||||||
case RS_PKT_SUBTYPE_GXS_GRP_UPDATE:
|
case RS_PKT_SUBTYPE_GXS_GRP_UPDATE:
|
||||||
return deserialGxsGrpUpddate(data, size);
|
return deserialGxsGrpUpddate(data, size);
|
||||||
|
case RS_PKT_SUBTYPE_GXS_SERVER_GRP_UPDATE:
|
||||||
|
return deserialGxsServerGrpUpddate(data, size);
|
||||||
|
case RS_PKT_SUBTYPE_GXS_SERVER_MSG_UPDATE:
|
||||||
|
return deserialGxsServerMsgUpdate(data, size);
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
#ifdef RSSERIAL_DEBUG
|
#ifdef RSSERIAL_DEBUG
|
||||||
@ -129,6 +154,13 @@ uint32_t RsGxsUpdateSerialiser::sizeGxsGrpUpdate(RsGxsGrpUpdateItem* item)
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t RsGxsUpdateSerialiser::sizeGxsServerGrpUpdate(RsGxsServerGrpUpdateItem* item)
|
||||||
|
{
|
||||||
|
uint32_t s = 8; // header size
|
||||||
|
s += 4; // time stamp
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
bool RsGxsUpdateSerialiser::serialiseGxsGrpUpdate(RsGxsGrpUpdateItem* item,
|
bool RsGxsUpdateSerialiser::serialiseGxsGrpUpdate(RsGxsGrpUpdateItem* item,
|
||||||
void* data, uint32_t* size)
|
void* data, uint32_t* size)
|
||||||
{
|
{
|
||||||
@ -155,7 +187,7 @@ bool RsGxsUpdateSerialiser::serialiseGxsGrpUpdate(RsGxsGrpUpdateItem* item,
|
|||||||
/* skip the header */
|
/* skip the header */
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
|
||||||
/* RsNxsSyncm */
|
/* RsGxsGrpUpdateItem */
|
||||||
|
|
||||||
|
|
||||||
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_PEERID, item->peerId);
|
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_PEERID, item->peerId);
|
||||||
@ -178,10 +210,182 @@ bool RsGxsUpdateSerialiser::serialiseGxsGrpUpdate(RsGxsGrpUpdateItem* item,
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RsGxsUpdateSerialiser::serialiseGxsServerGrpUpdate(RsGxsServerGrpUpdateItem* item,
|
||||||
|
void* data, uint32_t* size)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerGrpUpdate()" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint32_t tlvsize = sizeGxsServerGrpUpdate(item);
|
||||||
|
uint32_t offset = 0;
|
||||||
|
|
||||||
|
if(*size < tlvsize){
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerGrpUpdate() size do not match" << std::endl;
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*size = tlvsize;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize);
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
offset += 8;
|
||||||
|
|
||||||
|
/* RsGxsServerGrpUpdateItem */
|
||||||
|
|
||||||
|
ok &= setRawUInt32(data, *size, &offset, item->grpUpdateTS);
|
||||||
|
|
||||||
|
if(offset != tlvsize){
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerGrpUpdate() FAIL Size Error! " << std::endl;
|
||||||
|
#endif
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerGrpUpdate() NOK" << std::endl;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
RsGxsGrpUpdateItem* RsGxsUpdateSerialiser::deserialGxsGrpUpddate(void* data,
|
RsGxsGrpUpdateItem* RsGxsUpdateSerialiser::deserialGxsGrpUpddate(void* data,
|
||||||
uint32_t* size)
|
uint32_t* size)
|
||||||
{
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate()" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* get the type and size */
|
||||||
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
uint32_t rssize = getRsItemSize(data);
|
||||||
|
|
||||||
|
uint32_t offset = 0;
|
||||||
|
|
||||||
|
|
||||||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
|
(SERVICE_TYPE != getRsItemService(rstype)) ||
|
||||||
|
(RS_PKT_SUBTYPE_GXS_GRP_UPDATE != getRsItemSubType(rstype)))
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() FAIL wrong type" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* wrong type */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*size < rssize) /* check size */
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() FAIL wrong size" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* not enough data */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set the packet length */
|
||||||
|
*size = rssize;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
RsGxsGrpUpdateItem* item = new RsGxsGrpUpdateItem(getRsItemService(rstype));
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
offset += 8;
|
||||||
|
|
||||||
|
ok &= getRawUInt32(data, *size, &offset, &(item->grpUpdateTS));
|
||||||
|
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_PEERID, item->peerId);
|
||||||
|
|
||||||
|
if (offset != rssize)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxxGrpUpdate() FAIL size mismatch" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* error */
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() NOK" << std::endl;
|
||||||
|
#endif
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsGxsServerGrpUpdateItem* RsGxsUpdateSerialiser::deserialGxsServerGrpUpddate(void* data,
|
||||||
|
uint32_t* size)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate()" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* get the type and size */
|
||||||
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
uint32_t rssize = getRsItemSize(data);
|
||||||
|
|
||||||
|
uint32_t offset = 0;
|
||||||
|
|
||||||
|
|
||||||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
|
(SERVICE_TYPE != getRsItemService(rstype)) ||
|
||||||
|
(RS_PKT_SUBTYPE_GXS_SERVER_GRP_UPDATE != getRsItemSubType(rstype)))
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() FAIL wrong type" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* wrong type */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*size < rssize) /* check size */
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() FAIL wrong size" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* not enough data */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set the packet length */
|
||||||
|
*size = rssize;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
RsGxsServerGrpUpdateItem* item = new RsGxsServerGrpUpdateItem(getRsItemService(rstype));
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
offset += 8;
|
||||||
|
|
||||||
|
ok &= getRawUInt32(data, *size, &offset, &(item->grpUpdateTS));
|
||||||
|
|
||||||
|
if (offset != rssize)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() FAIL size mismatch" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* error */
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() NOK" << std::endl;
|
||||||
|
#endif
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsGxsUpdateSerialiser::sizeGxsMsgUpdate(RsGxsMsgUpdateItem* item)
|
uint32_t RsGxsUpdateSerialiser::sizeGxsMsgUpdate(RsGxsMsgUpdateItem* item)
|
||||||
@ -203,6 +407,15 @@ uint32_t RsGxsUpdateSerialiser::sizeGxsMsgUpdate(RsGxsMsgUpdateItem* item)
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t RsGxsUpdateSerialiser::sizeGxsServerMsgUpdate(RsGxsServerMsgUpdateItem* item)
|
||||||
|
{
|
||||||
|
uint32_t s = 8; // header size
|
||||||
|
s += GetTlvStringSize(item->grpId);
|
||||||
|
s += 4; // grp TS
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
bool RsGxsUpdateSerialiser::serialiseGxsMsgUpdate(RsGxsMsgUpdateItem* item,
|
bool RsGxsUpdateSerialiser::serialiseGxsMsgUpdate(RsGxsMsgUpdateItem* item,
|
||||||
void* data, uint32_t* size)
|
void* data, uint32_t* size)
|
||||||
{
|
{
|
||||||
@ -229,7 +442,7 @@ bool RsGxsUpdateSerialiser::serialiseGxsMsgUpdate(RsGxsMsgUpdateItem* item,
|
|||||||
/* skip the header */
|
/* skip the header */
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
|
||||||
/* RsNxsSyncm */
|
/* RsGxsMsgUpdateItem */
|
||||||
|
|
||||||
|
|
||||||
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_PEERID, item->peerId);
|
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_PEERID, item->peerId);
|
||||||
@ -263,6 +476,55 @@ bool RsGxsUpdateSerialiser::serialiseGxsMsgUpdate(RsGxsMsgUpdateItem* item,
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RsGxsUpdateSerialiser::serialiseGxsServerMsgUpdate(RsGxsServerMsgUpdateItem* item,
|
||||||
|
void* data, uint32_t* size)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerMsgUpdate()" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint32_t tlvsize = sizeGxsServerMsgUpdate(item);
|
||||||
|
uint32_t offset = 0;
|
||||||
|
|
||||||
|
if(*size < tlvsize){
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerMsgUpdate() size do not match" << std::endl;
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*size = tlvsize;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize);
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
offset += 8;
|
||||||
|
|
||||||
|
/* RsNxsSyncm */
|
||||||
|
|
||||||
|
|
||||||
|
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_GROUPID, item->grpId);
|
||||||
|
ok &= setRawUInt32(data, *size, &offset, item->msgUpdateTS);
|
||||||
|
|
||||||
|
if(offset != tlvsize){
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerMsgUpdate() FAIL Size Error! " << std::endl;
|
||||||
|
#endif
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerMsgUpdate() NOK" << std::endl;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
RsGxsMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsMsgUpdate(void* data,
|
RsGxsMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsMsgUpdate(void* data,
|
||||||
uint32_t* size)
|
uint32_t* size)
|
||||||
{
|
{
|
||||||
@ -278,7 +540,7 @@ RsGxsMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsMsgUpdate(void* data,
|
|||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(SERVICE_TYPE != getRsItemService(rstype)) ||
|
(SERVICE_TYPE != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_NXS_SYNC_MSG != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXS_MSG_UPDATE != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef RSSERIAL_DEBUG
|
#ifdef RSSERIAL_DEBUG
|
||||||
std::cerr << "RsGxsUpdateSerialiser::deserialGxsMsgUpdate() FAIL wrong type" << std::endl;
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsMsgUpdate() FAIL wrong type" << std::endl;
|
||||||
@ -304,10 +566,10 @@ RsGxsMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsMsgUpdate(void* data,
|
|||||||
/* skip the header */
|
/* skip the header */
|
||||||
offset += 8;
|
offset += 8;
|
||||||
|
|
||||||
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->peerId);
|
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_PEERID, item->peerId);
|
||||||
uint32_t numUpdateItems;
|
uint32_t numUpdateItems;
|
||||||
ok &= getRawUInt32(data, *size, &offset, &(numUpdateItems));
|
ok &= getRawUInt32(data, *size, &offset, &(numUpdateItems));
|
||||||
std::map<std::string, uint32_t>& msgUpdateItem = item->grpUpdateTS;
|
std::map<std::string, uint32_t>& msgUpdateItem = item->msgUpdateTS;
|
||||||
std::string grpId;
|
std::string grpId;
|
||||||
uint32_t updateTS;
|
uint32_t updateTS;
|
||||||
for(uint32_t i; i < numUpdateItems; i++)
|
for(uint32_t i; i < numUpdateItems; i++)
|
||||||
@ -346,3 +608,70 @@ RsGxsMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsMsgUpdate(void* data,
|
|||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RsGxsServerMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate(void* data,
|
||||||
|
uint32_t* size)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate()" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* get the type and size */
|
||||||
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
uint32_t rssize = getRsItemSize(data);
|
||||||
|
|
||||||
|
uint32_t offset = 0;
|
||||||
|
|
||||||
|
|
||||||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
|
(SERVICE_TYPE != getRsItemService(rstype)) ||
|
||||||
|
(RS_PKT_SUBTYPE_GXS_SERVER_MSG_UPDATE != getRsItemSubType(rstype)))
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() FAIL wrong type" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* wrong type */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*size < rssize) /* check size */
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() FAIL wrong size" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* not enough data */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set the packet length */
|
||||||
|
*size = rssize;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
RsGxsServerMsgUpdateItem* item = new RsGxsServerMsgUpdateItem(getRsItemService(rstype));
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
offset += 8;
|
||||||
|
|
||||||
|
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_GROUPID, item->grpId);
|
||||||
|
ok &= getRawUInt32(data, *size, &offset, &(item->msgUpdateTS));
|
||||||
|
|
||||||
|
if (offset != rssize)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() FAIL size mismatch" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* error */
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
#ifdef RSSERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() NOK" << std::endl;
|
||||||
|
#endif
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -39,11 +39,15 @@
|
|||||||
|
|
||||||
const uint8_t RS_PKT_SUBTYPE_GXS_GRP_UPDATE = 0x0001;
|
const uint8_t RS_PKT_SUBTYPE_GXS_GRP_UPDATE = 0x0001;
|
||||||
const uint8_t RS_PKT_SUBTYPE_GXS_MSG_UPDATE = 0x0002;
|
const uint8_t RS_PKT_SUBTYPE_GXS_MSG_UPDATE = 0x0002;
|
||||||
|
const uint8_t RS_PKT_SUBTYPE_GXS_SERVER_GRP_UPDATE = 0x0004;
|
||||||
|
const uint8_t RS_PKT_SUBTYPE_GXS_SERVER_MSG_UPDATE = 0x0008;
|
||||||
|
|
||||||
class RsGxsGrpUpdateItem : public RsItem {
|
class RsGxsGrpUpdateItem : public RsItem {
|
||||||
public:
|
public:
|
||||||
RsGxsGrpUpdateItem();
|
RsGxsGrpUpdateItem(uint16_t servType) : RsItem(RS_PKT_VERSION_SERVICE, servType,
|
||||||
virtual ~RsGxsGrpUpdateItem();
|
RS_PKT_SUBTYPE_GXS_GRP_UPDATE)
|
||||||
|
{}
|
||||||
|
virtual ~RsGxsGrpUpdateItem() {}
|
||||||
|
|
||||||
virtual void clear();
|
virtual void clear();
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
||||||
@ -52,10 +56,24 @@ public:
|
|||||||
uint32_t grpUpdateTS;
|
uint32_t grpUpdateTS;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RsGxsServerGrpUpdateItem : public RsItem {
|
||||||
|
public:
|
||||||
|
RsGxsServerGrpUpdateItem(uint16_t servType) : RsItem(RS_PKT_VERSION_SERVICE, servType,
|
||||||
|
RS_PKT_SUBTYPE_GXS_SERVER_GRP_UPDATE)
|
||||||
|
{}
|
||||||
|
virtual ~RsGxsServerGrpUpdateItem();
|
||||||
|
|
||||||
|
virtual void clear();
|
||||||
|
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
||||||
|
|
||||||
|
uint32_t grpUpdateTS;
|
||||||
|
};
|
||||||
|
|
||||||
class RsGxsMsgUpdateItem : public RsItem
|
class RsGxsMsgUpdateItem : public RsItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsMsgUpdateItem();
|
RsGxsMsgUpdateItem(uint16_t servType) : RsItem(RS_PKT_VERSION_SERVICE, servType, RS_PKT_SUBTYPE_GXS_MSG_UPDATE)
|
||||||
|
{}
|
||||||
virtual ~RsGxsMsgUpdateItem();
|
virtual ~RsGxsMsgUpdateItem();
|
||||||
|
|
||||||
virtual void clear();
|
virtual void clear();
|
||||||
@ -65,6 +83,20 @@ public:
|
|||||||
std::map<std::string, uint32_t> msgUpdateTS;
|
std::map<std::string, uint32_t> msgUpdateTS;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RsGxsServerMsgUpdateItem : public RsItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsGxsServerMsgUpdateItem(uint16_t servType) : RsItem(RS_PKT_VERSION_SERVICE,
|
||||||
|
servType, RS_PKT_SUBTYPE_GXS_SERVER_MSG_UPDATE)
|
||||||
|
{}
|
||||||
|
virtual ~RsGxsServerMsgUpdateItem();
|
||||||
|
|
||||||
|
virtual void clear();
|
||||||
|
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
||||||
|
|
||||||
|
std::string grpId;
|
||||||
|
uint32_t msgUpdateTS; // the last time this group received a new msg
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class RsGxsUpdateSerialiser : public RsSerialType
|
class RsGxsUpdateSerialiser : public RsSerialType
|
||||||
@ -89,12 +121,24 @@ private:
|
|||||||
virtual bool serialiseGxsGrpUpdate(RsGxsGrpUpdateItem *item, void *data, uint32_t *size);
|
virtual bool serialiseGxsGrpUpdate(RsGxsGrpUpdateItem *item, void *data, uint32_t *size);
|
||||||
virtual RsGxsGrpUpdateItem* deserialGxsGrpUpddate(void *data, uint32_t *size);
|
virtual RsGxsGrpUpdateItem* deserialGxsGrpUpddate(void *data, uint32_t *size);
|
||||||
|
|
||||||
/* for RS_PKT_SUBTYPE_GXS_ */
|
/* for RS_PKT_SUBTYPE_GRP_SERVER_UPDATE_ITEM */
|
||||||
|
|
||||||
|
virtual uint32_t sizeGxsServerGrpUpdate(RsGxsServerGrpUpdateItem* item);
|
||||||
|
virtual bool serialiseGxsServerGrpUpdate(RsGxsServerGrpUpdateItem *item, void *data, uint32_t *size);
|
||||||
|
virtual RsGxsServerGrpUpdateItem* deserialGxsServerGrpUpddate(void *data, uint32_t *size);
|
||||||
|
|
||||||
|
/* for RS_PKT_SUBTYPE_GXS_MSG_UPDATE_ITEM */
|
||||||
|
|
||||||
virtual uint32_t sizeGxsMsgUpdate(RsGxsMsgUpdateItem* item);
|
virtual uint32_t sizeGxsMsgUpdate(RsGxsMsgUpdateItem* item);
|
||||||
virtual bool serialiseGxsMsgUpdate(RsGxsMsgUpdateItem *item, void *data, uint32_t *size);
|
virtual bool serialiseGxsMsgUpdate(RsGxsMsgUpdateItem *item, void *data, uint32_t *size);
|
||||||
virtual RsGxsMsgUpdateItem* deserialGxsMsgUpdate(void *data, uint32_t *size);
|
virtual RsGxsMsgUpdateItem* deserialGxsMsgUpdate(void *data, uint32_t *size);
|
||||||
|
|
||||||
|
/* for RS_PKT_SUBTYPE_GXS_SERVER_UPDATE_ITEM */
|
||||||
|
|
||||||
|
virtual uint32_t sizeGxsServerMsgUpdate(RsGxsServerMsgUpdateItem* item);
|
||||||
|
virtual bool serialiseGxsServerMsgUpdate(RsGxsServerMsgUpdateItem *item, void *data, uint32_t *size);
|
||||||
|
virtual RsGxsServerMsgUpdateItem* deserialGxsServerMsgUpdate(void *data, uint32_t *size);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
const uint16_t SERVICE_TYPE;
|
const uint16_t SERVICE_TYPE;
|
||||||
|
@ -354,8 +354,9 @@ bool RsNxsSerialiser::serialiseNxsSyncGrp(RsNxsSyncGrp *item, void *data, uint32
|
|||||||
|
|
||||||
ok &= setRawUInt32(data, *size, &offset, item->transactionNumber);
|
ok &= setRawUInt32(data, *size, &offset, item->transactionNumber);
|
||||||
ok &= setRawUInt8(data, *size, &offset, item->flag);
|
ok &= setRawUInt8(data, *size, &offset, item->flag);
|
||||||
ok &= setRawUInt32(data, *size, &offset, item->syncAge);
|
ok &= setRawUInt32(data, *size, &offset, item->createdSince);
|
||||||
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
||||||
|
ok &= setRawUInt32(data, *size, &offset, item->updateTS);
|
||||||
|
|
||||||
if(offset != tlvsize){
|
if(offset != tlvsize){
|
||||||
#ifdef RSSERIAL_DEBUG
|
#ifdef RSSERIAL_DEBUG
|
||||||
@ -403,7 +404,7 @@ bool RsNxsSerialiser::serialiseNxsTrans(RsNxsTransac *item, void *data, uint32_t
|
|||||||
ok &= setRawUInt32(data, *size, &offset, item->transactionNumber);
|
ok &= setRawUInt32(data, *size, &offset, item->transactionNumber);
|
||||||
ok &= setRawUInt16(data, *size, &offset, item->transactFlag);
|
ok &= setRawUInt16(data, *size, &offset, item->transactFlag);
|
||||||
ok &= setRawUInt32(data, *size, &offset, item->nItems);
|
ok &= setRawUInt32(data, *size, &offset, item->nItems);
|
||||||
ok &= setRawUInt32(data, *size, &offset, item->timestamp);
|
ok &= setRawUInt32(data, *size, &offset, item->updateTS);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -501,7 +502,7 @@ bool RsNxsSerialiser::serialiseNxsSyncMsg(RsNxsSyncMsg *item, void *data, uint32
|
|||||||
|
|
||||||
ok &= setRawUInt32(data, *size, &offset, item->transactionNumber);
|
ok &= setRawUInt32(data, *size, &offset, item->transactionNumber);
|
||||||
ok &= setRawUInt8(data, *size, &offset, item->flag);
|
ok &= setRawUInt8(data, *size, &offset, item->flag);
|
||||||
ok &= setRawUInt32(data, *size, &offset, item->syncAge);
|
ok &= setRawUInt32(data, *size, &offset, item->createdSince);
|
||||||
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
||||||
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_GROUPID, item->grpId);
|
ok &= SetTlvString(data, *size, &offset, TLV_TYPE_STR_GROUPID, item->grpId);
|
||||||
|
|
||||||
@ -710,8 +711,9 @@ RsNxsSyncGrp* RsNxsSerialiser::deserialNxsSyncGrp(void *data, uint32_t *size){
|
|||||||
|
|
||||||
ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber));
|
ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber));
|
||||||
ok &= getRawUInt8(data, *size, &offset, &(item->flag));
|
ok &= getRawUInt8(data, *size, &offset, &(item->flag));
|
||||||
ok &= getRawUInt32(data, *size, &offset, &(item->syncAge));
|
ok &= getRawUInt32(data, *size, &offset, &(item->createdSince));
|
||||||
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
||||||
|
ok &= getRawUInt32(data, *size, &offset, &(item->updateTS));
|
||||||
|
|
||||||
if (offset != rssize)
|
if (offset != rssize)
|
||||||
{
|
{
|
||||||
@ -846,7 +848,7 @@ RsNxsTransac* RsNxsSerialiser::deserialNxsTrans(void *data, uint32_t *size){
|
|||||||
ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber));
|
ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber));
|
||||||
ok &= getRawUInt16(data, *size, &offset, &(item->transactFlag));
|
ok &= getRawUInt16(data, *size, &offset, &(item->transactFlag));
|
||||||
ok &= getRawUInt32(data, *size, &offset, &(item->nItems));
|
ok &= getRawUInt32(data, *size, &offset, &(item->nItems));
|
||||||
ok &= getRawUInt32(data, *size, &offset, &(item->timestamp));
|
ok &= getRawUInt32(data, *size, &offset, &(item->updateTS));
|
||||||
|
|
||||||
if (offset != rssize)
|
if (offset != rssize)
|
||||||
{
|
{
|
||||||
@ -984,9 +986,10 @@ RsNxsSyncMsg* RsNxsSerialiser::deserialNxsSyncMsg(void *data, uint32_t *size)
|
|||||||
|
|
||||||
ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber));
|
ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber));
|
||||||
ok &= getRawUInt8(data, *size, &offset, &(item->flag));
|
ok &= getRawUInt8(data, *size, &offset, &(item->flag));
|
||||||
ok &= getRawUInt32(data, *size, &offset, &(item->syncAge));
|
ok &= getRawUInt32(data, *size, &offset, &(item->createdSince));
|
||||||
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash);
|
||||||
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_GROUPID, item->grpId);
|
ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_GROUPID, item->grpId);
|
||||||
|
ok &= getRawUInt32(data, *size, &offset, &(item->updateTS));
|
||||||
|
|
||||||
if (offset != rssize)
|
if (offset != rssize)
|
||||||
{
|
{
|
||||||
@ -1057,6 +1060,7 @@ uint32_t RsNxsSerialiser::sizeNxsSyncGrp(RsNxsSyncGrp *item)
|
|||||||
s += 1; // flag
|
s += 1; // flag
|
||||||
s += 4; // sync age
|
s += 4; // sync age
|
||||||
s += GetTlvStringSize(item->syncHash);
|
s += GetTlvStringSize(item->syncHash);
|
||||||
|
s += 4; // updateTS
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -1086,6 +1090,7 @@ uint32_t RsNxsSerialiser::sizeNxsSyncMsg(RsNxsSyncMsg *item)
|
|||||||
s += 4; // age
|
s += 4; // age
|
||||||
s += GetTlvStringSize(item->grpId);
|
s += GetTlvStringSize(item->grpId);
|
||||||
s += GetTlvStringSize(item->syncHash);
|
s += GetTlvStringSize(item->syncHash);
|
||||||
|
s += 4; // updateTS
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -1111,7 +1116,7 @@ uint32_t RsNxsSerialiser::sizeNxsTrans(RsNxsTransac *item){
|
|||||||
s += 4; // transaction number
|
s += 4; // transaction number
|
||||||
s += 2; // flag
|
s += 2; // flag
|
||||||
s += 4; // nMsgs
|
s += 4; // nMsgs
|
||||||
s += 4; // timeout
|
s += 4; // updateTS
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -1141,16 +1146,18 @@ void RsNxsGrp::clear()
|
|||||||
void RsNxsSyncGrp::clear()
|
void RsNxsSyncGrp::clear()
|
||||||
{
|
{
|
||||||
flag = 0;
|
flag = 0;
|
||||||
syncAge = 0;
|
createdSince = 0;
|
||||||
syncHash.clear();
|
syncHash.clear();
|
||||||
|
updateTS = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsNxsSyncMsg::clear()
|
void RsNxsSyncMsg::clear()
|
||||||
{
|
{
|
||||||
grpId.clear();
|
grpId.clear();
|
||||||
flag = 0;
|
flag = 0;
|
||||||
syncAge = 0;
|
createdSince = 0;
|
||||||
syncHash.clear();
|
syncHash.clear();
|
||||||
|
updateTS = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsNxsSyncGrpItem::clear()
|
void RsNxsSyncGrpItem::clear()
|
||||||
@ -1172,6 +1179,7 @@ void RsNxsSyncMsgItem::clear()
|
|||||||
void RsNxsTransac::clear(){
|
void RsNxsTransac::clear(){
|
||||||
transactFlag = 0;
|
transactFlag = 0;
|
||||||
nItems = 0;
|
nItems = 0;
|
||||||
|
updateTS = 0;
|
||||||
timestamp = 0;
|
timestamp = 0;
|
||||||
transactionNumber = 0;
|
transactionNumber = 0;
|
||||||
}
|
}
|
||||||
@ -1185,10 +1193,11 @@ std::ostream& RsNxsSyncGrp::print(std::ostream &out, uint16_t indent)
|
|||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "Hash: " << syncHash << std::endl;
|
out << "Hash: " << syncHash << std::endl;
|
||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "Sync Age: " << syncAge << std::endl;
|
out << "Sync Age: " << createdSince << std::endl;
|
||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "flag" << flag << std::endl;
|
out << "flag" << flag << std::endl;
|
||||||
|
printIndent(out , int_Indent);
|
||||||
|
out << "updateTS" << updateTS << std::endl;
|
||||||
|
|
||||||
printRsItemEnd(out ,"RsNxsSyncGrp", indent);
|
printRsItemEnd(out ,"RsNxsSyncGrp", indent);
|
||||||
|
|
||||||
@ -1217,11 +1226,13 @@ std::ostream& RsNxsSyncMsg::print(std::ostream &out, uint16_t indent)
|
|||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "GrpId: " << grpId << std::endl;
|
out << "GrpId: " << grpId << std::endl;
|
||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "syncAge: " << syncAge << std::endl;
|
out << "createdSince: " << createdSince << std::endl;
|
||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "syncHash: " << syncHash << std::endl;
|
out << "syncHash: " << syncHash << std::endl;
|
||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "flag: " << flag << std::endl;
|
out << "flag: " << flag << std::endl;
|
||||||
|
printIndent(out , int_Indent);
|
||||||
|
out << "updateTS: " << updateTS << std::endl;
|
||||||
|
|
||||||
printRsItemEnd(out, "RsNxsSyncMsg", indent);
|
printRsItemEnd(out, "RsNxsSyncMsg", indent);
|
||||||
return out;
|
return out;
|
||||||
@ -1316,6 +1327,8 @@ std::ostream& RsNxsTransac::print(std::ostream &out, uint16_t indent){
|
|||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
out << "timeout: " << timestamp << std::endl;
|
out << "timeout: " << timestamp << std::endl;
|
||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
|
out << "updateTS: " << updateTS << std::endl;
|
||||||
|
printIndent(out , int_Indent);
|
||||||
out << "transactionNumber: " << transactionNumber << std::endl;
|
out << "transactionNumber: " << transactionNumber << std::endl;
|
||||||
printIndent(out , int_Indent);
|
printIndent(out , int_Indent);
|
||||||
|
|
||||||
|
@ -100,7 +100,8 @@ public:
|
|||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
||||||
|
|
||||||
uint8_t flag; // advises whether to use sync hash
|
uint8_t flag; // advises whether to use sync hash
|
||||||
uint32_t syncAge; // how far back to sync data
|
uint32_t createdSince; // how far back to sync data
|
||||||
|
uint32_t updateTS; // time of last group update
|
||||||
std::string syncHash; // use to determine if changes that have occured since last hash
|
std::string syncHash; // use to determine if changes that have occured since last hash
|
||||||
|
|
||||||
|
|
||||||
@ -146,6 +147,9 @@ public:
|
|||||||
|
|
||||||
uint16_t transactFlag;
|
uint16_t transactFlag;
|
||||||
uint32_t nItems;
|
uint32_t nItems;
|
||||||
|
uint32_t updateTS;
|
||||||
|
|
||||||
|
// not serialised
|
||||||
uint32_t timestamp;
|
uint32_t timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -235,7 +239,8 @@ public:
|
|||||||
|
|
||||||
std::string grpId;
|
std::string grpId;
|
||||||
uint8_t flag;
|
uint8_t flag;
|
||||||
uint32_t syncAge;
|
uint32_t createdSince;
|
||||||
|
uint32_t updateTS; // time of last update
|
||||||
std::string syncHash;
|
std::string syncHash;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user