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