--- /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 <DRMCommon.h>
+#include <DocumentHandler.h>
+#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") ));
+ }