void DirEntity::UnpackDataObjects(BaseMessage& theMsgR, DataObjectTypeSet& theSetR, unsigned long theFlags) { WTRACE("DirEntity::UnpackDataObjects"); unsigned short aCt = theMsgR.ReadShort(); WDBG_LL("DirEntity::UnpackDataObjects Unpacking data objects, size=" << aCt); theSetR.clear(); bool unpackType = ((theFlags & WONMsg::GF_ADDDOTYPE) != 0); bool unpackData = ((theFlags & WONMsg::GF_ADDDODATA) != 0); for (int i=0; i < aCt; i++) { DataObject anObj; if (unpackType) { unsigned char aLen = theMsgR.ReadByte(); anObj.GetDataType().assign(reinterpret_cast<const unsigned char*>(theMsgR.ReadBytes(aLen)), aLen); } else anObj.GetDataType().assign(reinterpret_cast<const unsigned char*>(&i), sizeof(i)); if (unpackData) { unsigned short aLen = theMsgR.ReadShort(); anObj.GetData().assign(reinterpret_cast<const unsigned char*>(theMsgR.ReadBytes(aLen)), aLen); } theSetR.insert(anObj); } }
void SMsgDirG2UpdateExtendBase::UnpackExtended(void) { WTRACE("SMsgDirG2UpdateExtendBase::UnpackExtended"); WDBG_LL("SMsgDirG2UpdateExtendBase::UnpackExtended enableDataObjects=" << mEnableDataObjects << " enableACLs=" << mEnableACLs); mDataObjects.clear(); mACLs.clear(); if (mEnableDataObjects) { unsigned short aCt = ReadShort(); WDBG_LL("SMsgDirG2UpdateExtendBase::UnpackExtended Reading " << aCt << " data objects."); for (int i=0; i < aCt; i++) { DataObject anObj; unsigned char aTypeLen = ReadByte(); if (aTypeLen > 0) anObj.GetDataType().assign(reinterpret_cast<const unsigned char*>(ReadBytes(aTypeLen)), aTypeLen); unsigned short aDataLen = ReadShort(); if (aDataLen > 0) anObj.GetData().assign(reinterpret_cast<const unsigned char*>(ReadBytes(aDataLen)), aDataLen); mDataObjects.insert(anObj); } } if (mEnableACLs) { unsigned short aCt = ReadShort(); WDBG_LL("SMsgDirG2UpdateExtendBase::UnpackExtended Reading " << aCt << " ACLs."); for (int i=0; i < aCt; i++) { DirACL anACL; anACL.mType = static_cast<WONMsg::DirG2ACLType>(ReadByte()); unsigned short aPermCt = ReadShort(); for (int j=0; j < aPermCt; j++) { Permission aPerm; aPerm.mUserId = ReadLong(); aPerm.mCommunityId = ReadLong(); aPerm.mTrustLevel = ReadShort(); anACL.mACL.insert(aPerm); } mACLs.push_back(anACL); } } }