messagingfw/msgsrvnstore/server/src/TMsvPackedNotifierRequest.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/src/TMsvPackedNotifierRequest.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,82 @@
+// Copyright (c) 2005-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 <tmsvpackednotifierrequest.h>
+#include "MSVPANIC.H"
+
+const TInt KTSecInfoNumTInts = sizeof(TSecurityInfo)/sizeof(TInt);
+
+
+EXPORT_C TMsvPackedNotifierRequest::TMsvPackedNotifierRequest(HBufC8*& aBuffer)
+: iBuffer(aBuffer)
+	{
+	}
+
+EXPORT_C TInt TMsvPackedNotifierRequest::Pack(const CMsvEntrySelection& aSelection, const TSecurityInfo& aSecurityInfo)
+	{
+	// check the buffer is large enough for the CMsvSelection array and the TSecurityInfo object
+	// note the extra +1 is to package the CMsvSelection array count
+	TInt requiredSize = ((aSelection.Count()+KTSecInfoNumTInts+1)*sizeof(TInt));
+	if (requiredSize>iBuffer->Des().MaxSize())
+		{
+		return KErrOverflow;
+		}
+
+	// set the buffer (contents) length
+	iBuffer->Des().SetLength(requiredSize);
+
+	// get pointer to start of iBuffer data 
+	TInt* ptr = (TInt*) const_cast<TUint8*> (iBuffer->Ptr());
+	
+	// pack MSvSelection array size and contents
+	*ptr++ = aSelection.Count();
+	for (TInt count=0; count<aSelection.Count(); ++count)
+		{
+		*ptr++ = aSelection.At(count);
+		}
+		
+	// get pointer to security info object
+	TInt* secPtr = (TInt*) const_cast<TSecurityInfo*> (&aSecurityInfo);
+
+	// pack TSecurityInfo size and copy into buffer
+	for (TInt count=0; count<KTSecInfoNumTInts; ++count)
+		{
+		*ptr++ = *secPtr++;
+		}
+
+	return KErrNone;
+	}
+
+
+EXPORT_C void TMsvPackedNotifierRequest::UnpackL(const TDesC8& aBuffer, CMsvEntrySelection& aSelection, TSecurityInfo& aSecurityInfo)
+	{
+    __ASSERT_DEBUG(aSelection.Count()==0, PanicServer(EMsvOperationUnpackSelectionNotEmpty));	
+	TInt* ptr = (TInt*) const_cast<TUint8*> (aBuffer.Ptr());
+
+	// extract the CMsvEntrySelection object
+	TInt count = *ptr++;
+	while (count--)
+		{
+		aSelection.AppendL(*ptr++);
+		}
+
+	// extract the TSecurityInfo object
+	TInt* secPtr = (TInt*) const_cast<TSecurityInfo*> (&aSecurityInfo);
+	count = KTSecInfoNumTInts;
+	while (count--)
+		{
+		*secPtr++ = *ptr++;
+		}
+	}