--- /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 <e32base.h>
+#include <e32std.h>
+#include <msvstd.h>
+#include <msvschedulepackage.h>
+#include <s32mem.h>
+#include <schinfo.h>
+
+//
+//
+// 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());
+ }