installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp
branchRCL_3
changeset 26 8b7f4e561641
parent 25 7333d7932ef7
equal deleted inserted replaced
25:7333d7932ef7 26:8b7f4e561641
     1 /*
     1 /*
     2 * Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of the License "Eclipse Public License v1.0"
     5 * under the terms of the License "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    31 	_LIT8(KNodeSoftwareTypeRegistrationData, "LayeredExecutionEnvironments");
    31 	_LIT8(KNodeSoftwareTypeRegistrationData, "LayeredExecutionEnvironments");
    32 	_LIT8(KNodeSoftwareType, "softwareType");
    32 	_LIT8(KNodeSoftwareType, "softwareType");
    33 	_LIT8(KNodeLocalizedName, "localizedName");
    33 	_LIT8(KNodeLocalizedName, "localizedName");
    34 	_LIT8(KNodeMimeType, "mimeType");
    34 	_LIT8(KNodeMimeType, "mimeType");
    35 	_LIT8(KNodeSifPluginUid, "sifPluginUid");
    35 	_LIT8(KNodeSifPluginUid, "sifPluginUid");
    36     _LIT8(KNodeCustomAcess, "CustomAcess");
    36 	_LIT8(KNodeInstallerSecureId, "installerSecureId");
    37     _LIT8(KNodeSecureId, "SecureId");
    37 	_LIT8(KNodeExecutionLayerSecureId, "executionLayerSecureId");
    38     _LIT8(KNodeAccessMode, "AccessMode");
    38 	
    39     _LIT8(KNodeLauncherExecutable, "launcherExecutable");
       
    40     
       
    41 	_LIT8(KAttrSoftwareTypeName, "name");
    39 	_LIT8(KAttrSoftwareTypeName, "name");
    42 	_LIT8(KAttrLanguage, "language");
    40 	_LIT8(KAttrLanguage, "language");
    43 
    41 
    44 // ##########################################################################################
    42 // ##########################################################################################
    45 
    43 
   118 	{
   116 	{
   119 	delete iContentChunks;
   117 	delete iContentChunks;
   120 	iNodes.Close();
   118 	iNodes.Close();
   121 	}
   119 	}
   122 
   120 
   123 void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
   121 void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
   124 	{
   122 	{
   125 	iSwTypeRegInfoArray = &aSwTypeRegInfoArray;
   123 	iSwTypeRegInfoArray = &aSwTypeRegInfoArray;
   126 	
   124 	
   127 	Xml::CParser* parser = Xml::CParser::NewLC(KXmlMimeType, *this);
   125 	Xml::CParser* parser = Xml::CParser::NewLC(KXmlMimeType, *this);
   128 	parser->EnableFeature(Xml::ESendFullContentInOneChunk); // Use ESendFullContentInOneChunk if the parser supports it
   126 	parser->EnableFeature(Xml::ESendFullContentInOneChunk); // Use ESendFullContentInOneChunk if the parser supports it
   175 		
   173 		
   176 		case ENodeSoftwareType:
   174 		case ENodeSoftwareType:
   177 			{
   175 			{
   178 			PushNodeL(ENodeSoftwareType, ENodeSoftwareTypeRegistrationData);
   176 			PushNodeL(ENodeSoftwareType, ENodeSoftwareTypeRegistrationData);
   179 			HBufC* softwareTypeName = AttributeLC(aAttributes, KAttrSoftwareTypeName);
   177 			HBufC* softwareTypeName = AttributeLC(aAttributes, KAttrSoftwareTypeName);
   180 			Usif::CSoftwareTypeRegInfo* regInfo = Usif::CSoftwareTypeRegInfo::NewL(*softwareTypeName);
   178 			CSoftwareTypeRegInfo* regInfo = CSoftwareTypeRegInfo::NewL(*softwareTypeName);
   181 			CleanupStack::PushL(regInfo);
   179 			CleanupStack::PushL(regInfo);
   182 			iSwTypeRegInfoArray->AppendL(regInfo);
   180 			iSwTypeRegInfoArray->AppendL(regInfo);
   183 			CleanupStack::Pop();
   181 			CleanupStack::Pop();
   184 			CleanupStack::PopAndDestroy(softwareTypeName);
   182 			CleanupStack::PopAndDestroy(softwareTypeName);
   185 			}
   183 			}
   202 		
   200 		
   203 		case ENodeSifPluginUid:
   201 		case ENodeSifPluginUid:
   204 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   202 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   205 			PushNodeL(ENodeSifPluginUid, ENodeSoftwareType);
   203 			PushNodeL(ENodeSifPluginUid, ENodeSoftwareType);
   206 			break;
   204 			break;
   207 			
   205 		
   208 		case ENodeCustomAccess:
   206 		case ENodeInstallerSecureId:
   209 		    {
   207 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   210 		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
   208 			PushNodeL(ENodeInstallerSecureId, ENodeSoftwareType);
   211 		    PushNodeL(ENodeCustomAccess, ENodeSoftwareType);
   209 			break;
   212 		    HBufC* secureId = AttributeLC(aAttributes, KNodeSecureId);
   210 		
   213 		    secureId->Des().TrimAll();
   211 		case ENodeExecutionLayerSecureId:
   214 		    iSecureId = TUid::Uid(Str2IntL(*secureId, EHex));
   212 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   215 		    CleanupStack::PopAndDestroy(secureId);
   213 			PushNodeL(ENodeExecutionLayerSecureId, ENodeSoftwareType);
   216 		    
   214 			break;
   217 		    HBufC* accessMode = AttributeLC(aAttributes, KNodeAccessMode);
       
   218 		    iAccessMode = static_cast<TInt>(Str2IntL(*accessMode));
       
   219 		    CleanupStack::PopAndDestroy(accessMode);
       
   220 		    }
       
   221 		    break;
       
   222 		   
       
   223 		case ENodeLauncherExecutable:
       
   224 		    {
       
   225 		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
       
   226 		    PushNodeL(ENodeLauncherExecutable, ENodeSoftwareType);
       
   227 		    }
       
   228 		    break;
       
   229 
   215 
   230 		default:
   216 		default:
   231 			User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
   217 			User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
   232 		}
   218 		}
   233 	
   219 	
   249 		{
   235 		{
   250 		User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
   236 		User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
   251 		}
   237 		}
   252 	iNodes.Remove(lastIdx);
   238 	iNodes.Remove(lastIdx);
   253 
   239 
   254 	RPointerArray<Usif::CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
   240 	RPointerArray<CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
   255 	switch (node)
   241 	switch (node)
   256 		{
   242 		{
   257 		case ENodeLocalizedName:
   243 		case ENodeLocalizedName:
   258 			{
   244 			{
   259 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   245 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   260 			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   246 			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   261 			HBufC* name = ConvertBufferTo16bitL(*iContentChunks);
   247 			HBufC* name = ConvertBufferTo16bitL(*iContentChunks);
   262 			CleanupStack::PushL(name);
   248 			CleanupStack::PushL(name);
   263 			name->Des().TrimAll();
   249 			name->Des().TrimAll();
   264 			regInfo.SetLocalizedSoftwareTypeNameL(iLocalizedNameLanguage, *name);
   250 			regInfo.SetLocalizedSoftwareTypeNameL(iLocalizedNameLanguage, *name);
   265 			CleanupStack::PopAndDestroy(name);
   251 			CleanupStack::PopAndDestroy(name);
   267 			break;
   253 			break;
   268 
   254 
   269 		case ENodeMimeType:
   255 		case ENodeMimeType:
   270 			{
   256 			{
   271 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   257 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   272 			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   258 			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   273 			HBufC* mimeType = ConvertBufferTo16bitL(*iContentChunks);
   259 			HBufC* mimeType = ConvertBufferTo16bitL(*iContentChunks);
   274 			CleanupStack::PushL(mimeType);
   260 			CleanupStack::PushL(mimeType);
   275 			mimeType->Des().TrimAll();
   261 			mimeType->Des().TrimAll();
   276 			regInfo.SetMimeTypeL(*mimeType);
   262 			regInfo.SetMimeTypeL(*mimeType);
   277 			CleanupStack::PopAndDestroy(mimeType);
   263 			CleanupStack::PopAndDestroy(mimeType);
   280 		
   266 		
   281 		case ENodeSifPluginUid:
   267 		case ENodeSifPluginUid:
   282 			{
   268 			{
   283 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   269 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   284 			iContentChunks->Des().TrimAll();
   270 			iContentChunks->Des().TrimAll();
   285 			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   271 			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   286 			regInfo.SetSifPluginUid(Str2UidL(*iContentChunks));
   272 			regInfo.SetSifPluginUid(Str2UidL(*iContentChunks));
   287 			}
   273 			}
   288 			break;
   274 			break;
   289 
   275 		
   290 		case ENodeCustomAccess:
   276 		case ENodeInstallerSecureId:
   291 		    {
   277 			{
   292 		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
   278 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   293 		    iContentChunks->Des().TrimAll();
   279 			iContentChunks->Des().TrimAll();
   294 		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   280 			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   295 		    regInfo.SetCustomAccessL(iSecureId, static_cast<Usif::TAccessMode>(iAccessMode));
   281 			regInfo.SetInstallerSecureId(Str2UidL(*iContentChunks));
   296 		    }
   282 			}
   297 		    break;
   283 			break;
   298 		    
   284 		
   299 		case ENodeLauncherExecutable:
   285 		case ENodeExecutionLayerSecureId:
   300 		    {
   286 			{
   301 		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
   287 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
   302 		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   288 			iContentChunks->Des().TrimAll();
   303 		    HBufC* launcherExecutable = ConvertBufferTo16bitL(*iContentChunks);
   289 			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
   304 		    CleanupStack::PushL(launcherExecutable);
   290 			regInfo.SetExecutionLayerSecureId(Str2UidL(*iContentChunks));
   305 		    launcherExecutable->Des().TrimAll();
   291 			}
   306 		    regInfo.SetLauncherExecutableL(*launcherExecutable);
   292 			break;
   307 		    CleanupStack::PopAndDestroy(launcherExecutable);        
       
   308 		    }
       
   309 		    break;
       
   310 		}
   293 		}
   311 	
   294 	
   312 	if (iContentChunks != NULL)
   295 	if (iContentChunks != NULL)
   313 		{
   296 		{
   314 		iContentChunks->Des().Zero();
   297 		iContentChunks->Des().Zero();
   327 			break;
   310 			break;
   328 		
   311 		
   329 		case ENodeLocalizedName:
   312 		case ENodeLocalizedName:
   330 		case ENodeMimeType:
   313 		case ENodeMimeType:
   331 		case ENodeSifPluginUid:
   314 		case ENodeSifPluginUid:
   332 		case ENodeCustomAccess:  
   315 		case ENodeInstallerSecureId:
   333 		case ENodeLauncherExecutable:
   316 		case ENodeExecutionLayerSecureId:
   334 			AddContentChunkL(aBytes);
   317 			AddContentChunkL(aBytes);
   335 			break;
   318 			break;
   336 
   319 
   337 		default:
   320 		default:
   338 			User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
   321 			User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
   385 		}
   368 		}
   386 	else if (aName == KNodeSifPluginUid)
   369 	else if (aName == KNodeSifPluginUid)
   387 		{
   370 		{
   388 		return ENodeSifPluginUid;
   371 		return ENodeSifPluginUid;
   389 		}
   372 		}
       
   373 	else if (aName == KNodeInstallerSecureId)
       
   374 		{
       
   375 		return ENodeInstallerSecureId;
       
   376 		}
       
   377 	else if (aName == KNodeExecutionLayerSecureId)
       
   378 		{
       
   379 		return ENodeExecutionLayerSecureId;
       
   380 		}
   390 	else if (aName == KNodeSoftwareType)
   381 	else if (aName == KNodeSoftwareType)
   391 		{
   382 		{
   392 		return ENodeSoftwareType;
   383 		return ENodeSoftwareType;
   393 		}
   384 		}
   394 	else if (aName == KNodeSoftwareTypeRegistrationData)
   385 	else if (aName == KNodeSoftwareTypeRegistrationData)
   395 		{
   386 		{
   396 		return ENodeSoftwareTypeRegistrationData;
   387 		return ENodeSoftwareTypeRegistrationData;
   397 		}
   388 		}
   398 	else if (aName == KNodeCustomAcess)
       
   399 	    {
       
   400 	    return ENodeCustomAccess;
       
   401 	    }
       
   402 	else if (aName == KNodeLauncherExecutable)
       
   403 	    {
       
   404 	    return ENodeLauncherExecutable;
       
   405 	    }
       
   406 	else
   389 	else
   407 		{
   390 		{
   408 		return ENodeNone;
   391 		return ENodeNone;
   409 		}
   392 		}
   410 	}
   393 	}