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