codhandler/codeng/src/DrmHandler.cpp
changeset 0 dd21522fd290
--- /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") ));
+    }