installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp
branchRCL_3
changeset 25 7333d7932ef7
parent 0 ba25891c3a9e
child 26 8b7f4e561641
--- a/installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp	Thu Aug 19 10:02:49 2010 +0300
+++ b/installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -33,9 +33,11 @@
 	_LIT8(KNodeLocalizedName, "localizedName");
 	_LIT8(KNodeMimeType, "mimeType");
 	_LIT8(KNodeSifPluginUid, "sifPluginUid");
-	_LIT8(KNodeInstallerSecureId, "installerSecureId");
-	_LIT8(KNodeExecutionLayerSecureId, "executionLayerSecureId");
-	
+    _LIT8(KNodeCustomAcess, "CustomAcess");
+    _LIT8(KNodeSecureId, "SecureId");
+    _LIT8(KNodeAccessMode, "AccessMode");
+    _LIT8(KNodeLauncherExecutable, "launcherExecutable");
+    
 	_LIT8(KAttrSoftwareTypeName, "name");
 	_LIT8(KAttrLanguage, "language");
 
@@ -118,7 +120,7 @@
 	iNodes.Close();
 	}
 
-void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
+void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
 	{
 	iSwTypeRegInfoArray = &aSwTypeRegInfoArray;
 	
@@ -175,7 +177,7 @@
 			{
 			PushNodeL(ENodeSoftwareType, ENodeSoftwareTypeRegistrationData);
 			HBufC* softwareTypeName = AttributeLC(aAttributes, KAttrSoftwareTypeName);
-			CSoftwareTypeRegInfo* regInfo = CSoftwareTypeRegInfo::NewL(*softwareTypeName);
+			Usif::CSoftwareTypeRegInfo* regInfo = Usif::CSoftwareTypeRegInfo::NewL(*softwareTypeName);
 			CleanupStack::PushL(regInfo);
 			iSwTypeRegInfoArray->AppendL(regInfo);
 			CleanupStack::Pop();
@@ -202,16 +204,28 @@
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
 			PushNodeL(ENodeSifPluginUid, ENodeSoftwareType);
 			break;
-		
-		case ENodeInstallerSecureId:
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			PushNodeL(ENodeInstallerSecureId, ENodeSoftwareType);
-			break;
-		
-		case ENodeExecutionLayerSecureId:
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			PushNodeL(ENodeExecutionLayerSecureId, ENodeSoftwareType);
-			break;
+			
+		case ENodeCustomAccess:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    PushNodeL(ENodeCustomAccess, ENodeSoftwareType);
+		    HBufC* secureId = AttributeLC(aAttributes, KNodeSecureId);
+		    secureId->Des().TrimAll();
+		    iSecureId = TUid::Uid(Str2IntL(*secureId, EHex));
+		    CleanupStack::PopAndDestroy(secureId);
+		    
+		    HBufC* accessMode = AttributeLC(aAttributes, KNodeAccessMode);
+		    iAccessMode = static_cast<TInt>(Str2IntL(*accessMode));
+		    CleanupStack::PopAndDestroy(accessMode);
+		    }
+		    break;
+		   
+		case ENodeLauncherExecutable:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    PushNodeL(ENodeLauncherExecutable, ENodeSoftwareType);
+		    }
+		    break;
 
 		default:
 			User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
@@ -237,13 +251,13 @@
 		}
 	iNodes.Remove(lastIdx);
 
-	RPointerArray<CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
+	RPointerArray<Usif::CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
 	switch (node)
 		{
 		case ENodeLocalizedName:
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			HBufC* name = ConvertBufferTo16bitL(*iContentChunks);
 			CleanupStack::PushL(name);
 			name->Des().TrimAll();
@@ -255,7 +269,7 @@
 		case ENodeMimeType:
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			HBufC* mimeType = ConvertBufferTo16bitL(*iContentChunks);
 			CleanupStack::PushL(mimeType);
 			mimeType->Des().TrimAll();
@@ -268,28 +282,31 @@
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
 			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			regInfo.SetSifPluginUid(Str2UidL(*iContentChunks));
 			}
 			break;
-		
-		case ENodeInstallerSecureId:
-			{
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
-			regInfo.SetInstallerSecureId(Str2UidL(*iContentChunks));
-			}
-			break;
-		
-		case ENodeExecutionLayerSecureId:
-			{
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
-			regInfo.SetExecutionLayerSecureId(Str2UidL(*iContentChunks));
-			}
-			break;
+
+		case ENodeCustomAccess:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    iContentChunks->Des().TrimAll();
+		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+		    regInfo.SetCustomAccessL(iSecureId, static_cast<Usif::TAccessMode>(iAccessMode));
+		    }
+		    break;
+		    
+		case ENodeLauncherExecutable:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+		    HBufC* launcherExecutable = ConvertBufferTo16bitL(*iContentChunks);
+		    CleanupStack::PushL(launcherExecutable);
+		    launcherExecutable->Des().TrimAll();
+		    regInfo.SetLauncherExecutableL(*launcherExecutable);
+		    CleanupStack::PopAndDestroy(launcherExecutable);        
+		    }
+		    break;
 		}
 	
 	if (iContentChunks != NULL)
@@ -312,8 +329,8 @@
 		case ENodeLocalizedName:
 		case ENodeMimeType:
 		case ENodeSifPluginUid:
-		case ENodeInstallerSecureId:
-		case ENodeExecutionLayerSecureId:
+		case ENodeCustomAccess:  
+		case ENodeLauncherExecutable:
 			AddContentChunkL(aBytes);
 			break;
 
@@ -370,14 +387,6 @@
 		{
 		return ENodeSifPluginUid;
 		}
-	else if (aName == KNodeInstallerSecureId)
-		{
-		return ENodeInstallerSecureId;
-		}
-	else if (aName == KNodeExecutionLayerSecureId)
-		{
-		return ENodeExecutionLayerSecureId;
-		}
 	else if (aName == KNodeSoftwareType)
 		{
 		return ENodeSoftwareType;
@@ -386,6 +395,14 @@
 		{
 		return ENodeSoftwareTypeRegistrationData;
 		}
+	else if (aName == KNodeCustomAcess)
+	    {
+	    return ENodeCustomAccess;
+	    }
+	else if (aName == KNodeLauncherExecutable)
+	    {
+	    return ENodeLauncherExecutable;
+	    }
 	else
 		{
 		return ENodeNone;