syncmlfw/dm/dmutils/src/nsmldmcmdarghandler.cpp
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/dm/dmutils/src/nsmldmcmdarghandler.cpp	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,402 @@
+/*
+* Copyright (c) 2005 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:  DM Utilities
+*
+*/
+
+
+#include <s32mem.h>
+#include <smldmadapter.h>
+#include "nsmldmcmdarghandler.h"
+
+
+
+
+// ===========================================================================
+// NSmlDmCmdArgHandler
+// ===========================================================================
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::PacketDataL()
+// Packet elements to stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::PacketDataL(RWriteStream& aWriteStream,
+	const TDesC8& aLuid,
+	const TDesC8& aData,
+	const TDesC8& aURI,
+	const TDesC8& aType)
+	{
+	aWriteStream.WriteUint16L(aLuid.Length());
+	aWriteStream.WriteL(aLuid);
+	aWriteStream.WriteUint16L(aData.Length());
+	aWriteStream.WriteL(aData);
+	aWriteStream.WriteUint16L(aURI.Length());
+	aWriteStream.WriteL(aURI);
+	aWriteStream.WriteUint16L(aType.Length());
+	aWriteStream.WriteL(aType);
+	}
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::ParseDataL()
+// Parse data from stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::ParseDataL(RReadStream& aReadStream,
+	HBufC8*& aLuid,
+	HBufC8*& aData,
+	HBufC8*& aURI,
+	HBufC8*& aType)
+	{
+	TUint16 length16;
+	length16 = aReadStream.ReadUint16L();
+	aLuid = HBufC8::NewLC(length16);
+	TPtr8 luidPtr= aLuid->Des();
+	aReadStream.ReadL(luidPtr,length16);
+	
+	length16 = aReadStream.ReadUint16L();
+	aData = HBufC8::NewLC(length16);
+	TPtr8 dataPtr= aData->Des();
+	aReadStream.ReadL(dataPtr,length16);
+
+	length16 = aReadStream.ReadUint16L();
+	aURI = HBufC8::NewLC(length16);
+	TPtr8 uriPtr= aURI->Des();
+	aReadStream.ReadL(uriPtr,length16);
+
+	length16 = aReadStream.ReadUint16L();
+	aType = HBufC8::NewLC(length16);
+	TPtr8 typePtr= aType->Des();
+	aReadStream.ReadL(typePtr,length16);
+	
+	CleanupStack::Pop(4); //aLuid,aData,aURI,aType
+	}
+	
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::PacketFetchArgumentsL()
+// Packet fetch arguments to stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::PacketFetchArgumentsL(
+	RWriteStream& aWriteStream,
+	const TDesC8& aLuid,
+	const TDesC8& aURI,
+	const TDesC8& aType,
+	const CArrayFixFlat<TSmlDmMappingInfo>& aPreviousURISegementList)
+	{
+	aWriteStream.WriteUint16L(aLuid.Length());
+	aWriteStream.WriteL(aLuid);
+	aWriteStream.WriteUint16L(aURI.Length());
+	aWriteStream.WriteL(aURI);
+	aWriteStream.WriteUint16L(aType.Length());
+	aWriteStream.WriteL(aType);
+	TUint8 count=aPreviousURISegementList.Count();
+	aWriteStream.WriteUint8L(count);
+	for(TUint8 i=0;i<count;i++)
+		{
+		aWriteStream.WriteUint8L(
+			aPreviousURISegementList.At(i).iURISeg.Length());
+			
+		aWriteStream.WriteL(aPreviousURISegementList.At(i).iURISeg);
+		
+		aWriteStream.WriteUint8L(
+			aPreviousURISegementList.At(i).iURISegLUID.Length());
+			
+		aWriteStream.WriteL(aPreviousURISegementList.At(i).iURISegLUID);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::ParseFetchArgumentsL()
+// Parse fetch arguments from stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::ParseFetchArgumentsL(
+	RReadStream& aReadStream,
+	HBufC8*& aLuid,
+	HBufC8*& aURI,
+	HBufC8*& aType,
+	CArrayFixFlat<TSmlDmMappingInfo>& aPreviousURISegementList,
+	RPointerArray<HBufC8>& aLuids)
+	{
+	TUint16 length16;
+	length16 = aReadStream.ReadUint16L();
+	aLuid = HBufC8::NewLC(length16);
+	TPtr8 luidPtr = aLuid->Des();
+	aReadStream.ReadL(luidPtr,length16);
+
+	length16 = aReadStream.ReadUint16L();
+	aURI = HBufC8::NewLC(length16);
+	TPtr8 uriPtr = aURI->Des();
+	aReadStream.ReadL(uriPtr,length16);
+	
+	length16 = aReadStream.ReadUint16L();
+	aType = HBufC8::NewLC(length16);
+	TPtr8 typePtr = aType->Des();
+	aReadStream.ReadL(typePtr,length16);
+	
+	TUint8 count = aReadStream.ReadUint8L();
+	TUint8 length8;
+	
+	for(TInt i=0;i<count;i++)
+		{
+		length8 = aReadStream.ReadUint8L();
+		HBufC8 *uriSeg =HBufC8::NewLC(length8);
+		TPtr8 uriSegPtr = uriSeg->Des();
+		aReadStream.ReadL(uriSegPtr,length8);
+
+		length8 = aReadStream.ReadUint8L();
+		HBufC8 *luid =HBufC8::NewLC(length8);
+		TPtr8 luidPtr = luid->Des();
+		aReadStream.ReadL(luidPtr,length8);
+		aLuids.AppendL(luid);
+		CleanupStack::Pop(); //luid
+
+		TSmlDmMappingInfo mapInfo;
+		mapInfo.iURISeg = TBufC8<KSmlMaxURISegLen>(uriSegPtr);
+		mapInfo.iURISegLUID.Set(*luid);
+		aPreviousURISegementList.AppendL(mapInfo);
+		CleanupStack::PopAndDestroy(); //uriSeg
+		}
+	CleanupStack::Pop(3); //aLuid,aURI,aType
+	}
+		
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::PacketMappingsL()
+// Packet mappings to stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::PacketMappingsL(
+	RWriteStream& aWriteStream,
+	const CArrayPtrSeg<HBufC8>& aURIs,
+	const CArrayPtrSeg<HBufC8>& aLuids )
+	{
+
+	if(aURIs.Count()!=aLuids.Count())
+		{
+		aWriteStream.WriteUint16L(0);
+		return;
+		}
+
+	aWriteStream.WriteUint16L(aURIs.Count());
+	for(TInt i=0;i<aURIs.Count();i++)
+		{
+		aWriteStream.WriteUint16L(aURIs.At(i)->Length());
+		aWriteStream.WriteL(*aURIs.At(i));
+		aWriteStream.WriteUint16L(aLuids.At(i)->Length());
+		aWriteStream.WriteL(*aLuids.At(i));
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::ParseMappingsL()
+// Parse mappings from stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::ParseMappingsL(
+	RReadStream& aReadStream,
+	CArrayPtrSeg<HBufC8>& aURIs,
+	CArrayPtrSeg<HBufC8>& aLuids )
+	{
+	TUint16 mapCount = aReadStream.ReadUint16L();
+	
+	for(TUint16 i=0;i<mapCount;i++)
+		{
+		TUint16 length;
+		length = aReadStream.ReadUint16L();
+		HBufC8* uri = HBufC8::NewLC(length);
+		TPtr8 uriPtr = uri->Des();
+		aReadStream.ReadL(uriPtr,length);
+		CleanupStack::Pop(); //uri
+		aURIs.AppendL(uri);
+
+		length = aReadStream.ReadUint16L();
+		HBufC8* luid = HBufC8::NewLC(length);
+		TPtr8 luidPtr = luid->Des();
+		aReadStream.ReadL(luidPtr,length);
+		CleanupStack::Pop(); //luid
+		aLuids.AppendL(luid);
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::PacketStatusesL()
+// Packet statuses to stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::PacketStatusesL(RWriteStream& aWriteStream,
+	const RArray<TNSmlDmStatusElement>& aStatusArray)
+	{
+	TUint16 count = aStatusArray.Count();
+	aWriteStream.WriteUint16L(count);
+	for(TInt i=0;i<count;i++)
+		{
+		aWriteStream.WriteUint16L(aStatusArray[i].iStatusRef);
+		aWriteStream.WriteUint8L(aStatusArray[i].iStatus);
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::ParseStatusesL()
+// Parse statuses from stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::ParseStatusesL(RReadStream& aReadStream,
+	RArray<TNSmlDmStatusElement>& aStatusArray )
+	{
+	TUint16 count = aReadStream.ReadUint16L();
+	
+	for(TUint16 i=0;i<count;i++)
+		{
+		TNSmlDmStatusElement element;
+		element.iStatusRef = aReadStream.ReadUint16L();
+		element.iStatus = (MSmlDmAdapter::TError) aReadStream.ReadUint8L();
+		aStatusArray.AppendL(element);
+		}
+	}
+
+
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::PacketResultsL()
+// Packet results to stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::PacketResultsL(RWriteStream& aWriteStream,
+	const RPointerArray<CNSmlDmResultElement>& aResults)
+	{
+	TUint16 count = aResults.Count();
+	aWriteStream.WriteUint16L(count);
+
+	for(TInt i=0;i<count;i++)
+		{
+		aWriteStream.WriteUint16L(aResults[i]->iResultRef);
+		aWriteStream.WriteUint32L(aResults[i]->iResult->Size());
+		aWriteStream.WriteL(aResults[i]->iResult->Ptr(0),aResults[i]->iResult->Size());
+		aWriteStream.WriteUint16L(aResults[i]->iMimeType->Length());
+		aWriteStream.WriteL(*aResults[i]->iMimeType);
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::ParseResultsL()
+// Parse results from stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::ParseResultsL(RReadStream& aReadStream,
+	RPointerArray<CNSmlDmResultElement>& aResults)
+	{
+	TUint16 count = aReadStream.ReadUint16L();
+	
+	for(TUint16 i=0;i<count;i++)
+		{
+		CNSmlDmResultElement* element = new (ELeave) CNSmlDmResultElement();
+		CleanupStack::PushL(element);
+		element->iResultRef = aReadStream.ReadUint16L();
+		TUint32 len32 = aReadStream.ReadUint32L();
+		if(len32)
+			{
+			element->iResult = CBufFlat::NewL(len32);
+			}
+		else
+			{
+			element->iResult = CBufFlat::NewL(8);
+			}
+		element->iResult->ResizeL(len32);
+		TPtr8 resultPtr = element->iResult->Ptr(0);
+		aReadStream.ReadL(resultPtr,len32);
+
+		TUint16 len16 = aReadStream.ReadUint16L();
+		element->iMimeType = HBufC8::NewL(len16);
+		TPtr8 mimePtr = element->iMimeType->Des();
+		aReadStream.ReadL(mimePtr,len16);
+		aResults.AppendL(element);	
+		CleanupStack::Pop();  //element
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::PacketCopyArgumentsL()
+// Packet copy arguments to stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::PacketCopyArgumentsL(
+	RWriteStream& aWriteStream,
+	const TDesC8& aTargetLuid,
+	const TDesC8& aTargetURI,
+	const TDesC8& aSourceLuid,
+	const TDesC8& aSourceURI,
+	const TDesC8& aType)
+	{
+	aWriteStream.WriteUint16L(aTargetLuid.Length());
+	aWriteStream.WriteL(aTargetLuid);
+	aWriteStream.WriteUint16L(aTargetURI.Length());
+	aWriteStream.WriteL(aTargetURI);
+	aWriteStream.WriteUint16L(aSourceLuid.Length());
+	aWriteStream.WriteL(aSourceLuid);
+	aWriteStream.WriteUint16L(aSourceURI.Length());
+	aWriteStream.WriteL(aSourceURI);
+	aWriteStream.WriteUint16L(aType.Length());
+	aWriteStream.WriteL(aType);
+	}
+
+// ---------------------------------------------------------------------------
+// NSmlDmCmdArgHandler::ParseCopyArgumentsL()
+// Parse copy arguments from stream
+// ---------------------------------------------------------------------------
+EXPORT_C void NSmlDmCmdArgHandler::ParseCopyArgumentsL(
+	RReadStream& aReadStream,
+	HBufC8*& aTargetLuid,
+	HBufC8*& aTargetURI,
+	HBufC8*& aSourceLuid,
+	HBufC8*& aSourceURI,
+	HBufC8*& aType)
+	{
+	TUint16 length16;
+
+	length16 = aReadStream.ReadUint16L();
+	aTargetLuid = HBufC8::NewLC(length16);
+	TPtr8 targetLuidPtr= aTargetLuid->Des();
+	aReadStream.ReadL(targetLuidPtr,length16);
+	
+	length16 = aReadStream.ReadUint16L();
+	aTargetURI = HBufC8::NewLC(length16);
+	TPtr8 targetUriPtr= aTargetURI->Des();
+	aReadStream.ReadL(targetUriPtr,length16);
+
+	length16 = aReadStream.ReadUint16L();
+	aSourceLuid = HBufC8::NewLC(length16);
+	TPtr8 sourceLuidPtr= aSourceLuid->Des();
+	aReadStream.ReadL(sourceLuidPtr,length16);
+	
+	length16 = aReadStream.ReadUint16L();
+	aSourceURI = HBufC8::NewLC(length16);
+	TPtr8 sourceUriPtr= aSourceURI->Des();
+	aReadStream.ReadL(sourceUriPtr,length16);
+
+	length16 = aReadStream.ReadUint16L();
+	aType = HBufC8::NewLC(length16);
+	TPtr8 typePtr= aType->Des();
+	aReadStream.ReadL(typePtr,length16);
+
+	//POP aTargetLuid,aTargetURI,aSourceLuid,aSourceURI,aType
+	CleanupStack::Pop(5); 
+	}
+
+
+// ===========================================================================
+// NSmlDmCmdArgHandler
+// ===========================================================================
+
+// ---------------------------------------------------------------------------
+// CNSmlDmResultElement::~CNSmlDmResultElement()
+// ---------------------------------------------------------------------------
+EXPORT_C CNSmlDmResultElement::~CNSmlDmResultElement()
+	{
+	delete iResult;
+	delete iMimeType;
+	}
+