37 RFs fs; |
38 RFs fs; |
38 |
39 |
39 User::LeaveIfError(client.Connect()); |
40 User::LeaveIfError(client.Connect()); |
40 CleanupClosePushL(client); |
41 CleanupClosePushL(client); |
41 User::LeaveIfError(fs.Connect()); |
42 User::LeaveIfError(fs.Connect()); |
42 User::LeaveIfError(fs.ShareAuto()); |
43 User::LeaveIfError(fs.ShareAuto()); |
43 CleanupClosePushL(fs); |
44 CleanupClosePushL(fs); |
44 dcf = CDcfCommon::NewL(aVirtualPath.URI(), &fs); |
45 dcf = CDcfCommon::NewL(aVirtualPath.URI(), &fs); |
45 CleanupStack::PushL(dcf); |
46 CleanupStack::PushL(dcf); |
46 User::LeaveIfError( dcf->OpenPart(aVirtualPath.UniqueId())); |
47 User::LeaveIfError( dcf->OpenPart(aVirtualPath.UniqueId())); |
47 User::LeaveIfError( client.DeleteDbEntry(*dcf->iContentID)); |
48 User::LeaveIfError( client.DeleteDbEntry(*dcf->iContentID)); |
48 CleanupStack::PopAndDestroy(3); // dcf, fs, client |
49 CleanupStack::PopAndDestroy(3); // dcf, fs, client |
49 } |
50 } |
50 |
51 |
51 void DoDeleteAllRightsObjects( const TVirtualPathPtr& aVirtualPath ) |
52 void DoDeleteAllRightsObjects( const TVirtualPathPtr& aVirtualPath ) |
52 { |
53 { |
53 TRAP_IGNORE( DoDeleteAllRightsObjectsL( aVirtualPath ) ); |
54 TRAP_IGNORE( DoDeleteAllRightsObjectsL( aVirtualPath ) ); |
54 } |
55 } |
55 |
56 |
56 void DoDeleteRightsObjectL( |
57 void DoDeleteRightsObjectL( |
57 const CRightsInfo& aRightsInfo) |
58 const CRightsInfo& aRightsInfo) |
58 { |
59 { |
81 User::LeaveIfError( lex.Val(uniqueId) ); |
82 User::LeaveIfError( lex.Val(uniqueId) ); |
82 User::LeaveIfError( client.DeleteDbEntry(*contentId, uniqueId) ); |
83 User::LeaveIfError( client.DeleteDbEntry(*contentId, uniqueId) ); |
83 } |
84 } |
84 CleanupStack::PopAndDestroy(2); // contentId, client |
85 CleanupStack::PopAndDestroy(2); // contentId, client |
85 } |
86 } |
86 |
87 |
87 void DoDeleteRightsObject( |
88 void DoDeleteRightsObject( |
88 const CRightsInfo& aRightsInfo) |
89 const CRightsInfo& aRightsInfo) |
89 { |
90 { |
90 TRAP_IGNORE( DoDeleteRightsObjectL( aRightsInfo ) ); |
91 TRAP_IGNORE( DoDeleteRightsObjectL( aRightsInfo ) ); |
91 } |
92 } |
92 |
93 |
93 |
94 |
94 template<class S> |
95 template<class S> |
95 void PointerArrayResetDestroyAndClose(TAny* aPtr) |
96 void PointerArrayResetDestroyAndClose(TAny* aPtr) |
117 TRightsStatus PermissionStatus( |
118 TRightsStatus PermissionStatus( |
118 CDRMPermission* aPermission) |
119 CDRMPermission* aPermission) |
119 { |
120 { |
120 TRightsStatus r = ERightsStatusNone; |
121 TRightsStatus r = ERightsStatusNone; |
121 TTime time; |
122 TTime time; |
122 |
123 |
123 time.HomeTime(); |
124 time.HomeTime(); |
124 if ((!(aPermission->iAvailableRights & ERightsTopLevel) || |
125 if ((!(aPermission->iAvailableRights & ERightsTopLevel) || |
125 !aPermission->iTopLevel->Expired(time)) |
126 !aPermission->iTopLevel->Expired(time)) |
126 |
127 |
127 && |
128 && |
128 |
129 |
129 (IsValid(aPermission, EPlay, time) || |
130 (IsValid(aPermission, EPlay, time) || |
130 IsValid(aPermission, EView, time) || |
131 IsValid(aPermission, EView, time) || |
131 IsValid(aPermission, EPrint, time) || |
132 IsValid(aPermission, EPrint, time) || |
132 IsValid(aPermission, EExecute, time))) |
133 IsValid(aPermission, EExecute, time))) |
133 { |
134 { |
238 CleanupStack::PushL(permCleanup); |
239 CleanupStack::PushL(permCleanup); |
239 for (i = 0; i < permissions.Count(); i++) |
240 for (i = 0; i < permissions.Count(); i++) |
240 { |
241 { |
241 aArray.AppendL(ConvertToRightsInfoL(permissions[i], *idList[j])); |
242 aArray.AppendL(ConvertToRightsInfoL(permissions[i], *idList[j])); |
242 } |
243 } |
243 |
244 |
244 CleanupStack::PopAndDestroy(1); // permCleanup |
245 CleanupStack::PopAndDestroy(1); // permCleanup |
245 } |
246 } |
246 CleanupStack::PopAndDestroy(2); // idCleanup, client |
247 CleanupStack::PopAndDestroy(2); // idCleanup, client |
247 } |
248 } |
248 |
249 |
249 void COma2AgentRightsManager::ListRightsL( |
250 void COma2AgentRightsManager::ListRightsL( |
250 RStreamablePtrArray<CRightsInfo>& aArray, |
251 RStreamablePtrArray<CRightsInfo>& aArray, |
251 const TDesC& aUri) const |
252 const TDesC& aUri) const |
252 { |
253 { |
253 TVirtualPathPtr ptr(aUri, KDefaultContentObject); |
254 TVirtualPathPtr ptr(aUri, KDefaultContentObject); |
254 ListRightsL(aArray, ptr); |
255 ListRightsL(aArray, ptr); |
255 } |
256 } |
256 |
257 |
257 void COma2AgentRightsManager::ListRightsL( |
258 void COma2AgentRightsManager::ListRightsL( |
258 RStreamablePtrArray<CRightsInfo>& aArray, |
259 RStreamablePtrArray<CRightsInfo>& aArray, |
259 TVirtualPathPtr& aVirtualPath) const |
260 TVirtualPathPtr& aVirtualPath) const |
260 { |
261 { |
261 RPointerArray<CDRMPermission> permissions; |
262 RPointerArray<CDRMPermission> permissions; |
262 RDRMRightsClient client; |
263 RDRMRightsClient client; |
263 TCleanupItem listCleanup(PointerArrayResetDestroyAndClose<CDRMPermission>, |
264 TCleanupItem listCleanup(PointerArrayResetDestroyAndClose<CDRMPermission>, |
270 TUint32 reason = 0; |
271 TUint32 reason = 0; |
271 |
272 |
272 User::LeaveIfError(client.Connect()); |
273 User::LeaveIfError(client.Connect()); |
273 CleanupClosePushL(client); |
274 CleanupClosePushL(client); |
274 User::LeaveIfError(fs.Connect()); |
275 User::LeaveIfError(fs.Connect()); |
275 User::LeaveIfError(fs.ShareAuto()); |
276 User::LeaveIfError(fs.ShareAuto()); |
276 CleanupClosePushL(fs); |
277 CleanupClosePushL(fs); |
277 dcf = CDcfCommon::NewL(aVirtualPath.URI(), &fs); |
278 dcf = CDcfCommon::NewL(aVirtualPath.URI(), &fs); |
278 if (dcf == NULL) |
279 if (dcf == NULL) |
279 { |
280 { |
280 User::Leave(KErrArgument); |
281 User::Leave(KErrArgument); |
281 } |
282 } |
282 CleanupStack::PushL(dcf); |
283 CleanupStack::PushL(dcf); |
283 User::LeaveIfError(dcf->OpenPart(aVirtualPath.UniqueId())); |
284 User::LeaveIfError(dcf->OpenPart(aVirtualPath.UniqueId())); |
284 |
285 |
285 TRAP(error, permission = client.GetActiveRightsL(EUnknown, *dcf->iContentID, reason)); |
286 TRAP(error, permission = client.GetActiveRightsL(EUnknown, *dcf->iContentID, reason)); |
286 if (permission != NULL) |
287 if (permission != NULL) |
287 { |
288 { |
288 CleanupStack::PushL(permission); |
289 CleanupStack::PushL(permission); |
289 aArray.AppendL(ConvertToRightsInfoL(permission, *dcf->iContentID)); |
290 aArray.AppendL(ConvertToRightsInfoL(permission, *dcf->iContentID)); |
290 CleanupStack::PopAndDestroy(); // permission |
291 CleanupStack::PopAndDestroy(); // permission |
291 } |
292 } |
292 |
293 |
293 TRAP(error, client.GetDBEntriesL(*dcf->iContentID, permissions)); |
294 TRAP(error, client.GetDBEntriesL(*dcf->iContentID, permissions)); |
294 CleanupStack::PushL(listCleanup); |
295 CleanupStack::PushL(listCleanup); |
295 |
296 |
296 for (i = 0; i < permissions.Count(); i++) |
297 for (i = 0; i < permissions.Count(); i++) |
297 { |
298 { |
298 aArray.AppendL(ConvertToRightsInfoL(permissions[i], *dcf->iContentID)); |
299 aArray.AppendL(ConvertToRightsInfoL(permissions[i], *dcf->iContentID)); |
299 } |
300 } |
300 |
301 |
301 CleanupStack::PopAndDestroy(4); // listCleanup, dcf, fs, client |
302 CleanupStack::PopAndDestroy(4); // listCleanup, dcf, fs, client |
302 } |
303 } |
303 |
304 |
304 void COma2AgentRightsManager::ListContentL( |
305 void COma2AgentRightsManager::ListContentL( |
305 RStreamablePtrArray<CVirtualPath>& aArray, |
306 RStreamablePtrArray<CVirtualPath>& aArray, |
306 CRightsInfo& aRightsInfo) const |
307 CRightsInfo& aRightsInfo) const |
307 { |
308 { |
308 RDRMRightsClient client; |
309 RDRMRightsClient client; |
321 } |
322 } |
322 contentId = CnvUtfConverter::ConvertFromUnicodeToUtf8L( |
323 contentId = CnvUtfConverter::ConvertFromUnicodeToUtf8L( |
323 aRightsInfo.UniqueId().Left(n)); |
324 aRightsInfo.UniqueId().Left(n)); |
324 CleanupStack::PushL(contentId); |
325 CleanupStack::PushL(contentId); |
325 rep = CDcfRep::NewL(); |
326 rep = CDcfRep::NewL(); |
326 CleanupStack::PushL(rep); |
327 CleanupStack::PushL(rep); |
327 rep->OrderListL(); |
328 rep->OrderListL(); |
328 entry = rep->NextL(); |
329 entry = rep->NextL(); |
329 while (entry != NULL) |
330 while (entry != NULL) |
330 { |
331 { |
331 CleanupStack::PushL(entry); |
332 CleanupStack::PushL(entry); |
333 KDefaultContentObject)); |
334 KDefaultContentObject)); |
334 aArray.AppendL(path); |
335 aArray.AppendL(path); |
335 CleanupStack::PopAndDestroy(); // entry |
336 CleanupStack::PopAndDestroy(); // entry |
336 entry = rep->NextL(); |
337 entry = rep->NextL(); |
337 } |
338 } |
338 |
339 |
339 CleanupStack::PopAndDestroy(3); // rep, contentId, client |
340 CleanupStack::PopAndDestroy(3); // rep, contentId, client |
340 } |
341 } |
341 |
342 |
342 MAgentRightsBase* COma2AgentRightsManager::GetRightsDataL( |
343 MAgentRightsBase* COma2AgentRightsManager::GetRightsDataL( |
343 const CRightsInfo& aRightsInfo) const |
344 const CRightsInfo& aRightsInfo) const |
344 { |
345 { |
345 RDRMRightsClient client; |
346 RDRMRightsClient client; |
346 CDRMPermission* permission = NULL; |
347 CDRMPermission* permission = NULL; |
376 rights->SetAssetL(*asset); |
377 rights->SetAssetL(*asset); |
377 CleanupStack::PopAndDestroy(2); // asset, permission |
378 CleanupStack::PopAndDestroy(2); // asset, permission |
378 } |
379 } |
379 CleanupStack::Pop(); // rights |
380 CleanupStack::Pop(); // rights |
380 CleanupStack::PopAndDestroy(2); // contentId, client |
381 CleanupStack::PopAndDestroy(2); // contentId, client |
381 |
382 |
382 return rights; |
383 return rights; |
383 } |
384 } |
384 |
385 |
385 TInt COma2AgentRightsManager::DeleteRightsObject( |
386 TInt COma2AgentRightsManager::DeleteRightsObject( |
386 const CRightsInfo& aRightsInfo) |
387 const CRightsInfo& aRightsInfo) |
387 { |
388 { |
388 TInt error = KErrNone; |
389 TInt error = KErrNone; |
389 TRAP( error, DoDeleteRightsObject(aRightsInfo)); |
390 TRAP( error, DoDeleteRightsObject(aRightsInfo)); |
390 return error; |
391 return error; |
391 } |
392 } |
392 |
393 |
393 TInt COma2AgentRightsManager::DeleteAllRightsObjects( |
394 TInt COma2AgentRightsManager::DeleteAllRightsObjects( |
394 const TVirtualPathPtr& aVirtualPath) |
395 const TVirtualPathPtr& aVirtualPath) |
395 { |
396 { |
396 TInt error = KErrNone; |
397 TInt error = KErrNone; |
397 TRAP( error, DoDeleteAllRightsObjectsL(aVirtualPath)); |
398 TRAP( error, DoDeleteAllRightsObjectsL(aVirtualPath)); |
398 return error; |
399 return error; |
399 } |
400 } |
400 |
401 |
401 TInt COma2AgentRightsManager::SetProperty( |
402 TInt COma2AgentRightsManager::SetProperty( |
402 TAgentProperty /*aProperty*/, |
403 TAgentProperty /*aProperty*/, |
403 TInt /*aValue*/) |
404 TInt /*aValue*/) |
404 { |
405 { |
405 return KErrCANotSupported; |
406 return KErrCANotSupported; |