diff -r 000000000000 -r dd21522fd290 codhandler/codeng/src/DrmHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codhandler/codeng/src/DrmHandler.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,174 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Implementation of class CDrmHandler. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include "DrmHandler.h" +#include "CodLogger.h" +#include "CodPanic.h" + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CDrmHandler::NewL() +// --------------------------------------------------------- +// +CDrmHandler* CDrmHandler::NewL( const TDesC& aFname ) + { + CDrmHandler* handler = new (ELeave) CDrmHandler(); + CleanupStack::PushL( handler ); + handler->ConstructL( aFname ); + CleanupStack::Pop( handler ); + return handler; + } + +// --------------------------------------------------------- +// CDrmHandler::~CDrmHandler() +// --------------------------------------------------------- +// +CDrmHandler::~CDrmHandler() + { + CLOG(( ECodEng, 2, _L("-> *** CDrmHandler::~CDrmHandler") )); + delete iDrmCommon; + iRightsClient.Close(); + delete iContentUri; + delete iType; + CLOG(( ECodEng, 2, _L("<- *** CDrmHandler::~CDrmHandler") )); + } + +// --------------------------------------------------------- +// CDrmHandler::Cleanup() +// --------------------------------------------------------- +// +void CDrmHandler::Cleanup() + { + CLOG(( ECodEng, 2, _L("-> CDrmHandler::Cleanup") )); + if ( iContentUri && iRightsClient.Handle() ) + { +#ifdef __TEST_COD_LOG + TInt err = // ('Log-only' variable.) +#endif /* def __TEST_COD_LOG */ + iRightsClient.DeleteDbEntry( *iContentUri ); + CLOG(( ECodEng, 3, _L(" err(%d)"), err )); + delete iContentUri; + iContentUri = NULL; + } + CLOG(( ECodEng, 2, _L("<- CDrmHandler::Cleanup") )); + } + +// --------------------------------------------------------- +// CDrmHandler::Type() +// --------------------------------------------------------- +// +TPtrC8 CDrmHandler::Type() const + { + TPtrC8 ptr; + if ( iType ) + { + ptr.Set( *iType ); + } + return ptr; + } + +// --------------------------------------------------------- +// CDrmHandler::CDrmHandler() +// --------------------------------------------------------- +// +CDrmHandler::CDrmHandler() + { + CLOG(( ECodEng, 2, _L("*** CDrmHandler::CDrmHandler") )); + } + +// --------------------------------------------------------- +// CDrmHandler::ConstructL() +// --------------------------------------------------------- +// +void CDrmHandler::ConstructL( const TDesC& aFname ) + { + CLOG(( ECodEng, 2, _L("-> CDrmHandler::ConstructL") )); + TBool isDcf( EFalse ); + iDrmCommon = DRMCommon::NewL(); + User::LeaveIfError( iDrmCommon->Connect() ); + User::LeaveIfError( iDrmCommon->IsProtectedFile( aFname, isDcf ) ); + if ( !isDcf ) + { + CLOG(( ECodEng, 4, _L(" not DCF") )); + User::Leave( KErrNotSupported ); + } + DRMCommon::TContentProtection prot; + TUint length; + User::LeaveIfError( iDrmCommon->GetFileInfo + ( aFname, prot, iType, iContentUri, length ) ); +#ifdef __TEST_COD_LOG + TPtrC8 mime( iType->Des() ); + CLOG(( ECodEng, 4, \ + _L8(" inside DCF: MIME==<%S>, size(%u), prot(%d)"), \ + &mime, length, prot )); +#endif /* def __TEST_COD_LOG */ + CheckTypeL( TDataType( *iType ) ); + delete iDrmCommon; + iDrmCommon = NULL; + // For Forward-Locked and Combined Delivery messages, the + // saved rights need to be cleaned up if something goes wrong. + // Prepare for cleanup. + if( prot != DRMCommon::ESuperDistributable ) + { + CLOG(( ECodEng, 4, _L(" connect DRM Rights Client") )); + User::LeaveIfError( iRightsClient.Connect() ); + } + else + { + // No cleanup is required, delete uneeded members now. + delete iContentUri; + iContentUri = NULL; + } + CLOG(( ECodEng, 2, _L("<- CDrmHandler::ConstructL") )); + } + +// --------------------------------------------------------- +// CDrmHandler::CheckTypeL +// --------------------------------------------------------- +// +void CDrmHandler::CheckTypeL( const TDataType& aType ) const + { +#ifdef __TEST_COD_LOG + TPtrC8 mime( aType.Des8() ); + CLOG(( ECodEng, 4, _L8("-> CDrmHandler::CheckTypeL(%S)"), &mime )); +#endif /* def __TEST_COD_LOG */ + __ASSERT_DEBUG( iDrmCommon, CodPanic( ECodInternal ) ); + TBool supported( EFalse ); + TDataType type; + TInt i; + User::LeaveIfError( iDrmCommon->DataTypesCount( i ) ); + for( i--; i >= 0; i-- ) + { + User::LeaveIfError( iDrmCommon->SupportedDataType( i, type ) ); + if( type == aType ) + { + supported = ETrue; + break; + } + } + if( !supported ) + { + User::Leave( KMimeNotSupported ); + } + CLOG(( ECodEng, 4, _L("<- CDrmHandler::CheckTypeL") )); + }