diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/scheduledsendmtm/schedulesendmtm/src/MsvSchedulePackage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/scheduledsendmtm/schedulesendmtm/src/MsvSchedulePackage.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,150 @@ +// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include +#include +#include +#include +#include +#include + +// +// +// TMsvSchedulePackage Implementation +// +// + +/** +Default constructor. +*/ + +EXPORT_C TMsvSchedulePackage::TMsvSchedulePackage() +: iId(0), iCommandId(0), iPollProgress(0) + { + } + + +HBufC* TMsvSchedulePackage::PackLC() const + { + //Externalize this into a CBufFlat + CBufFlat* flat = CBufFlat::NewL(sizeof(TMsvSchedulePackage)); + CleanupStack::PushL(flat); + + RBufWriteStream writeStream(*flat); + ExternalizeL(writeStream); + writeStream.CommitL(); + + const TPtr8 ptr8(flat->Ptr(0)); + + //Convert the CBufFlat into a HBufC16 + HBufC* buf16 = Convert(ptr8).AllocL(); + + CleanupStack::PopAndDestroy(flat); + CleanupStack::PushL(buf16); + + return buf16; + } + + +/** +Packs the object into a 16-bit descriptor. + +The function then attempts to copy the descriptor into aTask.iName, +if aTask.iName is large enough; otherwise, it copies it into aDes (a new +HBufC). + +aDes is placed on the cleanup stack. + +@param aTask +Task information for this message. + +@param aDes On return, a new descriptor, possibly packaging the object. +aDes.Length() == 0 if the object was successfully packed in aTask.iName +instead. +*/ + +EXPORT_C void TMsvSchedulePackage::PackLC(TTaskInfo& aTask, HBufC*& aDes) const + { + aTask.iName.Zero(); + aDes = PackLC(); + + if (aDes->Length() <= aTask.iName.MaxLength()) + { + aTask.iName.Copy(*aDes); + CleanupStack::PopAndDestroy(aDes); + aDes = HBufC::NewLC(0); + } + } + + +/** +Restores this object from a 16-bit descriptor that was packed using PackLC(). + +@param aTask +The object is restored from aTask.iName if aTask.iName.Length() doesn't equal +zero. + +@param aDes +The object is restored from this descriptor if aTask.iName.Length() equals +zero. +*/ + +EXPORT_C void TMsvSchedulePackage::UnpackL(const TTaskInfo& aTask, const TDesC& aDes) + { + if (aTask.iName.Length() != 0) + UnpackL(aTask.iName); + else + UnpackL(aDes); + } + + +void TMsvSchedulePackage::UnpackL(const TDesC& aDes) + { + const TPtrC8 ptr8(Convert(aDes)); + RDesReadStream readStream(ptr8); + InternalizeL(readStream); + } + + +void TMsvSchedulePackage::ExternalizeL(RWriteStream& aStream) const + { + aStream.WriteInt32L(iId); + aStream.WriteInt32L(iCommandId); + aStream.WriteInt32L(iPollProgress.Int()); + aStream << iParameter; + } + + +void TMsvSchedulePackage::InternalizeL(RReadStream& aStream) + { + iId = aStream.ReadInt32L(); + iCommandId = aStream.ReadInt32L(); + iPollProgress = (TTimeIntervalMicroSeconds32) aStream.ReadInt32L(); + aStream >> iParameter; + } + + +TPtrC TMsvSchedulePackage::Convert(const TDesC8& aDes) const + { + const TInt size8 = aDes.Size(); + const TInt size16 = (size8 / 2) + (size8 % 2); + return TPtrC(REINTERPRET_CAST(const TUint16*, aDes.Ptr()), size16); + } + + +TPtrC8 TMsvSchedulePackage::Convert(const TDesC16& aDes) const + { + return TPtrC8(REINTERPRET_CAST(const TUint8*, aDes.Ptr()), aDes.Size()); + }