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