mtpfws/mtpfw/dataproviders/dputility/src/mmtpservicehandler.cpp
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mtpfws/mtpfw/dataproviders/dputility/src/mmtpservicehandler.cpp	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,242 @@
+// Copyright (c) 2006-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:
+// mw/remoteconn/mtpfws/mtpfw/dataproviders/dputility/src/mmtpservicehandler.cpp
+
+#include <centralrepository.h>
+#include <mtp/cmtptypeserviceobjpropextnform.h>
+
+#include "mmtpservicehandler.h"
+
+
+
+// Some form need to destroy before the property push to stack.
+EXPORT_C CMTPTypeObjectPropDesc* MMTPServiceHandler::GenerateSvcObjPropertyL(
+	TUint aDataType, const TMTPTypeGuid& aPKNamespace, TUint aPKID, const TDesC& aName,
+	TUint8 aFormFlag, const MMTPType* aForm, CMTPTypeObjectPropDesc::TMTPObjectPropDescGetSet aObjGetSet,
+	TUint16 aObjPropCode, TUint32 aGroupCode)
+	{
+	CMTPTypeServiceObjPropExtnForm* serviceObjectForm
+	= CMTPTypeServiceObjPropExtnForm::NewLC(aDataType, aPKNamespace, aPKID,
+											aName, aFormFlag, aForm);
+	CMTPTypeObjectPropDesc::TPropertyInfo info;
+	info.iDataType     = aDataType;
+	info.iFormFlag     = CMTPTypeObjectPropDesc::EServiceObjPropExtnForm;
+	info.iGetSet       = aObjGetSet;
+	CMTPTypeObjectPropDesc* pObjectProperty
+	= CMTPTypeObjectPropDesc::NewL(aObjPropCode, info, serviceObjectForm);
+	pObjectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode, aGroupCode);
+	// Form pointer is special and need to be deleted by caller.
+	CleanupStack::PopAndDestroy(serviceObjectForm);
+	return pObjectProperty;
+	}
+
+EXPORT_C CMTPTypeObjectPropDesc* MMTPServiceHandler::GenerateSvcObjPropertyLC(
+	TUint aDataType, const TMTPTypeGuid&  aPKNamespace, TUint aPKID, const TDesC& aName,
+	TUint8 aFormFlag, const MMTPType* aForm, CMTPTypeObjectPropDesc::TMTPObjectPropDescGetSet aObjGetSet,
+	TUint16 aObjPropCode, TUint32 aGroupCode)
+	{
+	CMTPTypeObjectPropDesc* pObjectProperty = NULL;
+	pObjectProperty = GenerateSvcObjPropertyL(aDataType, aPKNamespace, aPKID, aName, aFormFlag, aForm, aObjGetSet, aObjPropCode, aGroupCode);
+	CleanupStack::PushL(pObjectProperty);
+	return pObjectProperty;
+	}
+
+EXPORT_C TMTPResponseCode MMTPServiceHandler::SaveServicePropValue(
+	CRepository& aRepository, TUint aColumnNum, TInt aNewData)
+	{
+	TInt ret;
+	TMTPResponseCode responseCode = EMTPRespCodeOK;
+	ret = aRepository.Set(aColumnNum, aNewData);
+	if (KErrNone != ret)
+		{
+		responseCode = EMTPRespCodeGeneralError;
+		}
+	return responseCode;
+	}
+
+EXPORT_C TMTPResponseCode MMTPServiceHandler::SaveServicePropValue(
+	CRepository& aRepository, TUint aColumnNum, TMTPTypeGuid& aNewData)
+	{
+	TInt ret;
+	TMTPResponseCode responseCode = EMTPRespCodeOK;
+	TBuf8<KMTPTypeINT128Size>  data;
+	data.FillZ(data.MaxLength());
+	TUint64 upperValue = aNewData.UpperValue();
+	TUint64 lowerValue = aNewData.LowerValue();
+
+	/**
+	Least significant 64-bit buffer offset.
+	*/
+	const TInt           KMTPTypeUint128OffsetLS = 0;
+	/**
+	Most significant 64-bit buffer offset.
+	*/
+	const TInt           KMTPTypeUint128OffsetMS = 8;
+
+	memcpy(&data[KMTPTypeUint128OffsetMS], &upperValue, sizeof(upperValue));
+	memcpy(&data[KMTPTypeUint128OffsetLS], &lowerValue, sizeof(lowerValue));
+
+	ret = aRepository.Set(aColumnNum, data);
+	if (KErrNone != ret)
+		{
+		responseCode = EMTPRespCodeGeneralError;
+		}
+	return responseCode;
+	}
+
+EXPORT_C CMTPTypeObjectPropDesc* MMTPServiceHandler::GenerateGenericObjectPropDescLC(TUint16 aObjPropCode)
+	{
+	const TMTPTypeGuid KMTPGenObjPropNamespaceGUID(
+		MAKE_TUINT64(KMTPGenericObjectNSGUID[0], KMTPGenericObjectNSGUID[1]),
+		MAKE_TUINT64(KMTPGenericObjectNSGUID[2], KMTPGenericObjectNSGUID[3]));
+	const TMTPTypeGuid KMTPSyncObjPropNamespace(
+		MAKE_TUINT64(KMTPSyncObjcetNSGUID[0], KMTPSyncObjcetNSGUID[1]),
+		MAKE_TUINT64(KMTPSyncObjcetNSGUID[2], KMTPSyncObjcetNSGUID[3]));
+
+	CMTPTypeObjectPropDesc* objectProperty = NULL;
+	TMTPTypeUint32 longStringForm(KLongStringMaxLength);
+
+	switch (aObjPropCode)
+		{
+			/* Generic Ojbect Namespace properties */
+			// Parent Object
+		case EMTPGenObjPropCodeParentID:
+			{
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeUINT32, KMTPGenObjPropNamespaceGUID, 3, KObjPropNameParentID, 
+					CMTPTypeObjectPropDesc::ENone, NULL, CMTPTypeObjectPropDesc::EReadOnly, 
+					EMTPGenObjPropCodeParentID, 0x2);
+			break;
+			}
+
+		// Name
+		case EMTPGenObjPropCodeName:
+			{
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeString, KMTPGenObjPropNamespaceGUID, 4, KObjPropNameName, 
+					CMTPTypeObjectPropDesc::ENone, NULL, CMTPTypeObjectPropDesc::EReadOnly, 
+					EMTPGenObjPropCodeName, 0x5);
+			break;
+			}
+
+		// Unique Object Identifier
+		case EMTPGenObjPropCodePersistentUniqueObjectIdentifier:
+			{
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeUINT128, KMTPGenObjPropNamespaceGUID, 5, KObjPropNamePUOID, 
+					CMTPTypeObjectPropDesc::ENone, NULL, CMTPTypeObjectPropDesc::EReadOnly, 
+					EMTPGenObjPropCodePersistentUniqueObjectIdentifier, 0x2);
+			break;
+			}
+
+		// Format Code
+		case EMTPGenObjPropCodeObjectFormat:
+			{
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeUINT16, KMTPGenObjPropNamespaceGUID, 6, KObjPropNameObjectFormat, 
+					CMTPTypeObjectPropDesc::ENone, NULL, CMTPTypeObjectPropDesc::EReadOnly, 
+					EMTPGenObjPropCodeObjectFormat, 0x2);
+			break;
+			}
+
+		// Object Size
+		case EMTPGenObjPropCodeObjectSize:
+			{
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeUINT64, KMTPGenObjPropNamespaceGUID, 11, KObjPropNameObjectSize, 
+					CMTPTypeObjectPropDesc::ENone, NULL, CMTPTypeObjectPropDesc::EReadOnly, 
+					EMTPGenObjPropCodeObjectSize, 0x2);
+			break;
+			}
+
+		//Storage ID
+		case EMTPGenObjPropCodeStorageID:
+			{
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeUINT32, KMTPGenObjPropNamespaceGUID, 23, KObjPropNameStorageID, 
+					CMTPTypeObjectPropDesc::ENone, NULL, CMTPTypeObjectPropDesc::EReadOnly,
+					EMTPGenObjPropCodeStorageID, 0x2);
+			break;
+			}
+
+		// Object Hidden
+		case EMTPGenObjPropCodeObjectHidden:
+			{
+			CMTPTypeObjectPropDescEnumerationForm* hiddenForm
+			= CMTPTypeObjectPropDescEnumerationForm::NewLC(EMTPTypeUINT16);
+			TUint16 values[] = {0x0000, 0x0001};
+			TUint numValues((sizeof(values) / sizeof(values[0])));
+			for (TUint i = 0; i < numValues; i++)
+				{
+				TMTPTypeUint16 data(values[i]);
+				hiddenForm->AppendSupportedValueL(data);
+				}
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyL(
+					EMTPTypeUINT16, KMTPGenObjPropNamespaceGUID, 28, KObjPropNameHidden,
+					CMTPTypeObjectPropDesc::EEnumerationForm, hiddenForm, 
+					CMTPTypeObjectPropDesc::EReadOnly, EMTPGenObjPropCodeObjectHidden, 0x2);
+			CleanupStack::PopAndDestroy(hiddenForm);
+			CleanupStack::PushL(objectProperty);
+			break;
+			}
+
+		// NonConsumable
+		case EMTPGenObjPropCodeNonConsumable:
+			{
+			CMTPTypeObjectPropDescEnumerationForm* nonConsumeForm
+			= CMTPTypeObjectPropDescEnumerationForm::NewLC(EMTPTypeUINT8);
+			TUint8 values[] = {0x00, 0x01};
+			TUint numValues((sizeof(values) / sizeof(values[0])));
+			for (TUint i = 0; i < numValues; i++)
+				{
+				TMTPTypeUint8 data(values[i]);
+				nonConsumeForm->AppendSupportedValueL(data);
+				}
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyL(
+					EMTPTypeUINT8, KMTPGenObjPropNamespaceGUID, 13, KObjPropNameNonConsumable, 
+					CMTPTypeObjectPropDesc::EEnumerationForm, nonConsumeForm,
+					CMTPTypeObjectPropDesc::EReadOnly, EMTPGenObjPropCodeNonConsumable, 0x2);
+			CleanupStack::PopAndDestroy(nonConsumeForm);
+			CleanupStack::PushL(objectProperty);
+			break;
+			}
+
+		// Date Modified
+		case EMTPGenObjPropCodeDateModified:
+			{
+			objectProperty = MMTPServiceHandler::MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeString, KMTPGenObjPropNamespaceGUID, 40, KObjPropNameDateModified, 
+					CMTPTypeObjectPropDesc::EDateTimeForm, NULL, CMTPTypeObjectPropDesc::EReadWrite, 
+					EMTPGenObjPropCodeDateModified, 0x2);
+			break;
+			}
+
+		case EMTPSvcObjPropCodeLastAuthorProxyID :
+			{
+			objectProperty = MMTPServiceHandler::GenerateSvcObjPropertyLC(
+					EMTPTypeUINT128, KMTPSyncObjPropNamespace, 2, KObjPropNameLastAuthorProxyID, 
+					CMTPTypeObjectPropDesc::ENone, NULL, CMTPTypeObjectPropDesc::EReadWrite, 
+					EMTPSvcObjPropCodeLastAuthorProxyID, 0x2);
+
+			break;
+			}
+		//Error
+		default:
+			{
+			// Internal error, get wrong object property, just ignore the property
+			break;
+			}
+		} // End of switch
+	return objectProperty;
+	}