messagingfw/scheduledsendmtm/schedulesendmtm/src/MsvSchedulePackage.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /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());
+	}