--- 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;