diff -r 000000000000 -r a2952bb97e68 mpx/commonframework/common/src/mpxdrmmediautility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/commonframework/common/src/mpxdrmmediautility.cpp Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,290 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: EXPORT_C implementation of drm media utility +* +*/ + + +#include +#include +#include "mpxdrmmediautility.h" +#include "mpxdrmmediaomaagent.h" +#include "mpxdrmmediawmaagent.h" +#include "mpxmediadrmdefs.h" +#include "mpxlog.h" + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CMPXDrmMediaUtility* CMPXDrmMediaUtility::NewL() + { + MPX_FUNC("CMPXDrmMediaUtility::NewL()"); + CMPXDrmMediaUtility* p = new (ELeave) CMPXDrmMediaUtility(); + CleanupStack::PushL(p); + p->ConstructL(); + CleanupStack::Pop(p); + return p; + } + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CMPXDrmMediaUtility* CMPXDrmMediaUtility::NewLC() + { + MPX_FUNC("CMPXDrmMediaUtility::NewLC()"); + CMPXDrmMediaUtility* p = new (ELeave) CMPXDrmMediaUtility(); + CleanupStack::PushL(p); + p->ConstructL(); + return p; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CMPXDrmMediaUtility::~CMPXDrmMediaUtility() + { + MPX_FUNC("CMPXDrmMediaUtility::~CMPXDrmMediaUtility()"); + iAgents.ResetAndDestroy(); + iAgents.Close(); + delete iDefaultMedia; + iFs.Close(); + } + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +CMPXDrmMediaUtility::CMPXDrmMediaUtility() + { + MPX_FUNC("CMPXDrmMediaUtility::CMPXDrmMediaUtility()"); + } + +// ---------------------------------------------------------------------------- +// 2nd phase constructor. +// ---------------------------------------------------------------------------- +// +void CMPXDrmMediaUtility::ConstructL() + { + MPX_FUNC("CMPXDrmMediaUtility::ConstructL()"); + + // Create the OMA Agent + CMPXDrmMediaOmaAgent* omaAgent = CMPXDrmMediaOmaAgent::NewLC(); + iAgents.Insert( omaAgent, EOmaDrmAgent ); + CleanupStack::Pop( omaAgent ); + + // Create the WMA Agent + CMPXDrmMediaWmaAgent* wmaAgent = CMPXDrmMediaWmaAgent::NewLC(); + iAgents.Insert( wmaAgent, EWmaDrmAgent ); + CleanupStack::Pop( wmaAgent ); + + // Create a default media + RArray supportedIds; + CleanupClosePushL( supportedIds ); + supportedIds.AppendL(KMPXMediaIdDrm); + iDefaultMedia = CMPXMedia::NewL( supportedIds.Array() ); + CleanupStack::PopAndDestroy( &supportedIds ); + iDefaultMedia->SetTObjectValueL( KMPXMediaDrmProtected, + EFalse ); + + // Create file system session + User::LeaveIfError( iFs.Connect() ); + } + + +// ---------------------------------------------------------------------------- +// Initialize utility using a filename +// ---------------------------------------------------------------------------- +// +EXPORT_C void CMPXDrmMediaUtility::InitL( const TDesC& aFileName ) + { + MPX_DEBUG2("CMPXDrmMediaUtility::InitL(%S) entering", &aFileName ); + + Close(); + + if ( BaflUtils::FileExists( iFs, aFileName )) + { + CContent* content( CContent::NewLC( aFileName, EContentShareReadWrite )); + FindAgent( *content ); + if ( iCurrentAgent ) + { + iCurrentAgent->InitL( aFileName ); + } + CleanupStack::PopAndDestroy( content ); + } + iConsumeStarted = EFalse; + + MPX_DEBUG1("CMPXDrmMediaUtility::InitL() exiting" ); + } + +// ---------------------------------------------------------------------------- +// Initialize utility using a file handle +// ---------------------------------------------------------------------------- +// +EXPORT_C void CMPXDrmMediaUtility::InitL( RFile& aFile ) + { + MPX_DEBUG1("CMPXDrmMediaUtility::InitL(RFile) entering" ); + + Close(); + CContent* content = CContent::NewLC( aFile ); + FindAgent( *content ); + if ( iCurrentAgent ) + { + iCurrentAgent->InitL( aFile ); + } + CleanupStack::PopAndDestroy( content ); + iConsumeStarted = EFalse; + + MPX_DEBUG1("CMPXDrmMediaUtility::InitL(RFile) exiting" ); + } + +// ---------------------------------------------------------------------------- +// Gets media object with the given attributes +// ---------------------------------------------------------------------------- +// +EXPORT_C const CMPXMedia* CMPXDrmMediaUtility::GetMediaL( TUint aAttributes ) + { + MPX_DEBUG2("CMPXDrmMediaUtility::GetMediaL(%d) entering", aAttributes ); + + const CMPXMedia* media( NULL ); + if ( iCurrentAgent ) + { + media = &( iCurrentAgent->GetMediaL( aAttributes )); + } + else + { + MPX_DEBUG1("CMPXDrmMediaUtility::GetMediaL(): Returning default media"); + media = iDefaultMedia; + } + + MPX_DEBUG1("CMPXDrmMediaUtility::GetMediaL() exiting" ); + return media; + } + + +// ---------------------------------------------------------------------------- +// Consumes the rights for the current media according +// to the specified consume type +// ---------------------------------------------------------------------------- +// +EXPORT_C void CMPXDrmMediaUtility::ConsumeL( TDrmConsumeType aType ) + { + MPX_DEBUG1("CMPXDrmMediaUtility::ConsumeL() entering"); + + if ( iCurrentAgent ) + { + TDrmConsumeType type( EMPXDrmConsumeNone ); + const CMPXMedia& media( iCurrentAgent->GetMediaL( EMPXMediaDrmProtected )); + if ( media.ValueTObjectL( KMPXMediaDrmProtected )) + { + switch ( aType ) + { + case EMPXDrmConsumeStart: + { + type = aType; + iConsumeStarted = ETrue; + break; + } + case EMPXDrmConsumePause: + case EMPXDrmConsumeContinue: + case EMPXDrmConsumeFinish: + { + if ( iConsumeStarted ) + { + type = aType; + if ( EMPXDrmConsumeFinish == aType ) + { + iConsumeStarted = EFalse; + } + } + break; + } + case EMPXDrmConsumeStartOrContinue: + { + if ( iConsumeStarted ) + { + type = EMPXDrmConsumeContinue; + } + else + { + type = EMPXDrmConsumeStart; + iConsumeStarted = ETrue; + } + break; + } + default: + { + type = EMPXDrmConsumeNone; + iConsumeStarted = EFalse; + break; + } + } + + if ( EMPXDrmConsumeNone != type ) + { + iCurrentAgent->ConsumeL( type ); + } + } + else + { + iConsumeStarted = EFalse; + } + } + + MPX_DEBUG1("CMPXDrmMediaUtility::ConsumeL() exiting" ); + } + +// ---------------------------------------------------------------------------- +// Closes and unitializes the utility +// ---------------------------------------------------------------------------- +// +EXPORT_C void CMPXDrmMediaUtility::Close() + { + MPX_DEBUG1("CMPXDrmMediaUtility::Close() entering" ); + + if ( iCurrentAgent ) + { + iCurrentAgent->Close(); + iCurrentAgent = NULL; + } + + MPX_DEBUG1("CMPXDrmMediaUtility::Close() exiting" ); + } + +// ---------------------------------------------------------------------------- +// Finds an agent to handle the content +// ---------------------------------------------------------------------------- +// +void CMPXDrmMediaUtility::FindAgent( CContent& aContent ) + { + MPX_DEBUG1("CMPXDrmMediaUtility::FindAgent() entering" ); + + TAgent agent( aContent.Agent() ); + if ( agent.Name() == KMPXWDRMCafAgentName || + agent.Name() == KMPXS60WMDRMCafAgent ) + { + iCurrentAgent = iAgents[EWmaDrmAgent]; + } + else if ( agent.Name() == KMPXOMACafAgentName ) + { + iCurrentAgent = iAgents[EOmaDrmAgent]; + } + else + { + iCurrentAgent = NULL; + } + MPX_DEBUG1("CMPXDrmMediaUtility::FindAgent() exiting" ); + }