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); } }
// SMsgDirG2ClearDataObjects::Unpack // Virtual method from SmallMessage. Extracts data from message buffer. void SMsgDirG2ClearDataObjects::Unpack(void) { WTRACE("SMsgDirG2ClearDataObjects::Unpack"); mClearTypes.clear(); mKeyType = (GetMessageType() == WONMsg::DirG2ServiceClearDataObjects ? KT_SERVICE : KT_DIRECTORY); SMsgDirG2UpdateBase::Unpack(); if ((GetServiceType() != WONMsg::SmallDirServerG2) || ((GetMessageType() != WONMsg::DirG2DirectoryClearDataObjects) && (GetMessageType() != WONMsg::DirG2ServiceClearDataObjects))) { WDBG_AH("SMsgDirG2ClearDataObjects::Unpack Not a DirG2ClearDataObjects message!"); throw WONMsg::BadMsgException(*this, __LINE__, __FILE__, "Not a DirG2ClearDataObjects message."); } UnpackKey(*this); unsigned short aCt = ReadShort(); WDBG_LL("SMsgDirG2ClearDataObjects::Unpack Reading " << aCt << " entries."); for (int i=0; i < aCt; i++) { DataObject anObj; unsigned char aLen = ReadByte(); if (aLen > 0) anObj.GetDataType().assign(reinterpret_cast<const unsigned char*>(ReadBytes(aLen)), aLen); mClearTypes.insert(anObj); } UnpackPeerData(); }
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); } } }
void SMsgDirG2QueryExtendBase::UnpackExtended(void) { WTRACE("SMsgDirG2QueryExtendBase::UnpackExtended"); WDBG_LL("SMsgDirG2QueryExtendBase::UnpackExtended Extended=" << mExtended); mGetTypes.clear(); if (! mExtended) return; unsigned short aCt = ReadShort(); WDBG_LL("SMsgDirG2QueryExtendBase::UnpackExtended Reading " << aCt << " entries."); for (int i=0; i < aCt; i++) { DataObject anObj; unsigned char aLen = ReadByte(); if (aLen > 0) { anObj.GetDataType().assign(reinterpret_cast<const unsigned char*>(ReadBytes(aLen)), aLen); mGetTypes.insert(anObj); } } }